Learning Journey3.1
第三周DAY1
Naive Bayes
前两天没写博客,懈怠了。今天把这个例子一次性看完!
框架如下:
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))
思路:
- 创建空的训练集和测试集;
- 随机选择email,放进训练集;
- 用之前建立的trainNB0函数,计算概率;
- 与测试集比较,计算出错率。