Bootstrap

【人工智能概论】 数据预处理——MaxMin归一化、Z-Score异常判断、经验异常判断、突变异常分析

【人工智能概论】 数据预处理——MaxMin归一化、Z-Score异常判断、经验异常判断、突变异常分析


一. MaxMin归一化

1.1 数据标准化的目的与好处

  • 将数据按比例缩放,去除数据单位的限制,将量纲转化成纯数值。
  • 再多评价指标体系下,不同单位造成数据数值取值差异大,如果直接对原始数据进行分析,可能会过分突出取值大的数据,而对数值小的数据不够关注,为了保证结果的可靠性,必须对原始数据进行标准化处理。

1.2 归一化公式

  • 它是一种线性归一化,是对原始数据进行线性映射,使得数据被映射到[0 , 1]之间,转换函数如下: x ′ = x − m i n ( x ) m a x ( x ) − m i n ( x ) x' = \frac{x - min(x)}{max(x) - min(x)} x=max(x)min(x)xmin(x)

1.3 归一化代码

from sklearn.preprocessing import MinMaxScaler

# 准备数据
data = [[[-1,17],[-0.9,17.6],[-1.5,18],[-1,18.5]],[[0.36,0.67],[0.35,0.25],[0.58,0.68],[0.25,0.35]]] # 原始数据
data2 = [[0.36,0.67],[0.35,0.25],[0.58,0.68],[0.25,0.35]] # 已归一化的数据

print(data)

scaler = MinMaxScaler()
scaler.fit(data)

data1 = scaler.transform(data)
print(data1)
print(scaler.inverse_transform(data1)) # 去归一化

data3 = scaler.inverse_transform(data2)
print(data3)
print(scaler.transform(data3))

二. Z-Score

2.1 Z-Score 原理

  • Z分数法的公式如下: Z = x − μ σ Z = \frac{x - \mu }{\sigma } Z=σxμ
  • 通常认为,Z-Score分数大于3或小于-3的数据是一条异常数据,要对其进行处理,此处以直接删除为例。

2.2 代码

import pandas as pd

def abnormal_data_delete(df):
    # 通过Z-Score方法判断异常值
    df_zscore = df.copy() # 用于保存Z-Score分数
    
    cols = df.columns # 列表名
    
    for col in cols:
        df_col = df[col]
        z_score = (df_col - df_col.mean()) / df_col.std() # 计算每一列的Z-Score得分
        df_zscore[col] = z_score.abs()>2.2 # 判断Z-Score得分是否大于2.2,如果是则True,否则False
        
    df_zscore['sum'] = df_zscore.sum(axis = 1) # 对所得内容按行加和,所得不为零的就说明这组数据至少有一个不正常的数据,就要被去掉
        
    df = df[df_zscore['sum'] == False]
        
    return df
 
#  生成异常数据
df = pd.DataFrame({'col1': [1.5, 120, 3, 5, 2, 12, 13],
                  'col2': [12, 17, 31, 53, 22, 32, 43]})
print(df)
df = abnormal_data_delete(df)
print(df)

三. 经验异常分析

  • 经验异常:指根据长期生产劳动经验对异常数据进行筛选,以海洋温度为例,某地海洋温度长期保持在30度左右,突然出现80度,很明显这是有问题的,可以通过过滤即可实现筛选。
df[df['Tem']<40]  # 只选择温度小于40的数据

四. 突变异常分析

  • 大部分数据的变化应该是渐变的,如果突变很可能是异常,不妨按照下式计算 k = ∣ ( x − x ∗ ) x ∗ ∣ k = \left | \frac{ (x - x^{*})}{x^{*}} \right | k= x(xx) 其中 x ∗ x^{*} x为前五条数据的平均值,根据数据特点设定一个阈值,以此筛选突变的异常值。
;