fit()方法如何在sklearn.preprocesing中使用Imputer类工作 究竟fit()在后台做了什么,下面的代码和 到处都看到适合什么,为什么和如何适合的地方
from sklearn.preprocessing import Imputer
impt = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)
impt = impt.fit(X[:,1:3])
X[:,1:3] = impt.transform(X[:,1:3])
答案 0 :(得分:1)
想法是仅对训练数据进行“拟合” 处理(就像对模型进行处理一样)。它将学习一些状态,对于不熟练的人,这可能是您功能的平均值。然后,当您转换测试/验证数据时,可以使用状态(在这种情况下为平均值)来估算新的看不见的数据。使用这种设计,可以非常轻松地避免数据泄漏。考虑是否对整个数据集进行了估算。现在,用于插补的平均值将使用您认为看不见的测试数据中的某些信息。这是数据泄漏,您的数据不再是真正看不见的。 Scikit-learn使用fit
/ transform
模式来轻松缓解机器学习中的常见陷阱。
此外,由于所有sklearn转换器和估计器都使用此fit
API,因此您可以将它们链接到管道中,从而可以在k折交叉验证的每一折中轻松进行所有预处理,否则如果没有错误,这将是一件非常棘手的事情。
答案 1 :(得分:1)
Imputer(missing_values = "NaN", strategy = "mean", axis = 0)
上面的行创建了一个Imputer对象,该对象将估算/替换缺失的值,这些值被表示为NaN's与值的平均值。
impt = impt.fit(X[:,1:3])
因此,它需要一些数据来计算mean
,这些数据可以用缺少的值代替。通常,这是通过方法fit
完成的,该方法将计算所需的值,在这种情况下,意味着fit
吸收一些数据来计算这些值,通常称为training
阶段。
impt.transform(X[:,1:3])
一旦计算出值,便可以将其用于提供给它的新数据。在这种情况下,它将用计算的(在fit
方法中)平均值代替丢失的数据。这是通过transform
方法完成的。
有时您可能希望运行fit
和transform
的相同数据。在这种情况下,我们可以使用fit_transform
方法来代替在进行转换之前先进行拟合。
X[:,1:3] = impt.fit_transform(X[:,1:3])
答案 2 :(得分:0)
那么,预处理阶段“拟合”的目的是计算必要的值(例如每个变量的最小值和最大值)。然后,利用scikit的这一价值,learn可以对您的数据进行预处理,但是之前无法进行。这也很有用,因为您可以稍后再使用预处理器对象。
如果您想一并完成这两个步骤,也可以使用fit_transform
。