朴素贝叶斯垃圾短信分类代码
时间: 2023-09-11 22:06:25 浏览: 93
以下是一个基于朴素贝叶斯算法的垃圾短信分类代码示例:
```python
import pandas as pd
import numpy as np
import string
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.model_selection import train_test_split
# 读取数据
data = pd.read_csv('spam.csv', encoding='latin-1')
# 删除不需要的列并重命名剩下的两列
data = data.drop(['Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4'], axis=1)
data = data.rename(columns={'v1': 'label', 'v2': 'text'})
# 将标签转换为数字
data['label_num'] = data.label.map({'ham': 0, 'spam': 1})
# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data['text'], data['label_num'], random_state=1)
# 特征提取
vectorizer = CountVectorizer()
X_train_dtm = vectorizer.fit_transform(X_train)
X_test_dtm = vectorizer.transform(X_test)
# 训练模型
nb = MultinomialNB()
nb.fit(X_train_dtm, y_train)
# 预测并计算准确率和混淆矩阵
y_pred = nb.predict(X_test_dtm)
print('Accuracy:', accuracy_score(y_test, y_pred))
print('Confusion matrix:', confusion_matrix(y_test, y_pred))
```
上述代码中,我们首先读取了一个包含短信文本和标签的数据集。接着,我们删除了不需要的列并将标签转换为数字。然后,我们将数据集分为训练集和测试集,并使用 `CountVectorizer` 对文本进行特征提取。最后,我们构建了一个朴素贝叶斯模型并对测试集进行预测,计算了准确率和混淆矩阵。
阅读全文