Scikit-Learn的.fit()方法如何将数据传递给.predict()?

我正在尝试理解sklearn的.fit()方法与.predict()方法之间的关系;主要是数据通常是如何从一个方法传递到另一个方法的。我在Stack Overflow上没有找到直接回答这个问题的帖子,但有一些帖子涉及到了相关内容(例如这里)。

我使用BaseEstimator和RegressorMixin类编写了一个自定义的估计器,但在开始运行我的数据时,多次遇到了’NotFittedError’错误。能否有人通过一个简单的线性回归示例,向我解释一下数据是如何通过fit和predict方法传递的?不需要涉及数学部分——我理解回归的工作原理以及各个部分的作用。也许我忽略了显而易见的东西,把事情复杂化了?但这些估计器方法感觉有点像黑匣子。


回答:

当你在训练或使用.fit()方法之前尝试使用分类器的.predict()方法时,就会发生NotFittedError错误。

以scikit learn的LinearRegression为例来说明。

>>> import numpy as np>>> from sklearn.linear_model import LinearRegression>>> X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])>>> # y = 1 * x_0 + 2 * x_1 + 3>>> y = np.dot(X, np.array([1, 2])) + 3>>> reg = LinearRegression().fit(X, y)>>> reg.score(X, y)1.0>>> reg.coef_array([1., 2.])>>> reg.intercept_ 3.0000...>>> reg.predict(np.array([[3, 5]]))array([16.])

所以,通过reg = LinearRegression().fit(X, y)这行代码,你实例化了LinearRegression类,然后将其拟合到你的数据X和y上,其中X是自变量,y是因变量。一旦模型在该类中训练完成,线性回归的beta系数就会保存在类属性coef_中,你可以通过reg.coef_访问它。这就是类在你使用.predict()类方法时知道如何进行预测的方式。类会访问这些系数,然后通过简单的代数运算生成预测结果。

回到你的错误。如果你没有将模型拟合到训练数据上,那么该类就没有进行预测所需的必要属性。希望这能澄清一些关于类内部发生的事情,至少在fit()predict()方法如何交互方面。

最终,就像上面评论的那样,这回归到面向对象编程的基础知识上,所以如果你想进一步学习,我建议阅读Python如何处理类,因为scikit learn模型遵循相同的行为模式。

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注