对于缺失值的处理,要么删除,要么进行填充,填充包括使用均值,中位数,众数,指定的常数进行填充
sklearn子模块impute中主要集成了三种填充方法

  1. 单变量填充
  2. 多变量填充
  3. KNN填充

1,单变量填充

这种方式只利用某一个特征的值来进行填充,比如特征A中包含了缺失值,此时可以将该缺失值填充为一个固定的常数,也可以利用所有特征A的非缺失值,来统计出均值,中位数等,填充对应的缺失值,由于在填充时,只需要考虑该特征对应的值,所以称之为单变量填充,代码如下

  1. #单变量填充
  2. from sklearn.impute import SimpleImputer
  3. import numpy as np
  4. imp=SimpleImputer(missing_values=np.nan,strategy='mean')
  5. X=np.array([[np.nan,2],[6,np.nan],[7,6]])
  6. X
  1. imp=SimpleImputer(missing_values=np.nan,strategy='mean')
  2. imp.fit_transform(X)
  1. imp = SimpleImputer(missing_values=np.nan, strategy='mean')
  2. imp = SimpleImputer(missing_values=np.nan, strategy='median')
  3. imp = SimpleImputer(missing_values=np.nan, strategy='most_frequent')
  4. imp = SimpleImputer(missing_values=np.nan, strategy='constant', fill_value=3)

2,多变量填充

这种方式在填充时会考虑多个特征之间的关系,比如针对特征A中的缺失值,会同时考虑特征A和其他特征的关系,将其他特征作为自变量,特征A作为因变量,然后建模,来预测特征A中缺失值对应的预测值,通过控制迭代次数,将最后一次迭代的预测值作为填充值。

  1. from sklearn.experimental import enable_iterative_imputer
  2. from sklearn.impute import IterativeImputer
  3. imp=IterativeImputer(max_iter=0,random_state=0)
  4. X=np.array([[np.nan,2],[6,np.nan],[np.nan,6]])
  5. imp.fit_transform(X)
  1. from sklearn.tree import DecisionTreeRegressor
  2. imp=IterativeImputer(DecisionTreeRegressor(),max_iter=10,random_state=0)
  3. imp.fit_transform(X)

K近邻填充

首先根据欧几里得距离计算与缺失值样本距离最近的K个样本,计算的时候只考虑非缺失值对应的维度,然后用这K个样本对应维度的均值来填充缺失值,代码如下

  1. from sklearn.impute import KNNImputer
  2. X=np.array([[1,2,np.nan],[3,4,3],[np.nan,6,5],[8,8,7]])
  3. X
  4. imputer=KNNImputer(n_neighbors=2,weights='uniform')
  5. imputer.fit_transform(X)