我是整个机器学习的新手,我正在上这个主题的在线课程。在本课程中,教师展示了以下代码:
imputer = Inputer(missing_values = 'Nan', strategy = 'mean', axis=0)
imputer = Imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])
我真的不明白为什么这个imputer对象需要fit
。我的意思是,我只是试图通过用列平均值替换它来消除我的列中的缺失值。从我对编程的了解很少,这是一个非常简单的迭代过程,并且不需要一个必须训练数据才能完成的模型。
有人可以解释一下这个不可思议的东西是如何工作的,以及为什么需要培训来用列平均值替换一些缺失值? 我已经阅读过sci-kit的文档,但它只是展示了如何使用这些方法,而不是为什么需要它们。
谢谢。
答案 0 :(得分:23)
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
完成两个步骤。
X = obj.fit_transform([[1, 2, np.nan], [2, 3, 4]])
print(X)
# array([[ 1. , 2. , 4. ],
# [ 2. , 3. , 4. ]])
此数据泄漏问题很重要,因为数据分布可能会从训练数据变为测试数据,并且您不希望在拟合期间已经存在测试数据的信息。
有关cross-validation的更多信息,请参阅文档。
答案 1 :(得分:0)
from sklearn.preprocessing impot Imputer
imputer=Imputer(missing_values='nan',strategy="mean",axis=0)
X[:,1:3]=imputer.fit_transform(X[:,1:3]) #Train the imputer using fit and test data using transform. This is how it works.*