首页 > 解决方案 > 如何打印真阳性、假阳性等的结果

问题描述

我有一个包含垃圾邮件和火腿邮件的数据集(熊猫数据框)。所以典型的机器学习初学者教程。我在上面运行我的模型,看看我的分类器是如何工作的。

源代码

import numpy as np
import pandas as pd

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline
from sklearn.svm import LinearSVC


df = pd.read_csv('TextFiles/smsspamcollection.tsv', sep='\t')

X = df['message']  
y = df['label']    

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

vectorizer = TfidfVectorizer()

X_train_tfidf = vectorizer.fit_transform(X_train) # Originaler Datensatz wird verwendet!
X_train_tfidf.shape
print(X_train_tfidf)



text_clf = Pipeline([('tfidf', TfidfVectorizer()),
                     ('clf', LinearSVC()),
])



text_clf.fit(X_train, y_train)  



predictions = text_clf.predict(X_test)
from sklearn import metrics
print(metrics.confusion_matrix(y_test,predictions))

结果

[[1586    7]
 [  12  234]]

print(metrics.classification_report(y_test,predictions))

precision    recall  f1-score   support

         ham       0.99      1.00      0.99      1593
        spam       0.97      0.95      0.96       246

    accuracy                           0.99      1839
   macro avg       0.98      0.97      0.98      1839
weighted avg       0.99      0.99      0.99      1839

如您所见,我有 7 个误报。

问题 1

如何找出我的数据框中的哪七条消息被归类为误报?我一般如何查看哪些消息属于 TP,TN,FP,FN 的哪个类别?有什么功能吗?

问题2

我怎样才能改善结果?

标签: pythonmachine-learning

解决方案


如何找出我的数据框中的哪七条消息被归类为误报?我一般如何查看哪些消息属于 TP,TN,FP,FN 的哪个类别?有什么功能吗?

真阳性

意味着您的分类器和地面实况标签的预测都是true(或1)。您可以使用 binary 轻松获得那些二进制掩码and

y_test & predicted

要获取这些示例的索引,请使用:

np.argwhere(y_test & predicted).flatten()

(您也可以将此代码段用于以下任何情况)

假阳性

真正的标签是0,你错误地预测1。会是这样的:

(y_true == 0) & predicted

真阴性

真正的标签是0并且您正确地预测了它:

(y_true == 0) & (predicted == 0)

假阴性

Groundtruth 是1,您预测0

y_true & (predicted == 0)

我怎样才能改善结果?

这个问题对于这个网站来说太笼统了(以前的问题很好)。您可以查看网格搜索和其他超参数调整技术(请参阅sklearn 文档)。


推荐阅读