sklearn|【数据预处理】sklearn实现数据预处理(归一化、标准化)

1. 为什么需要归一化/标准化?
原因: 特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其他的特征,即无量纲化。
2. 归一化
2.1 定义 通过对原始数据进行变换把数据映射到(默认为[0,1])之间
2.2 公式 sklearn|【数据预处理】sklearn实现数据预处理(归一化、标准化)
文章图片

作用于每一列,max为一列的最大值,min为一列的最小值,那么X’’为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0
2.3 sklearn中的Minmax归一化API
  • sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )
    • MinMaxScalar.fit_transform(X)
      • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后的形状相同的array
2.4 代码示例 2.4.1 数据集 sklearn|【数据预处理】sklearn实现数据预处理(归一化、标准化)
文章图片

2.4.2 代码
import pandas as pd from sklearn.preprocessing import MinMaxScalerdef minmax_demo(): ''' 归一化 :return: None ''' # 获取数据 data = https://www.it610.com/article/pd.read_csv('./database/dating.txt', sep='\t') print(data) # 1. 实例化转换器(feature_range是归一化的范围,即最小值-最大值) transfer = MinMaxScaler(feature_range=(0, 1)) # 2. 调用fit_transform (只需要处理特征) data = https://www.it610.com/article/transfer.fit_transform(data[['milage','Liters','Consumtime']]) print('Min-Max归一化处理后的结果:\n', data) return Noneif __name__ == '__main__': minmax_demo()

结果:
sklearn|【数据预处理】sklearn实现数据预处理(归一化、标准化)
文章图片

2.4.3 总结
【sklearn|【数据预处理】sklearn实现数据预处理(归一化、标准化)】最大值和最小值是变化的,而且最大值和最小值容易受异常点的影响,所以归一化方法鲁棒性较差,只适合传统精确小数据场景。那么,这时候更倾向于使用标准化。
3. 标准化
3.1 定义 通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内
3.2 公式 sklearn|【数据预处理】sklearn实现数据预处理(归一化、标准化)
文章图片

作用于每一列,mean为平均值,σ为标准差
3.3 sklearn中实现标准化的API
  • sklearn.preprocessing.StandardScaler( )
    • 处理之后每列来说所有数据都聚集在均值0附近 标准差差为1
    • StandardScaler.fit_transform(X)
      • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后的形状相同的array
3.4 代码示例 数据集同上
import pandas as pd from sklearn.preprocessing import StandardScalerdef stander_demo(): ''' 标准化 :return: ''' # 获取数据 data = https://www.it610.com/article/pd.read_csv('./database/dating.txt', sep='\t') # 1. 实例化一个转换器 transfer = StandardScaler() # 2. 调用fit_transform transfer.fit_transform(data[['milage','Liters','Consumtime']]) print('标准化处理后的结果:\n', data) print('每一列的平均值为:\n', transfer.mean_) print('每一列的标准差为:\n', transfer.var_)return None if __name__ == '__main__': stander_demo()

结果:
sklearn|【数据预处理】sklearn实现数据预处理(归一化、标准化)
文章图片

3.5 标准化总结 在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
4. 归一化、标准化对于异常值的表现
sklearn|【数据预处理】sklearn实现数据预处理(归一化、标准化)
文章图片

    推荐阅读