05机器学习——特征工程之归一化和标准化
1.特征工程之特征预处理——归一化
特征的预处理:对数据进行处理
数据的特征预处理
(1).特征处理的方法
·特征处理是什么
(2).sklearn特征预处理API
归一化
根据公式计算一下
如:第一列数据,用90来计算,x=90
x’=(x-min)/(max-min)=(90-60)/(90-60)=1
x’’=x’*(mx-mi)+mi=1×(1-0)+0=1
feature_range用来指定缩放的范围
这里传进去的数据应该是个二维数组
from sklearn.preprocessing import MinMaxScaler
def mm():
"""
归一化处理
:return: None
"""
mm=MinMaxScaler()#默认缩放区间范围
data=mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
print(data)
return None
if __name__=="__main__":
mm()
结果:
可以指定一个缩放范围
from sklearn.preprocessing import MinMaxScaler
def mm():
"""
归一化处理
:return: None
"""
mm=MinMaxScaler(feature_range=(2,3))
data=mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
print(data)
return None
if __name__=="__main__":
mm()
结果:都是在2到3之间
三个特征同等重要的时候:进行归一化
目的:使得某一个特征对最终结果不会造成更大影响
问题:如果数据中异常点较多,会有什么影响?
异常点较多意味着某些数据是不对的,数据不对对结果有什么影响?根据公式来看:
最大值,最小值会受到影响,从而x’和x’’的值会发生变化
如图所示:(粉色的为异常点)
异常点对最大值最小值影响太大
所以归一化的缺点就是对异常点的处理不是很好
鲁棒性就是反应了产品的一个稳定性怎么样
2.标准化
如图所示:红色的点为平均值
加了异常点之后对平均值的影响并不大
所以标准化中加入异常点影响不大
特殊情况:方差为0,说明这个特征所有值都一样
from sklearn.preprocessing import StandardScaler
def stand():
"""
标准化缩放
:return:None
"""
std=StandardScaler()
data=std.fit_transform([[1.,-1.,3.],[2.,4.,2.],[4.,6.,-1.]])
print(data)
return None
if __name__=="__main__":
stand()
结果:
缺失值的处理
axis表示你指定的是行还是列
pandas中可以使用dropna、fillna可以删除、填补缺失值,但前提是数据中的缺失值是np.nan
可以使用pandas中的replace将缺失值替换为np.nan
from sklearn.preprocessing import Imputer
import numpy as np
def im():
"""
缺失值处理
:return: None
"""
#NaN,nan
im=Imputer(missing_values='NaN',strategy='mean',axis=0)
data=im.fit_transform([[1,2],[np.nan,3],[7,6]])
print(data)
return None
if __name__=="__main__":
im()
结果:
strategy='mean’表示缺失值用平均数填补
axis=0是对列进行操作,1是行