在插补过程中,若只使用缺失特征维度中非缺失值来插补该特征维度下的缺失值的插补算法,则称之为单变量算法;若使用整个可用特征维度来估计缺失的值的插补算法则称之为多变量算法。
sklearn提供了单变量插补的工具类SimpleImputer ,其提供了计算缺失值的基本策略。缺失值可以用提供的常数值计算,也可以使用缺失值所在的行/列中的统计数据(平均值、中位数或者众数)来计算。这个类也支持不同的缺失值编码。
在版本0.20之前,请使用Imputer 类,版本0.22(包含0.22)之后的,则使用SimpleImputer
def __init__(self, missing_values=np.nan, strategy="mean",
fill_value=None, verbose=0, copy=True, add_indicator=False):
number
,string
,np.nan(default)
,None
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
imp.fit([[1, 2], [np.nan, 3], [7, 6]])
X = [[np.nan, 2], [6, np.nan], [7, 6]]
print(imp.transform(X))
[[4. 2. ]
[6. 3.66666667]
[7. 6. ]]
SimpleImputer 类在fit过程中将会保存状态。
当使用 'most_frequent'
或 'constant'
策略时,SimpleImputer
类还支持以 string values 或 pandas categoricals 表示的分类数据(categorical data)
df = pd.DataFrame([["a", "x"], [np.nan, "y"], ["a", np.nan], ["b", "y"]], dtype="category")
imp = SimpleImputer(strategy="most_frequent")
print(imp.fit_transform(df))
out:
[['a' 'x']
['a' 'y']
['a' 'y']
['b' 'y']]
IterativeImputer类的功能是,将每个缺失值的特征建模为其他特征的函数,并使用该估计值进行估算。
它以循环迭代方式实现:在每个步骤中,将特征目标列指定为输出y,将其他列视为输入X。使用一个回归器来在已知(未缺失)y的样本上对(X,y)进行拟合。然后使用这个回归器来预测缺失的y值。这是以迭代的方式对每个特征进行的,然后重复max_iter轮。最后一轮的计算结果被返回。
def __init__(self, estimator=None, missing_values=np.nan, sample_posterior=False, max_iter=10, tol=1e-3, n_nearest_features=None, initial_strategy="mean", imputation_order='ascending', min_value=None, max_value=None, verbose=0, random_state=None, add_indicator=False):
number
,string
,np.nan(default)
,None
Estimator
必须支持return_std
其predict
方法。True如果IterativeImputer用于多个插补,则设置为 。strategy
参数相同None
将最小值设置为负无穷大。None
将最大值设置为正无穷大。n_nearest_features
不是None
,imputation_order
则随机选择估计器特征, if random
和后验if的采样sample_posterior
为True。MissingIndicator
变换将堆叠到imputer的变换的输出上。这允许预测估计器尽管插补而解释缺失。如果某个要素在拟合/训练时没有缺失值,即使在变换/测试时缺少值,该要素也不会出现在缺失的指示符上。imp = IterativeImputer(max_iter=10, random_state=0)
imp.fit([[1, 2], [3, 6], [4, 8], [np.nan, 3], [7, np.nan]])
X_test = [[np.nan, 2], [6, np.nan], [np.nan, 6]]
np.round(imp.transform(X_test))
# [['a' 'x']
# ['a' 'y']
# ['a' 'y']
# ['b' 'y']]
MissingIndicator
转换器用于将数据集转换为相应的二进制矩阵,以指示数据集中缺失值的存在。这个变换与归算结合起来是有用的。当使用插补时,保存关于哪些值丢失的信息可以提供有用的信息。
X = [[-1, 2], [6, -1], [7, 6]]
indicator = MissingIndicator(missing_values=-1)
mask_missing_values_only = indicator.fit_transform(X)
# out
# array([[ True, True, False],
# [False, True, True],
# [False, True, False]])
def __init__(self, missing_values=np.nan, features="missing-only",
sparse="auto", error_on_new=True):
number
,string
,np.nan(default)
,None
features="missing-only"
。