pandas 如何从XGBoost模型中获取形状图上的特征名称?

r1zhe5dt  于 2023-04-10  发布在  其他
关注(0)|答案(1)|浏览(155)

我有一个数据集,它有一个文本列(“描述”),两个分类列(“类型”和“操作”)和一个二进制变量(“得分”)。

y = project['score']
X = project(['type', 'action','description'], axis=1)

在处理完“description”字段(删除重音、标点符号、停用词和词干)后,我使用TfidfVectorizer对其进行矢量化,并创建一个稀疏矩阵。

tfidf = TfidfVectorizer(lowercase=False, max_features=50) 
vectorizer = TfidfVectorizer(binary=True, ngram_range=(1, 2)) 
y = project["score"].values.astype(np.float32) 
X = sp.sparse.hstack((vectorizer.fit_transform(project.description), project[['type','action']].values), dtype=float, format='csr') 
X_columns=vectorizer.get_feature_names_out()

然后,我分成训练和测试。

train, test, y_train, y_test = train_test_split(X, y, random_state=42)

之后,我创建了一个XGBoost模型来预测项目得分(0,1):

xgb_model = xgb.XGBClassifier(max_depth=5, learning_rate=0.1, n_estimators=100, objective='binary:logistic', random_state=42) 
xgb_model.fit(train, y_train) y_pred_xgb = xgb_model.predict_proba(test)[:, 1] 
xgb_performance = roc_auc_score(y_test, y_pred_xgb)

后来,我试图绘制SHAP图:

explainer = shap.Explainer(xgb_model) 
shap_values = explainer(test) 
shap.summary_plot(shap_values, features=test, feature_names=X_columns)

我需要shap来显示图上的特征名称,而不是像现在这样显示特征的数量:
enter image description here
以下是一些样本数据:
| 描述|类型|作用|得分|
| --------------|--------------|--------------|--------------|
| 西那卡塞技术|1|0|0|
| tecnolog medic吉非替尼|0|1|1|
| 技术citogene hibridizaca原位荧光|二|二|1|
| Tecnolog Paricalcitol zempl indicaca trat prev|1|0|0|
| Technolog canaquinumab|0|二|1|
我已经尝试了feature_names=X_columns,但是我得到一个错误“index 77810 is out of bounds for axis 0 with size 77810”。

mwecs4sa

mwecs4sa1#

您的X_columns只是来自向量化器的列名,但您已经添加了两个列["type", "action"];将这些名称附加到X_columns数组的末尾。

相关问题