导入数据之后要做的是预处理,sklearn.preprocessing,主要分为几个方面。
1.缺失值的处理
缺失值我觉得用pandas来处理更方便,pandas.fillna,method有前后填充,用统计值特定值填充都比较方便,处理好了再转numpy。
sklearn也有相应api-Imputer 处理。
网友提供的用法
import numpy as np
from sklearn.preprocessing import Imputer
imp=Imputer(missing_values='NaN',strategy='mean',axis=0)
x=np.array([[1,2],
[np.nan,3],
[7,6]])
imp.fit(x)
print(x)
print(imp.transform(x))
2.归一化和标准化
我前面一直觉得归一化MinMaxScaler()和标准化preprocessing.StandardScaler()干的是同一件事情,因为他们都能解决量纲不一样的问题,后来才专门看了二者区别,发现不太一样。
知乎的这个回答我觉得说的非常到位了。知乎 归一化与特征化
标准化会保留整个信息特征,均值为0,标准差为1。在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景
归一化会使数据在[0,1]范围内,鲁棒性较差,只适合传统精确小数据场景。缺点是,最大值与最小值非常容易受异常点影响,它会丢失一些信息,特别对于那些异常的点。
还有一个normalize,正则化用于文本分类和聚类处理。
from sklearn import preprocessing
scaler = preprocessing.StandardScaler().fit_transform(data_x)
max_min = preprocessing.MinMaxScaler().fit_transform(data_x)
print(scaler)
print(max_min)
我认为什么都可以试试,按照前文所说,一般先用标准化,然后训练数据,看看效果,不行,再试试别的,或者先归一再标准都是可以的,一切以最后效果为准。
3.二值化,分类特征编码
分类特征编码针对文字转数字分类比如把衣服尺码变成0,1,2,这种,二值化针对数值转数字分类,比如60分及格,设置阈值分类