【人工智能概论】 数据预处理——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)x−min(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的数据