多項式樸素貝葉斯學(xué)習(xí)——垃圾郵件分類器

讀入文件存入dataframe

  • readfiles(path): 對path下的每一個文件, 跳過文件頭部無用信息, 以line+'\n'的格式存儲在message中,每讀完一個文件便返回該文件完整路徑path和message

  • dataFrameFromDirectory(path,classification),調(diào)用readfiles,返回DataFrame格式文件, 其中包含index=path[], message=message[], class=傳遞的分類信息

  • 帶有 yield 的函數(shù)不再是一個普通函數(shù)即寒,而是一個生成器generator哆料,可用于迭代, 迭代從上次yield出去的地方開始

import os
import io
import numpy
from pandas import DataFrame
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

def readFiles(path):
    for root,dirnames,filenames, in os.walk(path):#返回path下的所有文件夾和文件
        for filename in filenames:
            path=os.path.join(root,filename)    #創(chuàng)建path

            inBody=False    #標記頭部信息
            lines=[]
            f=io.open(path,'r',encoding='latin1')#打開文件
            for line in f:
                if inBody:
                    lines.append(line)
                elif line=='\n':    #先把頭部信息跳過,找到第一個空行 表明頭部信息已經(jīng)結(jié)束
                    inBody=True
            f.close()
            message='\n'.join(lines)
            yield path,message

def dataFrameFromDirectory(path,classification):
    rows=[]
    index=[]
    for filename,message in readFiles(path):
        rows.append({'message':message,'class':classification})
        index.append(filename)

    return DataFrame(rows,index=index)

data=DataFrame({'message':[],'class':[]})

data = data.append(dataFrameFromDirectory('C:\\Users\\Sitch\\Downloads\\DataScienceCourse\\emails\\spam', 'spam'))
data = data.append(dataFrameFromDirectory('C:\\Users\\Sitch\\Downloads\\DataScienceCourse\\emails\\ham', 'ham'))

data.head()


計算樸素貝葉斯

  • CountVectorizer是特征數(shù)值計算類

  • CountVectorizer.fit_transform函數(shù)將文本中的詞語轉(zhuǎn)換為詞頻矩陣return,矩陣元素a[i][j] 表示j詞在第i個文本下的詞頻恋捆。

  • MultinomialNB是先驗為多項式分布的樸素貝葉斯類

  • MultinomialNB.fit(x,y)根據(jù)x,y進行擬合,x={array-like,sparse martix}[i][j],i組j維向量,y=array-like[i]

vectorizer=CountVectorizer()
counts=vectorizer.fit_transform(data['message'].values)#將單詞轉(zhuǎn)換為哈希數(shù),然后計算個數(shù)

classifier=MultinomialNB()
targets=data['class'].values    #分類信息
classifier.fit(counts,targets)

測試分類器

examples=['Free Money now!!!!',"Hi,I'm Sitch,how about make a friend?"]
example_counts=vectorizer.transform(examples)
predictions=classifier.predict(example_counts)

劃分訓(xùn)練集和測試集再實驗

train_data=data.sample(frac=0.6)
test_data=data[~data.index.isin(train_data.index)]

vectorizer=CountVectorizer()
counts=vectorizer.fit_transform(train_data['message'].values)
classifier=MultinomialNB()
targets=train_data['class'].values
classifier.fit(counts,targets)

i=0
SC=0
test_counts=vectorizer.transform(test_data['message'].values)
predictions=classifier.predict(test_counts)
for i in range(0,predictions.size):
    if test_data['class'].values[i]==predictions[i]:
        SC+=1
print("測試集成功率 ",end=' : ')
print(SC/predictions.size)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末溉瓶,一起剝皮案震驚了整個濱河市急鳄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌堰酿,老刑警劉巖疾宏,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異触创,居然都是意外死亡坎藐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門哼绑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岩馍,“玉大人,你說我怎么就攤上這事抖韩≈鳎” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵茂浮,是天一觀的道長双谆。 經(jīng)常有香客問我,道長席揽,這世上最難降的妖魔是什么顽馋? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮幌羞,結(jié)果婚禮上寸谜,老公的妹妹穿的比我還像新娘。我一直安慰自己新翎,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布住练。 她就那樣靜靜地躺著地啰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讲逛。 梳的紋絲不亂的頭發(fā)上亏吝,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天,我揣著相機與錄音盏混,去河邊找鬼蔚鸥。 笑死惜论,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的止喷。 我是一名探鬼主播馆类,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弹谁!你這毒婦竟也來了乾巧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤预愤,失蹤者是張志新(化名)和其女友劉穎沟于,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體植康,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡旷太,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了销睁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片供璧。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖榄攀,靈堂內(nèi)的尸體忽然破棺而出嗜傅,到底是詐尸還是另有隱情,我是刑警寧澤檩赢,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布吕嘀,位于F島的核電站,受9級特大地震影響贞瞒,放射性物質(zhì)發(fā)生泄漏偶房。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一军浆、第九天 我趴在偏房一處隱蔽的房頂上張望棕洋。 院中可真熱鬧,春花似錦乒融、人聲如沸掰盘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愧捕。三九已至,卻和暖如春申钩,著一層夾襖步出監(jiān)牢的瞬間次绘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留邮偎,地道東北人管跺。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像禾进,于是被迫代替她去往敵國和親豁跑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容