垃圾邮件分类的各种尝试(机器学习篇)

本文介绍了垃圾邮件分类问题,使用机器学习方法如朴素贝叶斯、SVM、逻辑回归、随机森林、XGBoost和LightGBM进行文本分类。数据集经过清洗,去除停用词、URL等。实验表明朴素贝叶斯在小数据集上表现最优,而其他模型可能在更大数据集上更有效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

垃圾邮件分类,作为初学者实践文本分类是一个不错的开始。文章将通过传统机器学习和深度学习的方法来解决分类问题。

机器学习方法:朴素贝叶斯、SVM、逻辑回归、RF、XGBoost、LightGBM

深度学习方法:垃圾邮件分类的各种尝试(深度学习篇)

开源代码地址(欢迎star~):https://github.com/ljx02/Spam_Email_Classificaton

数据集下载链接:由于数据较小,暂时也放到了Git项目中

解决这个问题通用的思路是:

  • 读取文本数据,包括训练集、测试集、验证集,如果数据质量不高考虑先清洗一下数据
  • 创建词典,这一步有点抽象,可以看作是对语料中的词进行统计,方便后续提取特征
  • 特征提取,通过对特征进行编码(向量化)
  • 选择模型,开始训练分类器
  • 验证模型,预测结果

数据集格式

总的数据集一共有4458条数据,将按照8:2进行划分训练集和验证集。通过分析发现,其中pam的数量有3866条,占数据集的大多数,可以考虑不平衡样本采样进行训练。

数据集的格式如图所示,有三列分别是ID,Label(pam、spam),Email

在这里插入图片描述

清洗数据集

在实际中清洗数据也是非常必要的,套用一句俗话“数据决定了模型的上限”。常用的清洗数据的方法有:去掉停用词、去掉URL、去掉HTML标签、去掉特殊符号、去掉表情符号、去掉长重复字、将缩写补全、去掉单字、提取词干等等。当然,清洗数据也可能使模型变差,需要三思。提供部分处理的参考代码如下:

- 去掉停用词

from nltk.corpus import stopwords
stop = set(stopwords.words('english'))


text = "their are so many picture. how are you do this time very much!"
clean_text = []
for word in word_tokenize(text):
    if word not in stop:
        clean_text.append(word)
print(clean_text)

- 去掉URL

# 删除URL
example = "New competition launched :https://www.kaggle.com/c/nlp-getting-started"
def remove_URL(text):
    url = re.compile(r'https?://\S+|www\.\S+')
    return url.sub(r'', text)


print(remove_URL(example))

- 去掉HTML标签

# 删除HTML标签
example = """<div>
<h1>Real or Fake</h1>
<p>Kaggle </p>
<a href="https://www.kaggle.com/c/nlp-getting-started">getting started</a>
</div>"""
def remove_html
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值