我正在使用Sckit-learn并使用混淆矩阵来更深入地了解我的算法的执行情况:
X_train, X_test, Y_train, Y_test = train_test_split(keywords_list,
label_list, test_size=0.33, random_state=42)
pipeline.fit(X_train, Y_train)
pred = pipeline.predict(X_test)
print(confusion_matrix(Y_test, pred))
我得到的输出是这样的:
[[1011 72]
[ 154 1380]]
我假设遵循这些Matrix的格式:
TP|FP
FN|TN
是否可以检索被归类为误报和假阴性的值?知道这些数据看起来会对我的工作有所帮助。不言而喻,我是Sckit-Learn的新手。
编辑:
亚历山德罗通过告诉我Y_test != pred
将在混淆矩阵中返回我的所有误报/否定来给出了很好的建议。
我在原始问题中应该提到的一个因素是我在二进制标签下对文本数据进行分类。 (例如汉姆/垃圾邮件)我希望彼此分开识别它们。我目前提取假阴性的代码采用以下形式:
false_neg = open('false_neg.csv', 'w')
falsen_list = X_test[(Y_test == 'Spam') and (pred == 'Ham')] #False Negatives
wr2 = csv.writer(false_neg, quoting=csv.QUOTE_ALL)
for x in falsen_list:
wr2.writerow([x])
不幸的是,这会引发错误:
Traceback (most recent call last):
File "/home/noname365/PycharmProjects/MLCorpusBlacklist/CorpusML_training.py", line 171, in <module>
falsen_list = X_test[(Y_test == 'blacklisted') and (pred == 'clean')] #False Negatives
File "/home/noname365/virtualenvs/env35/lib/python3.5/site-packages/pandas/core/generic.py", line 731, in __nonzero__
.format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我在这里走在正确的轨道上吗?
答案 0 :(得分:1)
Y_test != pred
为您提供错误预测的答案
Particularly (Y_test == 1) == (pred == 0)
应该给你误报,而(Y_test == 0) == (pred == 1)
应该给你假阴性(或者它可能是另一种方式,取决于你的设置中的正面和负面)
答案 1 :(得分:0)
对我来说,这可以在亚历山德罗答案中的'=='位置添加'&'(他的答案同时给出了误报和误报)
(Y_test == 1)&(pred == 0)
希望有帮助。