机器学习之特征工程(1.1)
为什么我们要进行归一化/标准化?
- 特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征
- 我们需要用到一些方法进行无量纲化,使不同规格的数据转换到同一规格
归一化:
from sklearn.preprocessing import MinMaxScaler import pandas as pd def minmax_demo(): """ 归一化 :return: """ # 1、获取数据 data = pd.read_csv(r"D:/machine learning/dating") data = data.iloc[:, :3] print("data:\n", data) # 2、实例化一个转换器类 transfer = MinMaxScaler(feature_range=[0, 1]) # 3、调用fit_transform data_new = transfer.fit_transform(data) print("data_new:\n", data_new) return None
注意最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。解决方案如下:
标准化
通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内;
- 对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
- 对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。
from sklearn.preprocessing import StandardScaler import pandas as pd def stand_demo(): """ 标准化 :return: """ # 1、获取数据 data = pd.read_csv("dating.txt") data = data.iloc[:, :3] print("data:\n", data) # 2、实例化一个转换器类 transfer = StandardScaler() # 3、调用fit_transform data_new = transfer.fit_transform(data) print("data_new:\n", data_new) return None
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。