对于缺失值的处理,要么删除,要么进行填充,填充包括使用均值,中位数,众数,指定的常数进行填充
sklearn子模块impute中主要集成了三种填充方法
- 单变量填充
- 多变量填充
- KNN填充
1,单变量填充
这种方式只利用某一个特征的值来进行填充,比如特征A中包含了缺失值,此时可以将该缺失值填充为一个固定的常数,也可以利用所有特征A的非缺失值,来统计出均值,中位数等,填充对应的缺失值,由于在填充时,只需要考虑该特征对应的值,所以称之为单变量填充,代码如下
#单变量填充from sklearn.impute import SimpleImputerimport numpy as npimp=SimpleImputer(missing_values=np.nan,strategy='mean')X=np.array([[np.nan,2],[6,np.nan],[7,6]])X
imp=SimpleImputer(missing_values=np.nan,strategy='mean')imp.fit_transform(X)
imp = SimpleImputer(missing_values=np.nan, strategy='mean')imp = SimpleImputer(missing_values=np.nan, strategy='median')imp = SimpleImputer(missing_values=np.nan, strategy='most_frequent')imp = SimpleImputer(missing_values=np.nan, strategy='constant', fill_value=3)
2,多变量填充
这种方式在填充时会考虑多个特征之间的关系,比如针对特征A中的缺失值,会同时考虑特征A和其他特征的关系,将其他特征作为自变量,特征A作为因变量,然后建模,来预测特征A中缺失值对应的预测值,通过控制迭代次数,将最后一次迭代的预测值作为填充值。
from sklearn.experimental import enable_iterative_imputerfrom sklearn.impute import IterativeImputerimp=IterativeImputer(max_iter=0,random_state=0)X=np.array([[np.nan,2],[6,np.nan],[np.nan,6]])imp.fit_transform(X)
from sklearn.tree import DecisionTreeRegressorimp=IterativeImputer(DecisionTreeRegressor(),max_iter=10,random_state=0)imp.fit_transform(X)
K近邻填充
首先根据欧几里得距离计算与缺失值样本距离最近的K个样本,计算的时候只考虑非缺失值对应的维度,然后用这K个样本对应维度的均值来填充缺失值,代码如下
from sklearn.impute import KNNImputerX=np.array([[1,2,np.nan],[3,4,3],[np.nan,6,5],[8,8,7]])Ximputer=KNNImputer(n_neighbors=2,weights='uniform')imputer.fit_transform(X)
