机器学习:使用逻辑回归对垃圾邮件分类

先附上代码

from sklearn.model_selection import train_test_split # 拆分数据集
from sklearn.feature_extraction.text import CountVectorizer # 文本数据向量化
from sklearn.linear_model import LogisticRegression # 分类模型
from sklearn.metrics import accuracy_score # 精度
from sklearn.datasets import load_iris
import string # 字符串处理

def text_process(text):
    '''
    单份文本样本预处理
    :param text: 输入文本
    :return: 清理好的文本
    '''
    #去除缩写"'m","'re","'s"替换部分缩写
    short = ["'m","'re","'s",'\n',' c u ',"n't",' u ']
    repla = ['','','','',' see you ',' not',' you ']
    for i,w in enumerate(short):
        text=text.replace(w,repla[i])
    #去除标点
    remove = str.maketrans('','',string.punctuation)
    text = text.translate(remove)
    return text # 清理好的文本

def file_process(filename):
    '''
    数据文件(包含收集的全部数据)预处理
    :param filename: 文件路径
    :return: 清理后的文本内容,标签(是否垃圾邮件)
    '''
 # 标签
    labels = [] 
 # 邮件内容
    contents = []
 # 读取文件
    with open(filename,'r',encoding='utf-8') as f:
 # 逐行读取
        lines = f.readlines()
        for line in lines:
        #得到训练数据和标签
            target = line.split('\t')#注意这里在文本中标签和信息是用table隔开的
        #读取标签
            if target[0]=='ham':
                label = 1
            else:
                label=0
            content = text_process(target[1].lower())#这里将每一行信息转为小写并处理后存入content
            labels.append(label)
            contents.append(content)
    return contents,labels # 清理后的文本内容,标签(是否垃圾邮件)

contents,label = file_process("spam_set.txt")
# 文本向量化
vectorizer = CountVectorizer()
#我们选择前4000个样本训练,选择后面的用来测试
X_train_vectors = vectorizer.fit_transform(contents[0:4000])
X_test_vectors = vectorizer.transform(contents[4000:])
Y_train_vertors = label[0:4000]
Y_test_vertors = label[4000:]


clf = LogisticRegression(random_state=0)
clf.fit(X_train_vectors,Y_train_vertors)

#使用剩下的数据进行测试
res = clf.predict(X_test_vectors)
res_prob = clf.predict_log_proba(X_test_vectors)

#模型估算正确率
#这里我们计算出对测试集预测正确率为97.8%,非常高
score = accuracy_score(Y_test_vertors,res)
print(score)

数据内容如图

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值