四.特征工程之特征预处理(无量纲化:归一化、标准化)
1 数据预处理
数据预处理是通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程
例如:

内容:
数值型数据的无量纲化:
归一化
标准化(一般用这个)
特征预处理API
sklearn. preprocessing
了解数值型数据、类别型数据特点
应用MinMaxScaler实现对特征数据进行归一化。
应用StandardScaler实现对特征数据进行标准化
为什么要进行无量纲化(标准化)
特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征
例子:

例如对于里面的两个我们计算他的差距的话如果用这个公式:

我们会发现它主要取决于里程数,所以我们需要无量纲化
我们需要用到一些方法进行无量纲化,使不同规格的数据转换到同一规格
2 归一化
2.1 定义
通过对原始数据进行变换把数据映射到(默认为[0,1])之间
2.2 公式
x'=(x-min)/(max-min)
x''=x'*(mx-mi) + mi
作用于每一列, max为一列的最大值, min为一列的最小值,那么X”为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0

作用于每一列,max为一列的最大值,min为一列的最小值,那么X’’为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0

2.3API
sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)...)
MinMaxScalar.fit_transform(X)
x:numpy array个数的数据[n_samples,n_features]
返回值:转换后的形状相同的array

注意最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。
2.4 步骤案例
我们对以下数据进行运算,在dating.txt中。保存的就是之前的约会对象数据
milage,Liters,Consumtime,target
40920,8.326976,0.953952,3
14488,7.153469,1.673904,2
26052,1.441871,0.805124,1
75136,13.147394,0.428964,1
38344,1.669788,0.134296,1
1.获取数据
2.实例化一个转化器类
3.调用fit_transform
代码
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
def minmax_demo():
""""
归一化
:如return:
"""
#1.获取数据
data=pd.read_csv("dating.txt")
data=data.iloc[:,:3]#取数据的全部行,前三列
print(data)
#2.实例化一个转换器类
transfer=MinMaxScaler()
#3.调用fit_transform
data_new=transfer.fit_transform(data)
print("data_new:\n",data_new)
return None;

问题:

问题:如果数据中异常点较多,会有什么影响?
归一化总结
归一化主要是依靠最大值和最小值的,如果最大值和最小值是异常值,总体会受到影响,所以这种方法的鲁棒性较差,只适合传统精确小数据的场景
所以下面的标准化
3 标准化(主要是这个)
3.1 定义
通过对原始数据进行变换抵数据变换到均值为0,标准差为1范围内
3.2 公式
x'=(x-mean)/std 其中mean是平均值,std是标准值

作用于每一列,mean为平均值,σ为标准差
所以回到刚才异常点的地方,我们再来看看标准化

- 对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
- 对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小
3.3 API
sklearn.preprocessing.StandardScaler()
处理之后,对每列来说,所有数据都聚集在均值为0附近,标准差为1。
StandardScaler.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]。
返回值:转换后的形状相同的array
3.4 步骤案例
1.获取数据
2.实例化一个转化器类
3.调用fit_transform
代码
这个代码和上一个差不多,只是换了一转化器
transfer = StandardScaler()
调用fit_transform
data_new = transfer.fit_transform(data)
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)
# 2.实例化一个转换器类
transfer = StandardScaler()
# 3.调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)
return None

3.5 总结:
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
如果需要对数据进行标准化处理,我们一般用到标准化

浙公网安备 33010602011771号