机器学习-邮件分类

1.朴素贝叶斯算法

        朴素贝叶斯算法是一种基于贝叶斯定理的分类算法,通常用于文本分类或垃圾邮件过滤。该算法假定输入的数据之间独立,根据这个假设来计算概率。

        朴素贝叶斯算法的基本步骤:

        数据预处理:通常包括数据清洗,如去除特殊字符、停用词等,以减少对模型的影响

        特征提取:从邮件文本中提取特征

        模型训练:使用朴素贝叶斯算法训练模型

        模型评估:使用未参与训练的数据来测试模型的性能

        贝叶斯定理

        贝叶斯定理是用来描述两个条件概率之间的关系

        P(A|B)=P(A,B)/P(B)

                   =P(B|A)*P(A)/P(B)

2.实现过程

        2.1.数据构建

        

        建立良好邮件与垃圾邮件的数据集

        建立test数据集进行模型评估

2.2.部分代码

    folder_path = './email/ham'
    # 获取文件夹下的所有 txt 文件
    files = [f for f in os.listdir(folder_path) if f.endswith('.txt')]
    # 初始化单词库
    word_ham = set()
    # 遍历所有 txt 文件
    for file in files:
        with open(os.path.join(folder_path, file), 'r') as f:
            # 读取文件内容,去掉标点符号
            content = f.read().replace('-',' ').replace(':',' ').replace(',', '').replace('.', '').replace('?', '').replace('!', '').replace('&',' ').replace('=',' ').replace('(',' ').replace(')',' ').replace('\\',' ')
            # 对内容进行分词
            words = jieba.cut(content)
            # 将分词结果添加到单词库
            word_all_ham.update(words)
    # 将单词库保存为 txt 文件
    with open('./email/word_all_ham.txt', 'w') as f:
        for word in word_all_ham:
            f.write(word + '\n')

        

    # 读取文本文件
    with open(txt_path, 'r') as f:
        matter = f.read()
 
        # 将内容转换为小写并去除标点符号
        matter = re.sub(r'[^\w\s]', '', matter.lower())
 
        # 使用 jieba 进行分词
        words = jieba.cut(matter)
 
        # 统计单词频率
        for word in words:
            if word in word_dict:
                word_dict[word] += 1

        2.3运行结果

        

3.小结

        朴素贝叶斯算法的优点包括其简单性、可解释性和高效性。对于文本分类和垃圾邮件过滤等任务表现良好,这些任务具有大量的文本特征和较小的数据集。

        朴素贝叶斯算法也有一些局限性,朴素贝叶斯算法假设数据之间是独立的,这个假设在现实中可能不成立。对于大规模的数据集,朴素贝叶斯算法可能会消耗大量的内存和计算时间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值