zoukankan      html  css  js  c++  java
  • 使用朴素贝叶斯模型对邮件进行分类

    1.特征向量
        每一个有效词汇在邮件中出现的次数(使用一维列表方法)
        word 词汇出现的次数
            一维列表.count(word) 
    2.将列表转换为数组形式 array(参数)
        创建垃圾邮件,正常邮件训练集 
        array(列表对象 或 表达式)
    3.使用 朴素贝叶斯算法
        model = MultinomialNB()
    4.进行训练模型 model.fit
        model.fit(array数组,array数组)
    5.对指定 topWords 数据使用函数
        map(lambda x:words.count(x),topWords)
    6.预测数据 model.predict ,返回值为 0 或 1
        result = model.predict(array数组.reshape(1,-1))[0]
    7.查看在不同区间的概率
        model.predict_proba(array数组.reshape(1,-1))
    8.条件语句,预测的结果便于区分 1 为垃圾邮件,0 为 正常邮件
        return "垃圾邮件" if result == 1 else "正常邮件"
    
    程序:
    # 全部训练集中出现次数最多的前 600 个单词
    topWords = getTopWords(600)
    vectors = [ ]
    for words in allWords:
        temp = list(map(lambda x:words.count(x),topWords))
        # 获取前600个单词的出现的个数
        vectors.append(temp)
    
    vectors = array(vectors)
    # 对训练集中的数据给定一个标签
    # 0.txt~99.txt 为垃圾邮件,0
    # 100~140 为有效邮件,1
    labels = array([1] * 100 + [0] * 41)
    
    # 创建模型 
    model = MultinomialNB()
    model.fit(vectors,labels)
    # 训练样本数和标签
    def predict(txtFile):
        words = getWordsFromFile(txtFile)
        # 获取有效字符 
        currentVector = array(tuple(
                lambda x:words.count(x),topWords
            ))
        # 查看有效词汇个数
        result = model.predict(currentVector.reshape(1,-1))[0]
        # 查看预测的概率
        print(model.predict_proba(currentVector.reshape(1,-1)))
        return "垃圾邮件" if result == 1 else "正常邮件"

    2020-04-11

  • 相关阅读:
    [C++]仿java.lang.String的字符串工具类[原]
    SQL基础1创建表、用户
    Linux中gdb 查看core堆栈信息
    Direct3D9基础工具类[原]
    eclipse3.4启动错误
    ndk连接第三方库
    数据库基本概念
    MySQL常见命令
    MySQL启动和停止
    MySQL配置文件
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12680882.html
Copyright © 2011-2022 走看看