使用Python编写一个自动归类垃圾邮件的脚本
发布时间:2024-01-07 10:44:44
以下是一个使用Python编写的自动归类垃圾邮件的脚本,它使用机器学习算法来对邮件进行分类。该脚本首先会对训练集进行模型训练,并保存训练好的模型。然后,它对测试集中的邮件进行分类,并根据分类结果将邮件归类为垃圾邮件或非垃圾邮件。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
# 读取训练集
data = pd.read_csv('spam.csv')
# 分割特征和标签
X = data['text']
y = data['label']
# 特征提取
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(X)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
model = MultinomialNB()
model.fit(X_train, y_train)
# 保存训练好的模型
joblib.dump(vectorizer, 'vectorizer.pkl')
joblib.dump(model, 'model.pkl')
# 加载模型
vectorizer = joblib.load('vectorizer.pkl')
model = joblib.load('model.pkl')
# 对测试集进行分类
test_email = "Congratulations! You've won a free trip to Hawaii. Click here to claim your prize!"
test_email = vectorizer.transform([test_email])
prediction = model.predict(test_email)
# 根据分类结果打印归类结果
if prediction[0] == 0:
print("The email is not spam.")
else:
print("The email is spam.")
上述代码中,首先我们使用pandas库读取包含邮件文本和标签的训练集数据。然后,我们使用CountVectorizer将文本转换为向量表示。接下来,我们使用train_test_split函数将训练集划分为训练集和测试集,其中80%的样本用于训练,20%用于评估模型性能。然后,我们使用MultinomialNB来训练模型,并使用joblib库保存训练好的模型。
接下来,我们使用joblib.load函数加载训练好的模型和特征提取器。然后,我们使用transform方法将测试邮件转换为向量表示,并使用训练好的模型对其进行分类。最后,根据分类结果打印归类结果。
上述代码仅提供一个示例,实际应用中还需要根据具体情况进行一些修改和改进。可以尝试使用不同的机器学习算法,调整训练集和测试集的划分比例,尝试不同的特征提取方法等来提高分类准确率。同时,还可以结合其他特征,如邮件主题、发送者等来进一步提高分类效果。
