【机器学习】朴素贝叶斯-02

心得体会

  1交叉验证:从训练的数据里随机抽取作为测试集

复制代码
# 4-6朴素贝叶斯过滤垃圾邮件
#朴素贝叶斯交叉验证
def textParse(bigString):
    import re
    listOfTokens=re.split('\\W+',bigString)
    return [tok.lower() for tok in listOfTokens if len(tok)>2]

def spamTest():
    docList=[]
    classList=[]
    fullText=[]
    #存入数据
    for i in range(1,26):
        wordList=textParse(open('E:/Python/《机器学习实战》代码/Ch04/spam/%d.txt'%i).read())
        docList.append(wordList)
        fullText.append(wordList)
        classList.append(1)
        wordList=textParse(open('E:/Python/《机器学习实战》代码/Ch04/ham/%d.txt'%i).read())
        docList.append(wordList)
        fullText.append(wordList)
        classList.append(0)
    # 随机建立测训练集
    vocabList=createVocabList(docList)  #生成单词向量
    trainingSet=list(range(50))
    testSet=[]
    for i in range(10):
        randIndex=int(random.uniform(0,len(trainingSet)))#生成trainingSet范围内的随机数
        testSet.append(trainingSet[randIndex])#将该训练数据加入训练集
        del(trainingSet[randIndex])#将training中该数据删除,以免重复使用同一数据
    trainMat=[]
    trainClasses=[]
    for docIndex in trainingSet:
        trainMat.append(setOfWords2Vec(vocabList,docList[docIndex]))#将训练数据变成单词向量
        trainClasses.append(classList[docIndex])#保存该训练集的类型
    p0V,p1V,pSpam=trainNBO(array(trainMat),array(trainClasses))#生成每个位置的权重
    #对测试集分类
    errorCount=0
    for docIndex in testSet:
        wordVector=setOfWords2Vec(vocabList,docList[docIndex])
        if classifyNB(array(wordVector),p0V,p1V,pSpam)!=classList[docIndex]:#分类结果如果不一样error+1
            errorCount+=1
    print("the error rate is :",float(errorCount)/len(testSet))

spamTest()
复制代码

 

posted @   海底淤泥  阅读(150)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2019-07-09 【Java笔记】【Java核心技术卷1】chapter3 D5运算符
2019-07-09 【Java笔记】【Java核心技术卷1】chapter3 D3数据类型
2019-07-09 【Java笔记】【Java核心技术卷1】chapter3 D4变量
2019-07-09 【Java笔记】【Java核心技术卷1】chapter3 D2注释
2019-07-09 【Java笔记】【Java核心技术卷1】chapter3 D1JavaStandard
点击右上角即可分享
微信分享提示