本次案例采用SVM、MNB模型進(jìn)行對比
用Accuracy、F1 Score進(jìn)行評估
話不多說直接上代碼包括數(shù)據(jù)集下載
CSDNhttps://mp.csdn.net/mp_download/manage/download/UpDetailed
# 讀取數(shù)據(jù)并用空字符串替換空值
df1 = pd.read_csv("spamham.csv")
df = df1.where((pd.notnull(df1)), '')
# 將垃圾郵件分類為 0,將非垃圾郵件分類為 1
df.loc[df["Category"] == 'ham', "Category",] = 1
df.loc[df["Category"] == 'spam', "Category",] = 0
# 將數(shù)據(jù)拆分為標(biāo)簽和文本。系統(tǒng)應(yīng)該能夠根據(jù)文本預(yù)測標(biāo)簽
df_x = df['Message']
df_y = df['Category']
# 拆分表格 - 80% 用于訓(xùn)練,20% 用于測試大小
x_train, x_test, y_train, y_test = train_test_split(df_x, df_y, train_size=0.8, test_size=0.2, random_state=4)
# 使用 Tfidf 矢量化器 進(jìn)行特征提取、小寫轉(zhuǎn)換和停用詞去除
tfvec = TfidfVectorizer(min_df=1, stop_words='english', lowercase=True)
x_trainFeat = tfvec.fit_transform(x_train)
x_testFeat = tfvec.transform(x_test)
# SVM 用于建模
y_trainSvm = y_train.astype('int')
classifierModel = LinearSVC()
classifierModel.fit(x_trainFeat, y_trainSvm)
predResult = classifierModel.predict(x_testFeat)
# GNB 用于建模
y_trainGnb = y_train.astype('int')
classifierModel2 = MultinomialNB()
classifierModel2.fit(x_trainFeat, y_trainGnb)
predResult2 = classifierModel2.predict(x_testFeat)
# 計算精度,轉(zhuǎn)換為 int - 解決 - 無法處理未知和二進(jìn)制的混合
y_test = y_test.astype('int')
#actual_Y = y_test.as_matrix()
print("~~~~~~~~~~SVM RESULTS~~~~~~~~~~")
#使用 SVM 的準(zhǔn)確度得分
print("Accuracy Score : {0:.4f}".format(accuracy_score(y_test, predResult)*100))
#使用 SVM 的 FScore
print("F Score: {0: .4f}".format(f1_score(y_test, predResult, average='macro')*100))
cmSVM=confusion_matrix(y_test, predResult)
#“[真陰性假陽性\假陰性真陽性]”
print("Confusion matrix:")
print(cmSVM)
print("~~~~~~~~~~MNB RESULTS~~~~~~~~~~")
#使用 MNB 的準(zhǔn)確度得分
print("Accuracy Score: {0:.4f}".format(accuracy_score(y_test, predResult2)*100))
#使用 MNB 的 FScore
print("F Score:{0: .4f}".format(f1_score(y_test, predResult2, average='macro')*100))
cmMNb=confusion_matrix(y_test, predResult2)
#“[真陰性假陽性\假陰性真陽性]”
print("Confusion matrix:")
print(cmMNb)
運行結(jié)果:?
總結(jié):
標(biāo)稱型:標(biāo)稱型目標(biāo)變量的結(jié)果只在有限目標(biāo)集中取值,如真與假(標(biāo)稱型目標(biāo)變量主要用于分類)文章來源:http://www.zghlxwxcb.cn/news/detail-504826.html
數(shù)值型:數(shù)值型目標(biāo)變量則可以從無限的數(shù)值集合中取值,如0.100,42.001等 (數(shù)值型目標(biāo)變量主要用于回歸分析)文章來源地址http://www.zghlxwxcb.cn/news/detail-504826.html
樸素貝葉斯
優(yōu)點:在數(shù)據(jù)較少的情況下仍然有效,可以處理多類別問題。
缺點:對于輸入數(shù)據(jù)的準(zhǔn)備方式較為敏感。
適用數(shù)據(jù)類型:標(biāo)稱型數(shù)據(jù)
一般流程:
(1) 收集數(shù)據(jù):可以使用任何方法。
(2) 準(zhǔn)備數(shù)據(jù):需要數(shù)值型或者布爾型數(shù)據(jù)。
(3) 分析數(shù)據(jù):有大量特征時,繪制特征作用不大,此時使用直方圖效果更好。
(4) 訓(xùn)練算法:計算不同的獨立特征的條件概率。
(5) 測試算法:計算錯誤率。
(6) 使用算法:一個常見的樸素貝葉斯應(yīng)用是文檔分類??梢栽谌我獾姆诸悎鼍爸惺褂脴?素貝葉斯分類器,不一定非要是文本。
支持向量機
優(yōu)點:泛化錯誤率低,計算開銷不大,結(jié)果易解釋。
缺點:對參數(shù)調(diào)節(jié)和核函數(shù)的選擇敏感,原始分類器不加修改僅適用于處理二類問題。
適用數(shù)據(jù)類型:數(shù)值型和標(biāo)稱型數(shù)據(jù)。
一般流程:
(1) 收集數(shù)據(jù):可以使用任意方法。
(2) 準(zhǔn)備數(shù)據(jù):需要數(shù)值型數(shù)據(jù)。
(3) 分析數(shù)據(jù):有助于可視化分隔超平面。
(4) 訓(xùn)練算法:SVM的大部分時間都源自訓(xùn)練,該過程主要實現(xiàn)兩個參數(shù)的調(diào)優(yōu)。
(5) 測試算法:十分簡單的計算過程就可以實現(xiàn)。
(6) 使用算法:幾乎所有分類問題都可以使用SVM,值得一提的是,SVM本身是一個二類
分類器,對多類問題應(yīng)用SVM需要對代碼做一些修改。
到了這里,關(guān)于機器學(xué)習(xí)——垃圾郵件識別——SVM、MNB模型使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!