02 樸素貝葉斯 垃圾郵件分類

2021-10-10 23:47:07 字數 4077 閱讀 1932

【需求說明】

chinesespam.xlsx為郵件資料集,stopwords.txt為停用詞資料集;

根據現有資料集,採用jieba進行分詞切分,並通過sklearn進行特徵處理;

由於樣本特徵是二元離散值或者很稀疏的多元離散值,採用先驗為伯努利分布的樸素貝葉斯進行分類;

one-host編碼,將所有的詞轉換為詞庫以及對應的矩陣形式(samples, vocab大小5915)

texts: 來自email_frame text字段值

resutl: 返回one-hot編碼矩陣

'''def

transformtexttosparsematrix

(texts)

:# 構建詞袋資料結構

vectorizer = countvectorizer(binary=

false

) vectorizer.fit(texts)

# 獲取字典型詞典列表,格式: ab字元的索引為3,cd字元的索引為2

vocabulary = vectorizer.vocabulary_

print

("there are "

,len

(vocabulary)

," word features"

) vector = vectorizer.transform(texts)

result = pd.dataframe(vector.toarray())

# .toarray()將結果轉換為稀疏矩陣表示方法

print

(result.head(3)

)

keys =

values =

for key,value in vectorizer.vocabulary_.items():

df = pd.dataframe(data =

)print

(df.head(3)

)# df按照value列進行排序,其實就是按照key對應的value索引值排序,再獲取key的詞作為列名

colnames = df.sort_values(

"value")[

"key"

].values

result.columns = colnames

return result

textmatrix = transformtexttosparsematrix(emailframe[

"text"])

print

(textmatrix.head(3)

)

#統計單詞,並計算單詞出現的總次數

features = pd.dataframe(textmatrix.

(sum

, axis=0)

)extractedfeatures =

[features.index[i]

for i in

range

(features.shape[0]

)if features.iloc[i,0]

>5]

textmatrix = textmatrix[extractedfeatures]

print

("there are "

, textmatrix.shape[1]

," word features"

)#劃分訓練資料集和測試資料集 2:8比例

train, test, trainlabel, testlabel = train_test_split(textmatrix, emailframe[

"type"

], test_size =

0.2)

#由於樣本特徵是二元離散值或者很稀疏的多元離散值,所以使用bernoullinb

clf = bayes.bernoullinb(alpha=

1, binarize=

true

)model = clf.fit(train, trainlabel)

#打分model.score(test, testlabel)

0.7333333333333333

model.predict(test)
array([『ham』, 『ham』, 『ham』, 『ham』, 『ham』, 『ham』, 『ham』, 『ham』, 『spam』,

『ham』, 『ham』, 『ham』, 『ham』, 『spam』, 『ham』, 『ham』, 『spam』, 『ham』,

『ham』, 『ham』, 『ham』, 『ham』, 『ham』, 『ham』, 『ham』, 『spam』, 『ham』,

『ham』, 『ham』, 『ham』], dtype=』

樸素貝葉斯 垃圾郵件的識別過濾

建立單詞表 defcreatevocablist dataset vocabset set 建立乙個空的集合 for document in dataset vocabset vocabset set document union of the two sets return list vocabs...

樸素貝葉斯演算法在垃圾郵件過濾中的應用

由於最近在寫一篇關於大資料分類的 吐槽一下 導師天天催 所以在圖書館借了幾本有關大資料的書籍。今天看 new internet 大資料探勘 感興趣的可以看一下 中提到垃圾郵件過濾,讓我聯想到昨天在1280社群看到一道名企面試題,在遊戲實時交流中,怎麼過濾那些廣告?當時想到的是關鍵詞過濾,也沒細想。其...

樸素貝葉斯分類

1 貝葉斯分類是一類分類演算法的總稱,這類演算法均以貝葉斯定理為基礎,故統稱為貝葉斯分類。2 樸素貝葉斯的思想基礎是這樣的 對於給出的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,就認為此待分類項屬於哪個類別。通俗來說,就好比這麼個道理,你在街上看到乙個黑人,我問你你猜這哥們 來的,...