Vin*_*lva 22 machine-learning scikit-learn
我是整个机器学习的新手,我正在上这个主题的在线课程.在本课程中,教师展示了以下代码:
imputer = Inputer(missing_values = 'Nan', strategy = 'mean', axis=0)
imputer = Imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么这个imputer对象需要fit.我的意思是,我只是试图通过用列平均值替换它来消除我的列中的缺失值.从我对编程的了解很少,这是一个非常简单的迭代过程,并且不需要一个必须训练数据才能完成的模型.
有人可以解释一下这个不可思议的东西是如何工作的,以及为什么需要培训来用列平均值替换一些缺失值?我已经阅读过sci-kit的文档,但它只是展示了如何使用这些方法,而不是为什么需要它们.
谢谢.
Tom*_*DLT 29
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]])
Run Code Online (Sandbox Code Playgroud)
如果您的火车和测试数据相同,您可以使用两个步骤fit_transform.
X = obj.fit_transform([[1, 2, np.nan], [2, 3, 4]])
print(X)
# array([[ 1. , 2. , 4. ],
# [ 2. , 3. , 4. ]])
Run Code Online (Sandbox Code Playgroud)
这种数据泄漏问题很重要,因为数据分布可能会从训练数据变为测试数据,并且您不希望在拟合期间已经存在测试数据的信息.
有关交叉验证的更多信息,请参阅doc .
| 归档时间: |
|
| 查看次数: |
8107 次 |
| 最近记录: |