我有一个数据集,它有一个文本列(“描述”),两个分类列(“类型”和“操作”)和一个二进制变量(“得分”)。
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”。
1条答案
按热度按时间mwecs4sa1#
您的
X_columns
只是来自向量化器的列名,但您已经添加了两个列["type", "action"]
;将这些名称附加到X_columns
数组的末尾。