朴素贝叶斯垃圾邮件分类模型构建及评估
朴素贝叶斯垃圾邮件分类模型构建及评估
本代码使用朴素贝叶斯算法构建一个垃圾邮件分类模型,并利用 scikit-learn 库进行模型评估,包括准确率、精确度、召回率和 F1 值等指标。
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# 读取文件
data = pd.read_csv('sms_spam.csv', encoding='ISO-8859-1')
# 定义恶意邮件关键词词库
words = set()
# 对数据集进行数据清洗
column = 'text'
data[column] = data[column].str.lower() # 转为小写
data[column] = data[column].str.replace('[^a-zA-Z ]', '') # 只保留字母和空格
data[column] = data[column].str.strip() # 去除多余空格
# 获取所期望的测试集训练集占比
select = float(input('请输入选择的测试集训练集划分占比:'))
# 划分训练集测试集
X_train, X_test, Y_train, Y_test = train_test_split(data['text'], data['type'], test_size=select, random_state=42)
# 构建模型
for doc in X_train:
words.update(set(doc.split()))
X_train_counts = np.array([[doc.count(word) for word in words] for doc in X_train])
X_test_counts = np.array([[doc.count(word) for word in words] for doc in X_test])
model = MultinomialNB()
model.fit(X_train_counts, Y_train)
# 评价模型
Y_pred = model.predict(X_test_counts)
accuracy = accuracy_score(Y_test, Y_pred)
precision = precision_score(Y_test, Y_pred, average='macro')
recall = recall_score(Y_test, Y_pred, average='macro')
f1 = f1_score(Y_test, Y_pred, average='macro')
# 输出评价值
print(f'朴素贝叶斯模型构建成功!\n模型预测准确率:{accuracy:.4%}\n模型精确度:{precision:.4%}\n模型召回率:{recall:.4%}\n模型F1值:{f1:.4%}')
报错 parsererror:error tokenizing data. C error: Expected 2 fileds in line 3, saw 3 的解决方法:
这个错误通常是由于数据文件中存在错误格式的行导致的,例如某一行的列数与其他行不一致。建议检查数据文件中的格式并进行修正。如果数据文件较大,可以尝试使用文本编辑器或命令行工具进行批量处理。另外,也可以尝试加载数据时指定其他的分隔符或编码方式,以解决该问题。
其他建议:
- 可以尝试使用更复杂的特征工程来提高模型的准确率,例如使用词袋模型、TF-IDF 等技术。
- 可以尝试使用其他分类算法,例如支持向量机、随机森林等,以比较不同算法的性能。
- 可以使用交叉验证方法来评估模型的泛化能力。
- 可以使用 GridSearchCV 方法来寻找最佳的参数组合。
原文地址: https://www.cveoy.top/t/topic/oRm3 著作权归作者所有。请勿转载和采集!