朴素贝叶斯应用:垃圾邮件分类
生活随笔
收集整理的這篇文章主要介紹了
朴素贝叶斯应用:垃圾邮件分类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 數據準備:收集數據與讀取
2. 數據預處理:處理數據
3. 訓練集與測試集:將先驗數據按一定比例進行拆分。
4. 提取數據特征,將文本解析為詞向量 。
5. 訓練模型:建立模型,用訓練數據訓練模型。即根據訓練樣本集,計算詞項出現的概率P(xi|y),后得到各類下詞匯出現概率的向量 。
6. 測試模型:用測試數據集評估模型預測的正確率。
混淆矩陣
準確率、精確率、召回率、F值
7. 預測一封新郵件的類別。
import csv file_path =r'E:\jupyter\SMSSpamCollectionjsn.txt'#原始的郵件 sms=open(file_path,'r',encoding='utf-8') csv_reader=csv.reader(sms,delimiter='\t') sms_data=[]#郵件的內容 sms_label=[]#郵件的類別 for line in csv_reader:sms_label.append(line[0])sms_data.append(line[1]) sms.close()#對數據預處理 sms_data1 = []#存放處理過的郵件 for line in sms_data:#對郵件的內容進行處理for k in line:if k.isalpha() is False:# 不是字母,發生替換操作:newString = line.replace(k," ")dataList = newString.split(" ")sms_data1.append(dataList)#去掉長度小于3的詞和沒有語義的詞 sms_data2= [] for line in sms_data:dataList = []for i in line:if i != '' and len(i) > 3 and i.isalpha():dataList.append(i)dataString = ' '.join(dataList)sms_data.append(dataString) sms_data =sms_data2##訓練集與測試集:將先驗數據按一定比例進行拆分 from sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test = train_test_split(sms_data2,sms_label,test_size=0.3,random_state=0,stratify=sms_label)#提取數據特征,將文本解析為詞向量 from sklearn.feature_extraction.text import TfidfVectorizer vectorizer=TfidfVectorizer(min_df=2,ngram_range=(1,2),stop_words='english',strip_accents='unicode',norm='l2') X_train=vectorizer.fit_transform(x_train) X_test=vectorizer.transform(x_test)#樸素貝葉斯分類器 from sklearn.navie_bayes import MultinomialNB clf= MultinomialNB().fit(X_train,y_train) y_nb_pred=clf.predict(X_test)#分類結果顯示 from sklearn.metrics import confusion_matrix from sklearn.metrics import classification_report print(y_nb_pred.shape,y_nb_pred)#x_test預測結果 print('nb_confusion_matrix:') cm=confusion_matrix(y_test,y_nb_pred)#混淆矩陣 print(cm) print('nb_classification_report:') cr=classification_report(y_test,y_nb_pred)#主要分類指標的文本報告 print(cr)
?
轉載于:https://www.cnblogs.com/1158Z/p/10078224.html
總結
以上是生活随笔為你收集整理的朴素贝叶斯应用:垃圾邮件分类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 多线程入门试验
- 下一篇: 常见编码格式