gpt4 book ai didi

python - XGBClassifier 的特征重要性

转载 作者:太空狗 更新时间:2023-10-29 17:38:44 31 4
gpt4 key购买 nike

希望我读错了,但是在 XGBoost 库中 documentation , 注意到使用 feature_importances_ 提取特征重要性属性很像 sklearn 的随机森林。

但是,出于某种原因,我不断收到此错误:AttributeError: 'XGBClassifier' object has no attribute 'feature_importances_'

我的代码片段如下:

from sklearn import datasets
import xgboost as xg
iris = datasets.load_iris()
X = iris.data
Y = iris.target
Y = iris.target[ Y < 2] # arbitrarily removing class 2 so it can be 0 and 1
X = X[range(1,len(Y)+1)] # cutting the dataframe to match the rows in Y
xgb = xg.XGBClassifier()
fit = xgb.fit(X, Y)
fit.feature_importances_

您似乎可以通过调用 get_fscore 属性使用 Booster 对象计算特征重要性。我在 Booster 上使用 XGBClassifier 的唯一原因是它能够被包装在 sklearn 管道中。关于特征提取的任何想法?还有其他人遇到这种情况吗?

最佳答案

如评论所示,我怀疑您的问题是版本问题。但是,如果您不想/不能更新,那么以下功能应该适合您。

def get_xgb_imp(xgb, feat_names):
from numpy import array
imp_vals = xgb.booster().get_fscore()
imp_dict = {feat_names[i]:float(imp_vals.get('f'+str(i),0.)) for i in range(len(feat_names))}
total = array(imp_dict.values()).sum()
return {k:v/total for k,v in imp_dict.items()}


>>> import numpy as np
>>> from xgboost import XGBClassifier
>>>
>>> feat_names = ['var1','var2','var3','var4','var5']
>>> np.random.seed(1)
>>> X = np.random.rand(100,5)
>>> y = np.random.rand(100).round()
>>> xgb = XGBClassifier(n_estimators=10)
>>> xgb = xgb.fit(X,y)
>>>
>>> get_xgb_imp(xgb,feat_names)
{'var5': 0.0, 'var4': 0.20408163265306123, 'var1': 0.34693877551020408, 'var3': 0.22448979591836735, 'var2': 0.22448979591836735}

关于python - XGBClassifier 的特征重要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38212649/

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