import pandas as pd from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score, confusion_matrix,classification_report import seaborn as sns import matplotlib.pyplot as plt # 读取数据 data = pd.read_excel('E:/桌面/预测脆弱性/20230523/预测样本/预测样本.xlsx') # 分割训练集和验证集 train_data = data.sample(frac=0.8, random_state=1) test_data = data.drop(train_data.index) # 定义特征变量和目标变量 features = ['高程', '起伏度', '桥梁长', '道路长', '平均坡度', '平均地温', 'T小于0', '相态'] target = '交通风险' # 训练随机森林模型 rf = RandomForestClassifier(n_estimators=100, random_state=1) rf.fit(train_data[features], train_data[target]) # 在验证集上进行预测并计算精度、召回率和F1值等指标 pred = rf.predict(test_data[features]) accuracy = accuracy_score(test_data[target], pred) confusion_mat = confusion_matrix(test_data[target], pred) classification_rep = classification_report(test_data[target], pred) print('Accuracy:', accuracy) print('Confusion matrix:') print(confusion_mat) print('Classification report:') print(classification_rep) # 输出混淆矩阵图片 sns.heatmap(confusion_mat, annot=True, cmap="Blues") plt.show() # 读取新数据文件并预测结果 new_data = pd.read_excel('E:/桌面/预测脆弱性/20230523/预测样本/预测结果/交通风险预测096.xlsx') new_pred = rf.predict(new_data[features]) new_data['交通风险预测结果'] = new_pred new_data.to_excel('E:/桌面/预测脆弱性/20230523/预测样本/预测结果/交通风险预测096结果.xlsx', index=False)制作混淆矩阵的热力图以及多分类的roc曲线和auc值
时间: 2024-02-18 18:59:35 浏览: 142
对于制作混淆矩阵的热力图,你已经在代码中使用了Seaborn库中的heatmap函数。对于多分类的ROC曲线和AUC值的计算,可以使用scikit-learn中的multiclass_roc_auc_score函数。具体的代码如下所示:
```python
from sklearn.metrics import multiclass_roc_auc_score, roc_curve, auc
# 预测验证集结果
pred_prob = rf.predict_proba(test_data[features])
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(3):
fpr[i], tpr[i], _ = roc_curve(test_data[target], pred_prob[:, i], pos_label=i)
roc_auc[i] = auc(fpr[i], tpr[i])
# 绘制ROC曲线
plt.figure()
plt.plot(fpr[0], tpr[0], color='darkorange', lw=2, label='Class 0 (AUC = %0.2f)' % roc_auc[0])
plt.plot(fpr[1], tpr[1], color='blue', lw=2, label='Class 1 (AUC = %0.2f)' % roc_auc[1])
plt.plot(fpr[2], tpr[2], color='green', lw=2, label='Class 2 (AUC = %0.2f)' % roc_auc[2])
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()
# 计算多分类AUC值
multiclass_auc = multiclass_roc_auc_score(test_data[target], pred_prob, average="macro")
print("Multiclass AUC:", multiclass_auc)
```
需要注意的是,这里使用了pos_label参数来指定每个类别作为正类的标签,同时使用了average="macro"参数来计算多分类的AUC值。
阅读全文