我想绘制决策树分类器的ROC曲线。我的代码引发key of type tuple not found and not a MultiIndex
错误。
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import roc_curve, auc
from sklearn.dummy import DummyClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
import pandas as pd
# Load the Fake news dataset
df_fake = pd.read_csv("C:/Users/User/Downloads/Fake.csv")
# Load the True news dataset
df_true = pd.read_csv("C:/Users/User/Downloads/True.csv")
# Set fake as 1 and true as 0
df_true["class"] = 0
df_fake["class"] = 1
# Concatenate true and fake datasets
df = pd.concat([df_fake, df_true])
# Sanity check
print(f'N rows={len(df)}, M columns={len(df.columns)}')
df.head()
Dataframe
df.head()
<表类> 标题文本主题 日期类0 特朗普发尴尬贺岁信… 川普就是不希望所有美国人… 新闻 12月31日,2017年 1 1 醉醺醺吹牛的特朗普幕僚开始说俄语… 众议院情报委员会主席努… 新闻 12月31日,2017年 1 2 警长大卫克拉克成为网络笑话… 上周五,据透露,前密尔沃基… 新闻 12月31日,2017年 1 3 特朗普竟然有奥巴马的名字… 在圣诞节那天,唐纳德·特朗普宣布… 新闻 12月31日,2017年 1 4 教皇方济各怒斥特朗普 教皇方济各用他一年一度的圣诞节致辞… 新闻 12月31日,2017年 1 表类>
我们可以像这样重写plot_roc
函数(我使用问题中提供的玩具数据集进行了尝试):
from sklearn import metrics
from matplotlib import pyplot as plt
def plot_roc(y_test, y_score):
fpr = dict()
tpr = dict()
roc_auc = dict()
# Compute micro-average ROC curve and ROC area
fpr["micro"], tpr["micro"], _ = metrics.roc_curve(y_test.ravel(), y_score.ravel())
roc_auc["micro"] = metrics.auc(fpr["micro"], tpr["micro"])
plt.figure()
lw = 2
plt.plot(fpr["micro"], tpr["micro"], color='darkorange',
lw=lw, label='ROC curve (area = %0.2f)' % roc_auc["micro"])
plt.plot([0, 1], [0, 1], color='navy', lw=lw, 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 example')
plt.legend(loc="lower right")
plt.show()
我们这样称呼它:
plot_roc(y_test, dt_gini_score)
得到期望的图。