热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现

本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。
### 1. 引言

随着互联网的发展,垃圾邮件和短信的数量急剧增加,不仅给用户带来困扰,还浪费了网络资源。本研究旨在利用机器学习和深度学习技术,开发高效的垃圾邮件和短信分类系统。

### 2. 分类算法原理

#### 2.1 常用分类器 - 贝叶斯分类器

贝叶斯分类器是一种基于概率论的分类方法。通过计算文本中特定词汇出现的概率,可以有效地识别垃圾邮件。具体来说,贝叶斯公式用于计算在给定条件下某个事件发生的概率。例如,当一个邮件包含特定关键词时,它是垃圾邮件的概率是多少。

### 3. 数据集介绍

我们使用了一个自采集中文邮件数据集,该数据集包括多个文件夹,每个文件夹内包含若干邮件文本。为了确保数据质量,我们进行了爬虫采集和人工筛选。

### 4. 数据预处理

在数据预处理阶段,我们将邮件样本和标签分离,并去除非中文字符,对文本进行分词处理。Python代码如下:

```python
import re
import jieba
import os

# 清洗字符串
def clean_str(string):
string = re.sub(r'[^一-鿿]', ' ', string)
string = re.sub(r'\s{2,}', ' ', string)
return string.strip()

# 提取所有邮件并保存到一个文件中
def get_data_in_a_file(original_path, save_path='all_email.txt'):
files = os.listdir(original_path)
for file in files:
if os.path.isdir(os.path.join(original_path, file)):
get_data_in_a_file(os.path.join(original_path, file), save_path=save_path)
else:
with open(os.path.join(original_path, file), 'r', encoding='gbk', errors='ignore') as f:
email = ''.join([clean_str(line) for line in f])
with open(save_path, 'a', encoding='utf8') as f:
email = [word for word in jieba.cut(email) if word.strip() != '']
f.write(' '.join(email) + '\n')

get_data_in_a_file('data', save_path='all_email.txt')
```

### 5. 特征提取

为了将文本型数据转化为数值型数据,我们使用了TF-IDF(词频-逆向文档频率)方法。TF-IDF能够衡量一个词在一个文档中的重要性。Python代码如下:

```python
from sklearn.feature_extraction.text import TfidfVectorizer

# 使用TfidfVectorizer进行特征提取
def get_data_tf_idf(email_file_name):
vectoring = TfidfVectorizer(tokenizer=lambda x: [li for li in x.split() if li.strip() != ''])
cOntent= open(email_file_name, 'r', encoding='utf8').readlines()
x = vectoring.fit_transform(content)
return x, vectoring
```

### 6. 训练分类器

我们使用了多种分类器进行实验,包括支持向量机(SVM)、随机森林(Random Forest)和逻辑回归(Logistic Regression)。以下是一个简单的逻辑回归分类器的例子:

```python
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn import metrics
import numpy as np

if __name__ == '__main__':
np.random.seed(1)
x, vectoring = get_data_tf_idf('all_email.txt')
y = get_label_list('label.txt')
index = np.arange(len(y))
np.random.shuffle(index)
x = x[index]
y = y[index]
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
clf = LogisticRegression()
clf.fit(x_train, y_train)
y_pred = clf.predict(x_test)
print('classification_report\n', metrics.classification_report(y_test, y_pred, digits=4))
print('Accuracy:', metrics.accuracy_score(y_test, y_pred))
```

### 7. 综合测试结果

我们对2000条数据进行了测试,结果显示分类精度较高。然而,由于数据量较小,难以全面评估模型性能。

### 8. 其他模型方法

除了传统的机器学习方法,还可以构建深度学习模型。以下是LSTM模型的一个例子:

```python
from keras.models import Sequential
from keras.layers import Embedding, LSTM, Dense, Dropout

# 获取嵌入矩阵
def get_embedding_vectors(tokenizer, dim=100):
embedding_index = {}
with open(f'data/glove.6B.{dim}d.txt', encoding='utf8') as f:
for line in tqdm.tqdm(f, 'Reading GloVe'):
values = line.split()
word = values[0]
vectors = np.asarray(values[1:], dtype='float32')
embedding_index[word] = vectors
word_index = tokenizer.word_index
embedding_matrix = np.zeros((len(word_index) + 1, dim))
for word, i in word_index.items():
embedding_vector = embedding_index.get(word)
if embedding_vector is not None:
embedding_matrix[i] = embedding_vector
return embedding_matrix

# 构建LSTM模型
def get_model(tokenizer, lstm_units):
embedding_matrix = get_embedding_vectors(tokenizer)
model = Sequential()
model.add(Embedding(len(tokenizer.word_index) + 1,
EMBEDDING_SIZE,
weights=[embedding_matrix],
trainable=False,
input_length=SEQUENCE_LENGTH))
model.add(LSTM(lstm_units, recurrent_dropout=0.2))
model.add(Dropout(0.3))
model.add(Dense(2, activation='softmax'))
model.compile(optimizer='rmsprop', loss='categorical_crossentropy',
metrics=['accuracy', keras_metrics.precision(), keras_metrics.recall()])
model.summary()
return model
```

### 9. 毕设帮助

提供毕设帮助、开题指导和技术解答。如有需要,请联系我。
推荐阅读
author-avatar
邹杂品_433
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有