Imputer用数据的某些统计信息(例如,均值,中位数,...)填充缺失值。为了交叉验证期间避免数据泄漏,它计算在火车上的数据的统计的过程中fit
,将其存储和使用它的测试数据,在transform
。
from sklearn.preprocessing import Imputer
obj = Imputer(strategy='mean')
obj.fit([[1, 2, 3], [2, 3, 4]])
print(obj.statistics_)
# array([ 1.5, 2.5, 3.5])
X = obj.transform([[4, np.nan, 6], [5, 6, np.nan]])
print(X)
# array([[ 4. , 2.5, 6. ],
# [ 5. , 6. , 3.5]])
如果您的训练和测试数据相同,则可以使用fit_transform
将两个步骤fit_transform
。
X = obj.fit_transform([[1, 2, np.nan], [2, 3, 4]])
print(X)
# array([[ 1. , 2. , 4. ],
# [ 2. , 3. , 4. ]])
这个数据泄漏问题很重要,因为数据分布可能会从训练数据更改为测试数据,并且您不希望在拟合过程中已经存在测试数据的信息。
有关交叉验证的更多信息,请参见文档。
0
我真的是整个机器学习领域的新手,并且正在参加有关该主题的在线课程。在本课程中,讲师展示了以下代码:
我真的不明白为什么这个不
fit
对象需要fit
。我的意思是,我只是想通过用列均值替换它们来消除列中的缺失值。据我对编程的了解很少,这是一个非常简单的迭代过程,不需要模型来训练数据即可完成。有人可以解释一下这种令人讨厌的事情是如何工作的,为什么需要培训以用列均值替换一些缺失的值?我已经阅读了sci-kit的文档,但仅显示了如何使用这些方法,而不是为什么需要它们。
谢谢。