Sklearn/scikit使用fit方法学习

2024-09-26 22:09:03 发布

您现在位置:Python中文网/ 问答频道 /正文

fit()方法如何在sklearn.preprincessing中使用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])

Tags: 方法代码fromimportsklearnnan后台fit
3条回答

在预处理阶段,“拟合”的目的是计算必要的值(比如每个变量的最小值和最大值)。有了这个值,scikitlearn就可以对数据进行预处理了,但以前不能。它也很有用,因为以后可以重用预处理器对象

如果您想一次完成这两个步骤,也可以使用fit_transform

Imputer(missing_values = "NaN", strategy = "mean", axis = 0)

上一行创建了一个插补器对象,该对象将用值的平均值插补/替换表示为NaN的缺失值

impt = impt.fit(X[:,1:3])

所以它需要一些数据来计算mean,这些数据可以被缺失的值替换。这通常是通过方法fit来完成的,该方法将计算所需的值,在本例中为mean。fit接受一些数据来计算这些值,它通常被称为training阶段

impt.transform(X[:,1:3])

一旦计算出这些值,它们就可以用于呈现给它的新数据。在这种情况下,它将用计算的(在fit方法中)平均值替换丢失的数据。这是通过transform方法完成的

有时可能需要运行fittransform相同的数据。在这种情况下,我们可以使用fit_transform方法,而不是先调用fit,然后调用transform

X[:,1:3] = impt.fit_transform(X[:,1:3])

其思想是只对训练数据进行预处理(就像模型一样)。它将学习一些状态,对于输入者来说,这可能是你特征的平均值。然后,在对测试/验证数据进行转换时,使用状态(即本例中的平均值)来插补新的不可见数据。使用这种设计,可以很容易地避免数据泄漏。考虑一下你是否对整个数据集进行了插补。你用来插补的平均数现在使用了一些来自你假定的未显示测试数据的信息。这是一个数据泄漏,你的数据不再是真正看不见的。Scikit learn使用fit/transform模式来轻松缓解机器学习中的这一常见陷阱

此外,因为所有sklearn转换器和估计器都使用这个fitAPI,所以您可以将它们链接到一个管道中,这样就可以轻松地对k次交叉验证的每一次进行所有预处理,否则这将是一件非常棘手的事情,而且不会出错

相关问题 更多 >

    热门问题