• 使用朴素贝叶斯模型对邮件进行分类


    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

  • 相关阅读:
    win8系统下,python 2.7安装xlrd,xlutils和xlwt的方法
    phone number
    string to int
    Linux P2V Azure
    Azure IaaS 知识点小节
    Exchange端口列表
    自签名证书和私有CA签名的证书的区别 创建自签名证书 创建私有CA 证书类型 证书扩展名(转)
    Power BI REST API
    Web App 压力测试
    Azure IaaS限制
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12680882.html
Copyright © 2020-2023  润新知