垃圾邮件识别模型:如何获取Ham与Spam的分类正确率?
获取Ham与Spam的分类准确率
方法一:使用classification_report直接生成详细指标
首先在导入模块时添加classification_report:
from sklearn.metrics import confusion_matrix, classification_report
模型训练完成后,获取测试集预测结果并生成分类报告:
# 获取测试集预测结果 y_pred = model.predict(count_vector.transform(x_test)) # 打印分类报告 print("分类详细指标:") print(classification_report(y_test, y_pred))
这份报告会输出每个类别(Ham/Spam)的精确率、召回率、F1值及支持样本数,其中召回率就是该类别被正确分类的百分比。
方法二:通过混淆矩阵手动计算分类准确率
若需单独计算每个类别的正确分类占比,可借助混淆矩阵实现:
# 生成混淆矩阵 cm = confusion_matrix(y_test, y_pred) # 提取Ham和Spam的正确分类数与总样本数(默认标签顺序为['ham', 'spam']) ham_correct = cm[0][0] ham_total = cm[0].sum() spam_correct = cm[1][1] spam_total = cm[1].sum() # 计算并输出准确率 ham_accuracy = (ham_correct / ham_total) * 100 spam_accuracy = (spam_correct / spam_total) * 100 print(f"Ham正确分类百分比: {ham_accuracy:.2f}%") print(f"Spam正确分类百分比: {spam_accuracy:.2f}%")
修改后的完整代码
整合上述逻辑后的完整代码如下:
import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNB, GaussianNB from sklearn import svm from sklearn.model_selection import GridSearchCV from sklearn.metrics import confusion_matrix, classification_report data = pd.read_csv('D:/Descargas/spam.csv', encoding='utf-8') x_data=data['v2'] y_data=data['v1'] split = int(0.8*data.shape[0]) x_train=x_data[:split] x_test=x_data[split:] y_train=y_data[:split] y_test=y_data[split:] count_vector = CountVectorizer() extracted_features = count_vector.fit_transform(x_train) tuned_parameters = {'kernel': ['rbf','linear'], 'gamma': [1e-3, 1e-4],'C': [1, 10, 100, 1000]} model = GridSearchCV(svm.SVC(), tuned_parameters) model.fit(extracted_features,y_train) print("Model Trained Successfully!") # 输出整体准确率 print("Accuracy of the model is: ",model.score(count_vector.transform(x_test),y_test)*100) # 获取测试集预测结果 y_pred = model.predict(count_vector.transform(x_test)) # 方法一:打印分类详细报告 print("\n分类详细指标:") print(classification_report(y_test, y_pred)) # 方法二:手动计算每个类别的正确分类百分比 cm = confusion_matrix(y_test, y_pred) ham_correct = cm[0][0] ham_total = cm[0].sum() spam_correct = cm[1][1] spam_total = cm[1].sum() ham_accuracy = (ham_correct / ham_total) * 100 spam_accuracy = (spam_correct / spam_total) * 100 print(f"\nHam正确分类百分比: {ham_accuracy:.2f}%") print(f"Spam正确分类百分比: {spam_accuracy:.2f}%")
内容的提问来源于stack exchange,提问作者leonardo gomez
相关产品推荐
相关产品推荐

