56kb 2022-04-13 23:57 采纳率: 100%

# ROC曲线画出来混乱线

###### 问题相关代码
``````import numpy as np
from sklearn.metrics import multilabel_confusion_matrix
from sklearn.metrics import classification_report,roc_auc_score

pred_y_quant = rf.predict_proba(Xtest)
con = multilabel_confusion_matrix(Ytest,rf.predict(Xtest),labels=[1.0,2.0,3.0,4.0,5.0])
print(classification_report(Ytest,rf.predict(Xtest),labels=[1.0,2.0,3.0,4.0,5.0]))
# macro avg       0.52      0.40      0.42      4646 weighted avg       0.71      0.72      0.70      4646
#AUC
AUC = roc_auc_score(np.array(Ytest),np.array(pred_y_quant),multi_class='ovo')
print('AUC:',auc)
pred_y_score = []
for i in pred_y_quant:
pred_y_score.append(max(i))
#ROC
plt.figure()
lw = 2
plt.plot(np.array(Ytest),np.array(pred_y_score),color='darkorange',
lw=lw,label = 'randomforest')
plt.plot(color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 5.0])
#plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.legend(loc="lower right")
plt.show()
``````

• 写回答

#### 2条回答默认 最新

• cndrip 2022-04-14 19:05
关注

我感觉你写得不对，以下代码供你参考

``````import numpy as np
import pandas as pd
import matplotlib.pyplot as  plt
from sklearn.metrics import multilabel_confusion_matrix
from sklearn.metrics import classification_report,roc_auc_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_blobs

from sklearn import svm

#使用最初的X和y，样本不均衡的这个模型
class_1 = 500 #类别1有500个样本
class_2 = 50 #类别2只有50个
centers = [[0.0, 0.0], [2.0, 2.0]] #设定两个类别的中心
clusters_std = [1.5, 0.5] #设定两个类别的方差，通常来说，样本量比较大的类别会更加松散
X, y = make_blobs(n_samples=[class_1, class_2],
centers=centers,
cluster_std=clusters_std,
random_state=0, shuffle=False)

plt.scatter(X[:, 0], X[:, 1], c=y, cmap="rainbow",s=10)

clf_proba = RandomForestClassifier(n_estimators = 8).fit(X,y)
y_predict = clf_proba.predict(X)
ypredict = clf_proba.predict_proba(X)

from sklearn.metrics import roc_curve
FPR, recall, thresholds = roc_curve(y,ypredict[:,1], pos_label=1)

from sklearn.metrics import roc_auc_score as AUC
area = AUC(y,ypredict[:,1])
print(area)

from sklearn.metrics import confusion_matrix
cm= confusion_matrix(y, y_predict)
print(cm)

plt.figure()
plt.plot(FPR, recall, color='red',
label='ROC curve (area = %0.4f)' % area)
plt.plot([0, 1], [0, 1], color='black', linestyle='--')
plt.xlim([-0.05, 1.05])
plt.ylim([-0.05, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('Recall')
plt.legend(loc="lower right")
plt.show()

``````
本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

• 系统已结题 4月25日
• 已采纳回答 4月17日
• 创建了问题 4月13日

#### 悬赏问题

• ¥30 dbLinq最新版linq sqlite
• ¥20 对D盘进行分盘之前没有将visual studio2022卸载掉，现在该如何下载回来
• ¥15 完成虚拟机环境配置，还有安装kettle
• ¥15 2024年全国大学生数据分析大赛A题：直播带货与电商产品的大数据分析 问题5. 请设计一份优惠券的投放策略，需要考虑优惠券的数量、优惠券的金额、投放时间段和投放商品种类等因素。求具体的python代码
• ¥15 有人会搭建生鲜配送自营+平台的管理系统吗
• ¥15 用matlab写代码