六、数据特征预处理
1 归一化
sklearn.preprocessing import MinMaxScaler
(一)归一化处理:统计人觉得几个特征同等重要时,要用归一化
(二)目的:使得一个特征不会对最终结果不会造成更大影响
(三)缺点:受异常点影响大,鲁棒性较差,只适合传统精确小数据场景
(四)公式:x'=(x-min)/(max-min) x''=x'(mx-mi)+mi
其中min为每列最小,max为每列最大,默认mx=1,mi=0,可以通过feature_range=(mi,mx)修改
from sklearn.preprocessing import MinMaxScaler
def mm():
mm = MinMaxScaler(feature_range=(0,1))
data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
print(data)
if __name__=='__main__':
mm()
输出:
[[1. 0. 0. 0. ]
[0. 1. 1. 0.83333333]
[0.5 0.5 0.6 1. ]]
2 标准化(常用)
(一)标准化公式:x'=(x-mean)/方差,作用于每一列
把每个数据转换为均值为0,方差为1的范围内
(二)优点:不容易受异常值的影响,数据多时比较稳定
from sklearn.preprocessing import StandardScaler
def std():
std = StandardScaler()
data = std.fit_transform([[1,-1,3],[2,4,2],[4,6,-1]])
print(data)
if __name__=='__main__':
std()
输出:
[[-1.06904497 -1.35873244 0.98058068]
[-0.26726124 0.33968311 0.39223227]
[ 1.33630621 1.01904933 -1.37281295]]
3 缺失值
缺失值可以用pandas处理也可以用sklearn.preprocessing.imputer处理
首先来看sklearn
from sklearn.preprocessing import Imputer
def im():
im = Imputer(missing_values='NaN',strategy='mean',axis=0)
data = im.fit_transform([[1,2],[np.nan,3],[7,8]])
print(data)
if __name__=='__main__':
im()
输出:
[[1. 2.]
[4. 3.]
[7. 8.]]
pandas 处理缺失值
import pandas
from pandas import DataFrame
data = DataFrame([[1,2,5,3,4],[1,4,'?',6,8],[1,3,1,9,6]])
print(data)
data = data.replace('?',np.nan)
print(data.fillna(data.mean()))
输出:
data:
0 1 2 3 4
0 1 2 5 3 4
1 1 4 ? 6 8
2 1 3 1 9 6
处理后的data
0 1 2 3 4
0 1 2 5.0 3 4
1 1 4 3.0 6 8
2 1 3 1.0 9 6