gpt4 book ai didi

python - 使用 RFECV 和排列重要性的正确方法 - Sklearn

转载 作者:行者123 更新时间:2023-12-05 03:51:55 29 4
gpt4 key购买 nike

Sklearn 中有一个实现这个的提议 #15075 , 但与此同时,建议将 eli5 作为解决方案。但是,我不确定我是否以正确的方式使用它。这是我的代码:

from sklearn.datasets import make_friedman1
from sklearn.feature_selection import RFECV
from sklearn.svm import SVR
import eli5
X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)
estimator = SVR(kernel="linear")
perm = eli5.sklearn.PermutationImportance(estimator, scoring='r2', n_iter=10, random_state=42, cv=3)
selector = RFECV(perm, step=1, min_features_to_select=1, scoring='r2', cv=3)
selector = selector.fit(X, y)
selector.ranking_
#eli5.show_weights(perm) # fails: AttributeError: 'PermutationImportance' object has no attribute 'feature_importances_'

有几个问题:

  1. 我不确定我是否以正确的方式使用交叉验证。 PermutationImportance 正在使用 cv 来验证验证集的重要性,或者交叉验证应该只与 RFECV 一起使用? (在示例中,我在两种情况下都使用了 cv=3,但不确定这样做是否正确)

  2. 如果我取消注释最后一行,我会得到一个 AttributeError: 'PermutationImportance' ... 这是因为我适合使用 RFECV 吗?我所做的与这里的最后一个片段类似:https://eli5.readthedocs.io/en/latest/blackbox/permutation_importance.html

  3. 作为一个不太重要的问题,当我在 eli5.sklearn.PermutationImportance 中设置 cv 时,这给了我一个警告:

.../lib/python3.8/site-packages/sklearn/utils/validation.py:68:FutureWarning:将 classifier=False 作为关键字参数传递。从 0.25 版开始,将这些作为位置参数传递将导致错误 warnings.warn("Pass {} as keyword args. From version 0.25 "

整个过程有点模糊。 有没有办法直接在 Sklearn 中完成?通过添加 feature_importances 属性?

最佳答案

由于目标是选择具有排列重要性和递归特征消除的最佳特征数量,我建议将 RFECVPermutationImportance 与 CV 拆分器结合使用,例如 K 折叠。代码可能如下所示:

import warnings
from eli5 import show_weights
from eli5.sklearn import PermutationImportance
from sklearn.datasets import make_friedman1
from sklearn.feature_selection import RFECV
from sklearn.model_selection import KFold
from sklearn.svm import SVR


warnings.filterwarnings("ignore", category=FutureWarning)

X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)

splitter = KFold(n_splits=3) # 3 folds as in the example

estimator = SVR(kernel="linear")
selector = RFECV(
PermutationImportance(estimator, scoring='r2', n_iter=10, random_state=42, cv=splitter),
cv=splitter,
scoring='r2',
step=1
)
selector = selector.fit(X, y)
selector.ranking_

show_weights(selector.estimator_)

关于您的问题:

  1. PermutationImportance 将根据 KFold 提供的拆分,使用相同的策略计算特征重要性和 RFECV r2 得分。

  2. 您在未拟合的 PermutationImportance 对象上调用了 show_weights。这就是你出错的原因。您应该改为使用 estimator_ 属性访问拟合对象。

  3. 可以忽略。

关于python - 使用 RFECV 和排列重要性的正确方法 - Sklearn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62537457/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com