为啥我们需要再次拟合模型才能获得分数?

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 热重载服务器功能

CNN为啥能使用在NLP?

[模型优化]模型欠拟合及过拟合判断优化方法

拟合模型时更改默认 RandomForestClassifier 的“分数”功能?