随机森林导入数据用kfold分层抽样后用下列画roc_curve曲线三分类python代码mse = mean_squared_error(y_test, y_pred1) rmse = math.sqrt(mse) print('FNN深度森林RMSE:', rmse) print('FNN深度森林Accuracy:', accuracy_score(y_test, y_pred1)) mse = mean_squared_error(y_test_fuzzy, y_pred) rmse = math.sqrt(mse) print('深度森林RMSE:', rmse) print('深度森林Accuracy:', accuracy_score(y_test_fuzzy, y_pred)) fpr = dict() tpr = dict() roc_auc = dict() for i in range(3): # 遍历三个类别 fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_pred1[:, i]) roc_auc[i] = auc(fpr[i], tpr[i]) # Compute micro-average ROC curve and ROC area(方法二) fpr["micro"], tpr["micro"], _ = roc_curve(y_test.ravel(), y_pred1.ravel()) roc_auc["micro"] = auc(fpr["micro"], tpr["micro"]) # Compute macro-average ROC curve and ROC area(方法一) # First aggregate all false positive rates all_fpr = np.unique(np.concatenate([fpr[i] for i in range(3)])) # Then interpolate all ROC curves at this points mean_tpr = np.zeros_like(all_fpr) for i in range(3): mean_tpr += interp(all_fpr, fpr[i], tpr[i]) # Finally average it and compute AUC mean_tpr /= 3 fpr["macro"] = all_fpr tpr["macro"] = mean_tpr roc_auc["macro"] = auc(fpr["macro"], tpr["macro"]) # Plot all ROC curves lw = 2 plt.figure() plt.plot(fpr["micro"], tpr["micro"], label='micro-average ROC curve (area = {0:0.2f})' ''.format(roc_auc["micro"]), color='deeppink', linestyle=':', linewidth=4) plt.plot(fpr["macro"], tpr["macro"], label='macro-average ROC curve (area = {0:0.2f})' ''.format(roc_auc["macro"]), color='navy', linestyle=':', linewidth=4) colors = cycle(['aqua', 'darkorange', 'cornflowerblue']) for i, color in zip(range(3), colors): plt.plot(fpr[i], tpr[i], color=color, lw=lw, label='ROC curve of class {0} (area = {1:0.2f})' ''.format(i, roc_auc[i])) plt.plot([0, 1], [0, 1], 'k--', lw=lw) plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('DF-F') plt.legend(loc="lower right")
时间: 2024-02-06 14:03:44 浏览: 23
这是一个随机森林在三分类问题上使用kfold分层抽样后进行评估的Python代码,其中包括了计算RMSE、Accuracy和绘制ROC曲线的步骤。其中,使用了sklearn库中的mean_squared_error、accuracy_score、roc_curve和auc函数来计算RMSE、Accuracy和ROC曲线的数据。在绘制ROC曲线时,采用了方法一和方法二两种方法,分别计算了macro-average和micro-average的ROC曲线。
相关问题
随机森林导入数据用kfold分层抽样后画roc_curve曲线三分类python代码
以下是用随机森林分类器对三分类数据进行K折分层抽样并绘制ROC曲线的Python代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import roc_curve, auc
# 导入数据
X = np.load('X.npy') # 特征向量
y = np.load('y.npy') # 标签
# 定义K折分层抽样
cv = StratifiedKFold(n_splits=5)
# 定义随机森林分类器
rfc = RandomForestClassifier(n_estimators=100)
# 初始化ROC曲线数据
mean_fpr = np.linspace(0, 1, 100)
tprs = []
aucs = []
# 遍历K折拆分的数据集
for i, (train, test) in enumerate(cv.split(X, y)):
# 在训练集上训练分类器
rfc.fit(X[train], y[train])
# 在测试集上预测概率
y_score = rfc.predict_proba(X[test])
# 计算ROC曲线数据
fpr, tpr, thresholds = roc_curve(y[test], y_score[:, 1])
tprs.append(np.interp(mean_fpr, fpr, tpr))
tprs[-1][0] = 0.0
roc_auc = auc(fpr, tpr)
aucs.append(roc_auc)
# 绘制ROC曲线
plt.plot(fpr, tpr, lw=1, alpha=0.3,
label='ROC fold %d (AUC = %0.2f)' % (i+1, roc_auc))
# 绘制平均ROC曲线
mean_tpr = np.mean(tprs, axis=0)
mean_tpr[-1] = 1.0
mean_auc = auc(mean_fpr, mean_tpr)
plt.plot(mean_fpr, mean_tpr, color='b',
label=r'Mean ROC (AUC = %0.2f)' % mean_auc, lw=2, alpha=.8)
# 绘制随机猜测线
plt.plot([0, 1], [0, 1], linestyle='--', lw=2, color='r',
label='Random chance', alpha=.8)
# 设置图例、标题和坐标轴标签
plt.legend(loc="lower right")
plt.title('Random Forest ROC Curve for Three-Class Data')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
# 显示图形
plt.show()
```
在以上代码中,我们首先导入了必要的库和数据。然后,我们使用`StratifiedKFold`方法定义了5折分层抽样交叉验证器。接下来,我们定义随机森林分类器,并初始化ROC曲线数据。在遍历K折拆分的数据集时,我们在训练集上训练分类器,然后在测试集上预测概率并计算ROC曲线数据。最后,我们绘制了平均ROC曲线、随机猜测线和图例、标题和坐标轴标签,并显示了图形。
利用sklearn.metrics.roc_curve绘制roc曲线python代码
以下是使用sklearn.metrics.roc_curve绘制ROC曲线的Python代码,假设你已经用训练集训练好了一个二分类模型并用测试集评估了它的性能:
```python
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
# 假设你已经用测试集评估了你的模型,并得到了预测结果和真实标签
y_true = [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
y_scores = [0.1, 0.8, 0.9, 0.3, 0.6, 0.2, 0.4, 0.7, 0.35, 0.5]
# 计算ROC曲线的假正率、真正率和阈值
fpr, tpr, thresholds = roc_curve(y_true, y_scores)
# 计算AUC值
roc_auc = auc(fpr, tpr)
# 绘制ROC曲线
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
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()
```
运行上述代码,即可得到ROC曲线。其中,y_true是测试集的真实标签,y_scores是你的模型对测试集的预测结果。在计算ROC曲线时,我们使用了sklearn.metrics.roc_curve函数,它返回了假正率、真正率和阈值三个数组,可以用于绘制ROC曲线。同时,我们还计算了AUC值(即ROC曲线下的面积),并将其显示在图例中。