引言:当数据集中包含缺失值,要么是空白,或者NaN等,这些数据无法直接使用scikit-learn分类器直接训练,所以需要处理。
方法一:用pandas自带的方法
如: df.fillna(value=5)或者df.fillna(value=5,inplace='True')
或者df.fillna('s')等 使用fillna处理
方法二:sklearn中的imputer类提供了一些方法用于处理缺失值,如使用缺失值所在列中频繁出现的值、均值、中位值等进行替换。
import numpy as np
from sklearn.preprocessing import Imputer
imp=Imputer(missing_values='NaN',strategy='mean',axis=0)
X1=[[1,2],[np.nan,3],[7,6]]
#用X1的均值来求X2中的NaN
imp.fit(X1)
X2=[[np.nan, 2], [6, np.nan], [7, 6]]
print(imp.transform(X2))
#用X2的均值来求X2中的NaN
imp.fit(X2)
print(imp.transform(X2))
进一步说明:用imputer类处理稀疏矩阵
百度百科:在矩阵中,若数值为0的元素数目远远多于非0元素的数目时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。
X=[[1,2],[0,3],[7,6]]
imp=Imputer(missing_values=0,strategy='mean',axis=0)
#用X处理X_test中的0
imp.fit(X)
X_test=[[0,2],[6,0],[7,6]]
print(imp.transform(X_test))