那如何得出精度和绘制roc曲线呢
时间: 2024-02-17 22:05:32 浏览: 56
使用 XGBoost 训练完模型后,可以使用 `predict()` 方法得到模型的预测结果,然后根据预测结果和真实标签计算出精度。绘制 ROC 曲线可以使用 `roc_curve()` 方法计算出真正率和假正率,然后使用 Matplotlib 绘制出 ROC 曲线。
下面是代码示例:
```python
import xgboost as xgb
from sklearn.metrics import accuracy_score, roc_curve, auc
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import TfidfVectorizer
# 加载数据
twitter_train_df = csv_loader('sentiment-train.csv')
twitter_test_df = csv_loader('sentiment-test.csv')
# 对文本进行特征提取,并转换为 TF-IDF 矩阵
vectorizer = TfidfVectorizer()
twitter_train_X = vectorizer.fit_transform(twitter_train_df['text'])
twitter_test_X = vectorizer.transform(twitter_test_df['text'])
twitter_train_y = twitter_train_df['sentiment']
twitter_test_y = twitter_test_df['sentiment']
# 构建 XGBoost 模型并训练
dtrain = xgb.DMatrix(twitter_train_X, label=twitter_train_y)
dtest = xgb.DMatrix(twitter_test_X, label=twitter_test_y)
param = {'max_depth': 3, 'eta': 0.1, 'objective': 'multi:softmax', 'num_class': 3}
num_round = 100
bst = xgb.train(param, dtrain, num_round)
# 计算模型的精度
preds = bst.predict(dtest)
accuracy = accuracy_score(twitter_test_y, preds)
print("The accuracy of the trained classifier is {:.2f}%".format(accuracy * 100))
# 绘制 ROC 曲线
prob = bst.predict(dtest, output_margin=True)
fpr, tpr, threshold = roc_curve(twitter_test_y, prob[:, 1])
roc_auc = auc(fpr, tpr)
plt.title('Receiver Operating Characteristic')
plt.plot(fpr, tpr, 'b', label='AUC = %0.2f' % roc_auc)
plt.legend(loc='lower right')
plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
```
需要注意的是,XGBoost 的 `predict()` 方法默认输出的是每个类别的概率值,如果要得到分类结果,需要使用 `output_margin=True` 参数。在计算 ROC 曲线时,需要使用模型预测的概率值,所以要将 `output_margin` 参数设置为 `True`。
阅读全文