gpt4 book ai didi

python - 如何计算sklearn中每个交叉验证模型的特征重要性

转载 作者:行者123 更新时间:2023-11-28 16:59:28 24 4
gpt4 key购买 nike

我正在使用 RandomForestClassifier()10 折交叉验证,如下所示。

clf=RandomForestClassifier(random_state = 42, class_weight="balanced")
k_fold = StratifiedKFold(n_splits=10, shuffle=True, random_state=42)
accuracy = cross_val_score(clf, X, y, cv=k_fold, scoring = 'accuracy')
print(accuracy.mean())

我想确定我的特征空间中的重要特征。如下所示获得单个分类的特征重要性似乎很简单。

print("Features sorted by their score:")
feature_importances = pd.DataFrame(clf.feature_importances_,
index = X_train.columns,
columns=['importance']).sort_values('importance', ascending=False)
print(feature_importances)

但是,我找不到如何在 sklearn 中为 交叉验证 执行特征重要性

总而言之,我想在 10 折交叉验证中确定最有效的特征(例如,通过使用平均重要性得分)。

如果需要,我很乐意提供更多详细信息。

最佳答案

cross_val_score() 不会返回每个训练-测试折叠组合的估计量。

您需要使用 cross_validate() 并设置 return_estimator =True

这是一个工作示例:

from sklearn import datasets
from sklearn.model_selection import cross_validate
from sklearn.svm import LinearSVC
from sklearn.ensemble import RandomForestClassifier
import pandas as pd

diabetes = datasets.load_diabetes()
X, y = diabetes.data, diabetes.target

clf=RandomForestClassifier(n_estimators =10, random_state = 42, class_weight="balanced")
output = cross_validate(clf, X, y, cv=2, scoring = 'accuracy', return_estimator =True)
for idx,estimator in enumerate(output['estimator']):
print("Features sorted by their score for estimator {}:".format(idx))
feature_importances = pd.DataFrame(estimator.feature_importances_,
index = diabetes.feature_names,
columns=['importance']).sort_values('importance', ascending=False)
print(feature_importances)

输出:

Features sorted by their score for estimator 0:
importance
s6 0.137735
age 0.130152
s5 0.114561
s2 0.113683
s3 0.112952
bmi 0.111057
bp 0.108682
s1 0.090763
s4 0.056805
sex 0.023609
Features sorted by their score for estimator 1:
importance
age 0.129671
bmi 0.125706
s2 0.125304
s1 0.113903
bp 0.111979
s6 0.110505
s5 0.106099
s3 0.098392
s4 0.054542
sex 0.023900

关于python - 如何计算sklearn中每个交叉验证模型的特征重要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55466081/

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