首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用管道将MinMaxScaler()应用于RFECV()

使用管道将MinMaxScaler()应用于RFECV()
EN

Stack Overflow用户
提问于 2021-04-27 18:19:12
回答 1查看 56关注 0票数 1

我正在尝试进行特征选择,并使用RFECVLogisticRegression。为此,我需要缩放数据,因为否则回归将不会收敛。然而,我认为如果我首先缩放完整的数据,它将是有偏见的(基本上数据正在泄漏到测试集)。

这是我到目前为止的代码:

代码语言:javascript
运行
复制
from sklearn.feature_selection import RFECV
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import StratifiedKFold
from sklearn.preprocessing import MinMaxScaler
from sklearn.pipeline import Pipeline
cv = StratifiedKFold(5)
scaler = MinMaxScaler()
reg = LogisticRegression(max_iter=1000, solver="newton-cg")
pipeline = Pipeline(steps=[("scale",scaler),("lr",reg)])
visualizer = RFECV(pipeline, cv=cv, scoring='f1_weighted')

但是它给了我这个错误:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "<ipython-input-267-0073ead26d52>", line 1, in <module>
    visualizer.fit(x_6, y_6)        # Fit the data to the visualizer
  File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\feature_selection\_rfe.py", line 550, in fit
    scores = parallel(
  File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\feature_selection\_rfe.py", line 551, in <genexpr>
    func(rfe, self.estimator, X, y, train, test, scorer)
  File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\feature_selection\_rfe.py", line 33, in _rfe_single_fit
    return rfe._fit(
  File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\feature_selection\_rfe.py", line 204, in _fit
    raise RuntimeError('The classifier does not expose '
RuntimeError: The classifier does not expose "coef_" or "feature_importances_" attributes

我甚至还没有把它与数据相匹配。

我试着搜索,但找不到任何有用的东西。有什么想法可能会失败吗?

EN

回答 1

Stack Overflow用户

发布于 2021-05-21 00:15:34

对于Pipeline对象来说,这是一个非常常见的问题。默认情况下,它们不会暴露拟合估计器的固有特征重要性度量和其他属性。所以你必须定义一个自定义的管道对象。

此答案here已经提供了一个公开功能重要性度量的解决方案:

代码语言:javascript
运行
复制
class MyPipeline(Pipeline):
    @property
    def coef_(self):
        return self._final_estimator.coef_
    @property
    def feature_importances_(self):
        return self._final_estimator.feature_importances_

使用此方法,您可以创建管道对象,如下所示:

代码语言:javascript
运行
复制
pipeline = MyPipeline(steps=[("scale",scaler),("lr",reg)])

现在,RFECV对象可以毫无问题地访问拟合的LogisticRegression模型的系数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67281155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档