为什么sklearn Imputer需要合适?
machine-learning
scikit-learn
5
0

我真的是整个机器学习领域的新手,并且正在参加有关该主题的在线课程。在本课程中,讲师展示了以下代码:

imputer = Inputer(missing_values = 'Nan', strategy = 'mean', axis=0)
imputer = Imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])

我真的不明白为什么这个不fit对象需要fit 。我的意思是,我只是想通过用列均值替换它们来消除列中的缺失值。据我对编程的了解很少,这是一个非常简单的迭代过程,不需要模型来训练数据即可完成。

有人可以解释一下这种令人讨厌的事情是如何工作的,为什么需要培训以用列均值替换一些缺失的值?我已经阅读了sci-kit的文档,但仅显示了如何使用这些方法,而不是为什么需要它们。

谢谢。

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

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. ]])

这个数据泄漏问题很重要,因为数据分布可能会从训练数据更改为测试数据,并且您不希望在拟合过程中已经存在测试数据的信息。

有关交叉验证的更多信息,请参见文档。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号