基于樸素貝葉斯自動(dòng)過(guò)濾垃圾廣告
交叉訓(xùn)練
交叉訓(xùn)練簡(jiǎn)單點(diǎn)說(shuō)就是在同一份樣本中選擇部分作為測(cè)試樣本,剩余的作為訓(xùn)練樣本。這里一共有5574條數(shù)據(jù),抽取1000條作為測(cè)試樣本(testdata)
trainset = [i for i in range(len(txt_class))]
testset = []
testclass = []
for i in range(1000):
number = int(random.choice(trainset))
testset.a(chǎn)ppend(words_vec(dataset[number], wordlist))
testclass.a(chǎn)ppend(txt_class[number])
trainset.remove(number)
trainMat = [];
trainclass = []
for i in trainset:
trainMat.a(chǎn)ppend(words_vec(dataset[i], wordlist))
trainclass.a(chǎn)ppend(txt_class[i])
在這段代碼中,trainset是訓(xùn)練樣本的編號(hào),testset是測(cè)試樣本的數(shù)據(jù)集,testclass表示測(cè)試樣本是否為垃圾廣告,trainmat是訓(xùn)練樣本數(shù)據(jù)集,trainclass表示訓(xùn)練樣本是否為垃圾廣告。
構(gòu)造訓(xùn)練器
現(xiàn)在來(lái)計(jì)算P(y1|x),P(y2|x)
def train(trainmatrix,traincategory):
numword=len(trainmatrix[0])
numtrain=len(trainmatrix)
pa=sum(traincategory)/float(len(trainmatrix))
p0num,p1num=ones(numword),ones(numword)
p0dem,p1dem=2.0,2.0
for i in range(numtrain):
if traincategory[i]==1:
p1num+=trainmatrix[i]
p1dem+=sum(trainmatrix[i])
else:
p0num+=trainmatrix[i]
p0dem+=sum(trainmatrix[i])
p1vect= log(p1num / p1dem)
p0vect = log(p0num / p0dem)
return p1vect,p0vect,pap0num,p1num表示在類(lèi)別0和類(lèi)別1下各個(gè)單詞出現(xiàn)的總數(shù);p1dem,p0dem表示類(lèi)別0和類(lèi)別1的單詞總數(shù);p0vect和p1vect代表P(xi|y0)以及P(xi|y1);這里進(jìn)行Log變化避免下溢;同時(shí)進(jìn)行了拉普拉斯平滑處理,即p0num,p1num的初始變量為ones()。p1dem,p0dem則為2(一共有兩種結(jié)果,垃圾廣告和有用廣告,所以為2)
構(gòu)造分類(lèi)器
def classify(vec,p0vec,p1vec,pclass1):
p1=sum(vec*p1vec)+log(pclass1)
p0=sum(vec*p0vec)+log(1.0-pclass1)
if p1>p0:
return 1
else:
return 0
驗(yàn)證訓(xùn)練模型精確度
由于在進(jìn)行交叉訓(xùn)練時(shí)測(cè)試樣本是隨機(jī)抽取的,所以訓(xùn)練準(zhǔn)確度一直都不一樣,為了讓結(jié)果具有代表性,再構(gòu)造一個(gè)循環(huán),進(jìn)行n次訓(xùn)練,取誤差的平均值。
def mul(num):
totalerror = 0
for times in range(num):
#通過(guò)交叉訓(xùn)練獲得訓(xùn)練樣本和測(cè)試樣本
p1vect, p0vect, pa = train(trainMat, trainclass)
error=0
for i in range(len(testset)):
if classify(array(testset[i]), p0vect, p1vect, pa) 。 testclass[i]:
error += 1
print('the accurate is', 1 - error / float(len(testset)))
totalerror+=error / float(len(testset))
print('after %d times the accurate of bayes is %f'%(num,1-float(totalerror)/num))
這個(gè)模型的準(zhǔn)確度還是非常高的,平均精確度達(dá)到93.64%。
詞袋模型
請(qǐng)大家思考一個(gè)問(wèn)題,在垃圾廣告中有沒(méi)有一些詞會(huì)頻繁提到呢?如果頻繁的出現(xiàn)這個(gè)詞,是不是代表這則廣告為垃圾廣告的概率要增加?現(xiàn)在為止只是將某一個(gè)詞語(yǔ)是否出現(xiàn)當(dāng)作一個(gè)特征,這被稱(chēng)為詞集模型。如果一個(gè)詞出現(xiàn)次數(shù)不止一次,將它出現(xiàn)的次數(shù)作為一個(gè)特征就稱(chēng)為詞袋模型。這兩個(gè)模型的不同點(diǎn)在于詞語(yǔ)出現(xiàn)與否和出現(xiàn)次數(shù),將函數(shù)word_vec稍稍修改即可:
def words_vec(txt,wordlist):
returnvec=[0]*len(wordlist)
for word in txt:
if word in wordlist:
returnvec[list(wordlist).index(word)]=1+returnvec[list(wordlist).index(word)]
return returnvec
基于詞袋模型的平均準(zhǔn)確度高達(dá)93.63%;盡管比詞集模型小了0.01%;但是其中一個(gè)準(zhǔn)確率達(dá)到了95.5%;兩個(gè)模型都是很不錯(cuò)的呢。
如果是中文的話(huà)使用jieba就可以分詞噢。

發(fā)表評(píng)論
登錄
手機(jī)
驗(yàn)證碼
立即登錄即可訪(fǎng)問(wèn)所有OFweek服務(wù)
還不是會(huì)員?免費(fèi)注冊(cè)
忘記密碼請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
-
機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹(shù)機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-
存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-
長(zhǎng)安汽車(chē)母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-
豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-
字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-
員工持股爆雷?廣汽埃安緊急回應(yīng)
-
中國(guó)“智造”背后的「關(guān)鍵力量」
-
小米汽車(chē)研發(fā)中心重磅落地,寶馬家門(mén)口“搶人”
最新活動(dòng)更多
-
即日-9.1立即下載>> 【限時(shí)下載】ADI中國(guó)三十周年感恩回饋助力企業(yè)升級(jí)!
-
即日-9.16點(diǎn)擊進(jìn)入 >> 【限時(shí)福利】TE 2025國(guó)際物聯(lián)網(wǎng)展·深圳站
-
10月23日立即報(bào)名>> Works With 開(kāi)發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月27日立即報(bào)名>> 【工程師系列】汽車(chē)電子技術(shù)在線(xiàn)大會(huì)
-
12月18日立即報(bào)名>> 【線(xiàn)下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專(zhuān)題
- 1 阿里首位程序員,“掃地僧”多隆已離職
- 2 先進(jìn)算力新選擇 | 2025華為算力場(chǎng)景發(fā)布會(huì)暨北京xPN伙伴大會(huì)成功舉辦
- 3 宇樹(shù)機(jī)器人撞人事件的深度剖析:六維力傳感器如何成為人機(jī)安全的關(guān)鍵屏障
- 4 清華跑出具身智能獨(dú)角獸:給機(jī)器人安上眼睛和大腦,融資近20億
- 5 特朗普要求英特爾首位華人 CEO 辭職
- 6 踢館大廠(chǎng)和微軟,剖析WPS靈犀的AI實(shí)用主義
- 7 騰訊 Q2 財(cái)報(bào)亮眼:AI 已成第二增長(zhǎng)曲線(xiàn)
- 8 谷歌吹響AI沖鋒號(hào),AI還有哪些機(jī)會(huì)
- 9 蘋(píng)果把身家押在Siri上:一場(chǎng)輸不起的自我革命
- 10 共探合作新機(jī)遇!江門(mén)市新會(huì)區(qū)(深圳)“AI + 機(jī)器人” 產(chǎn)業(yè)對(duì)接會(huì)成功舉辦