为啥我们需要再次拟合模型才能获得分数?
Posted
技术标签:
【中文标题】为啥我们需要再次拟合模型才能获得分数?【英文标题】:Why do we need to fit the model again in order to get score?为什么我们需要再次拟合模型才能获得分数? 【发布时间】:2020-07-20 22:22:41 【问题描述】:我正在测试用于特征选择的嵌入式方法。
我了解(也许我误解了)使用嵌入式方法,我们可以在训练模型时获得最佳特征(基于特征的重要性)。
是这样,我想得到训练好的模型(被训练选择特征)的分数。
我正在用 Lasso 方法测试分类问题。
当我试图获得分数时,我遇到了需要再次拟合模型的错误。
-
为什么我需要这样做(如果模型适合特征选择,这似乎是浪费时间?)
为什么我们不能一次性完成(选择特征并获得模型分数)?
为什么如果我们使用嵌入式方法,为什么我们需要分两个阶段进行?为什么我们不能在一次拟合中选择最佳特征时训练模型?
from sklearn.linear_model import Lasso, LogisticRegression
from sklearn.feature_selection import SelectFromModel
estimator = LogisticRegression(C=1, penalty='l1', solver='liblinear')
selection = SelectFromModel(estimator)
selection.fit(x_train, y_train)
print(estimator.score(x_test, y_test))
错误:
sklearn.exceptions.NotFittedError: This LogisticRegression instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.
【问题讨论】:
【参考方案1】:拟合的估计器返回为selection.estimator_
(参见docs);因此,在拟合selection
之后,您可以简单地这样做:
selection.estimator_.score(x_test, y_test)
【讨论】:
但是如果我们使用嵌入式方法,为什么我们需要分两步进行呢?为什么我们不能在一次拟合中选择最佳特征时训练模型?以上是关于为啥我们需要再次拟合模型才能获得分数?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我们需要在 express.js 服务器上使用代理才能获得 webpack 热重载服务器功能与 react-routing 相结合
为啥我们需要在 express.js 服务器上使用代理才能获得与 react-routing 相结合的 webpack 热重载服务器功能