Learning Journey3.1 - Naive Bayes 实例(classifying email)

第三周DAY1

Naive Bayes

前两天没写博客,懈怠了。今天把这个例子一次性看完!
框架如下:

Prepare
Tokenizing text 分割文本
Test
cross validation 交叉验证

Prepare

这一部分的内容,上一节有较详细的解释,这里只是稍微提一下重要的东西,便于读者的阅读,以及我的回顾。
直接看代码和注释吧。

mytxt='This sentence is written by Neal.Xu.'  	#输入一个字符串
mytxt.split()	#将字符串分割成一个list清单

为了便于计算比较,将所有清单中的大写字母换为小写字母。
字符串可以直接使用lower(),但这里是list,所以要用以下格式。
在这里插入图片描述

Test

cross validation的主要思想,就是把dataset(原始数据)分为两个部分,
train set(训练集), validation set(验证集)。
从字面上理解,就是先用训练集得到一个模型,然后去验证。

由于我是使用python3,所以修改了下代码。同时为了避免一个Unicode的错误,我删掉了一半的数据集后,就解决了。

def textParse(bigString):    #将字符串转为全是小写的单词列表
    import re
    listOfTokens = re.split(' ', bigString)
    return [tok.lower() for tok in listOfTokens if len(tok) > 2] 
    
def bagOfWords2VecMN(vocabList, inputSet):
    returnVec = [0]*len(vocabList)
    for word in inputSet:
        if word in vocabList:
            returnVec[vocabList.index(word)] += 1
    return returnVec

def spamTest():
    docList=[]; classList = []; fullText =[]
    for i in range(1,11):
        wordList = textParse(open('email/spam/%d.txt' % i).read())
        docList.append(wordList)
        fullText.extend(wordList)
        classList.append(1)
        wordList = textParse(open('email/ham/%d.txt' % i).read())
        docList.append(wordList)
        fullText.extend(wordList)
        classList.append(0)
    vocabList = createVocabList(docList)#create vocabulary
    trainingSet = list(range(20)); testSet=[]           #create test set
    for i in range(10):  #随机选10个,放入训练集
        randIndex = int(random.uniform(0,len(trainingSet)))
        testSet.append(trainingSet[randIndex])
        del(trainingSet[randIndex])  
    trainMat=[]; trainClasses = []
    for docIndex in trainingSet:#train the classifier (get probs) trainNB0
        trainMat.append(bagOfWords2VecMN(vocabList, docList[docIndex]))
        trainClasses.append(classList[docIndex])
    p0V,p1V,pSpam = trainNB0(array(trainMat),array(trainClasses))
    errorCount = 0
    for docIndex in testSet:        #classify the remaining items
        wordVector = bagOfWords2VecMN(vocabList, docList[docIndex])
        if classifyNB(array(wordVector),p0V,p1V,pSpam) != classList[docIndex]:
            errorCount += 1
            print( "classification error",docList[docIndex])
    print ('the error rate is: ',float(errorCount)/len(testSet))

思路:

  1. 创建空的训练集和测试集;
  2. 随机选择email,放进训练集;
  3. 用之前建立的trainNB0函数,计算概率;
  4. 与测试集比较,计算出错率。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值