文章目录
垃圾邮件分类,作为初学者实践文本分类是一个不错的开始。文章将通过传统机器学习和深度学习的方法来解决分类问题。
机器学习方法:朴素贝叶斯、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