如何计算多类文本分类的FPR、TPR、AUC、roc_曲线-我使用了以下代码-
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
from sklearn.feature_extraction.text import CountVectorizer
vect=CountVectorizer()
vect.fit(X_train.values.astype('U'))
X_train_dtm=vect.transform(X_train.values.astype('U'))
X_test_dtm=vect.transform(X_test)
from sklearn.naive_bayes import MultinomialNB
nb = MultinomialNB()
y_score=nb.fit(X_train_dtm, y_train)
y_pred_class = nb.predict(X_test_dtm)
到这里为止,每件事都运行良好-但是一旦我使用以下代码,就会出错-
from sklearn.metrics import roc_curve, auc, roc_auc_score
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(5):
fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
fpr["micro"], tpr["micro"], _ = roc_curve(y_test.ravel(), y_score.ravel())
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])
print ("ROC value is:",roc_auc["micro"])
错误是-
Traceback(最近的调用最后):
文件"C:/用户/saurabh/PycharmProjects/getting_started/own_code.py",第32行,打印(metrics.roc_auc_score(y_test,y_pred_prob))
文件“C:\Anaconda3\lib\site packages\sklearn\metrics\ranking.py”,第260行,roc_auc_score sample_weight=sample_weight)精度:0.910536779324
文件"C:\Anaconda3\lib\site-包\skLearning\metrics\base.py",第81行,_average_binary_score引发ValueError("{0}格式不支持"。格式(y_type))
ValueError:不支持多类格式
roc_curve不支持多类格式。你必须计算二进制类。
但要计算FPR、TPR,您可以使用混淆矩阵
from sklearn.metrics import confusion_matrix
y_test = np.argmax(y_test, axis=1)
y_score = np.argmax(y_score, axis=1)
c = confusion_matrix(y_test, y_score)
TNR = float(c[0][0])
TPR = float(c[1][1])
FNR = float(c[1][0])
FPR = float(c[0][1])
下面是一个简单的二值化示例
for i in range(5):
yt_bin = [1 if x == i else 0 for x in y_test[:, i]]
fpr[i], tpr[i], _ = roc_curve(yt_bin, y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
模式识别是自然语言处理的一个核心部分。以-ed结尾的词往往是过去时态动词(5.)。频繁使用will是新闻文本的暗示(3)。这些可观察到的模式——词的结构和词频——恰好与特定方面的含义关联,如时态和主题。但我们怎么知道从哪里开始寻找,形式的哪一方面关联含义的哪一方面? 本章的目的是要回答下列问题: 我们怎样才能识别语言数据中能明显用于对其分类的特征? 我们怎样才能构建语言模型,用于自动执行语言处理任
从sklearn加载流行数字数据集。数据集模块,并将其分配给可变数字。 分割数字。将数据分为两组,分别命名为X_train和X_test。还有,分割数字。目标分为两组Y_训练和Y_测试。 提示:使用sklearn中的训练测试分割方法。模型选择;将随机_状态设置为30;并进行分层抽样。使用默认参数,从X_序列集和Y_序列标签构建SVM分类器。将模型命名为svm_clf。 在测试数据集上评估模型的准确
我们首先从dataset目录中加载文本数据,该目录应该位于notebooks目录中,是我们通过从GitHub存储库的顶层运行fetch_data.py脚本创建的。 此外,我们执行一些简单的预处理并将数据数组拆分为两部分: text:列表的列表,其中每个子列表包含电子邮件的内容 y:我们的 SPAM 与 HAM 标签,以二元形式存储;1 代表垃圾邮件,0 代表非垃圾邮件消息。 import os
可扩展性问题 sklearn.feature_extraction.text.CountVectorizer和sklearn.feature_extraction.text.TfidfVectorizer类受到许多可伸缩性问题的困扰,这些问题都源于vocabulary_属性(Python 字典)的内部使用,它用于将 unicode 字符串特征名称映射为整数特征索引。 主要的可扩展性问题是: 文本向
我正在使用scikit-learn 0.14的GridSearchCV,但总是得到以下警告: /Library/Frameworks/epd 64 . framework/Versions/7.2/lib/python 2.7/site-packages/sk learn/grid _ search . py:706:deprecation warning:忽略GridSearchCV的附加参数!
问题内容: 我需要为(X_test,y_test)数据的每个拆分显式获取交叉验证统计信息。 因此,我尝试这样做: 是否是通过使用例如KFold来获得每个交叉验证拆分的平均绝对误差(MAE)的正确方法? 问题答案: 您的方法存在一些问题。 首先,您当然不必在培训和验证列表(即您的2个内部循环)中 一个接一个地手动 添加数据。简单的索引就可以完成工作。 此外,我们通常从不计算和报告训练CV折叠的错误-