Pyhton實現Logistics與SVM在垃圾郵件識別中的較量

點擊標題下藍色字可快速關注

前面我們介紹了線性、非線性SVM算法的原理和公式推導,也陸續的對Apriori、KNN等機器學習算法進行了分享,本周我們將介紹另一種比較常用的分類算法:Logistics回歸模型,並在垃圾郵件識別的場景中比較Logistics回歸與SVM分類的效果和性能,以幫助大家更好的學習、掌握和運用該算法(小貼士:自己動手,豐知足識。訓練、測試集及Python代碼下載見文章末處)。

如內容有不足之處,歡迎給我們留言,共同探討學習。

1.Logistics回歸介紹

Logistic回歸模型是一種概率模型,其結果發生的變量(因變量)取值必須是二分或者多項分類,主要適合用於隨訪研究病例對照研究等。下面主要介紹二元logistics回歸,即因變量y只取0和1兩個值情况下的回歸模型。

學習前需要先了解一下sigmoid函數,也稱為S型生長曲線,其函數表達式和圖形如下所示:

Sigmoid函數為連續、單調遞增的函數,當x趨近於負無窮的時候,y趨近於0,當x趨近於正無窮的時候,y趨近於1,值域為[0,1]。由於概率值的範圍也是[0,1],故可以與概率分布聯繫起來。

令y=1表示事件發生,y=0表示事件不發生,並將事件發生的概率記為P,則其與自變量X1,X2,…..,Xp之間的回歸模型可以寫為:

事件不發生的概率可以表示為:

經過數學變化可以得到事件的發生比取對數的形式為:

定義logit(p) = ln[p/(1-p)]為Logistics變化,且:

這樣就得到了logit模型的函數表達式,再利用極大似然估計來求方程的參數,在求似然函數最大值的時候,使用梯度下降法或牛頓迭代等最優算法進行迭代更新。由於有關該推導過程的資料存在較多,本文不再進行叙述。

下面將具體介紹在相同語料和特徵選擇的條件下,使用python實現Logistics回歸SVM算法垃圾郵件的識別進行比較。

2.python實現垃圾郵件識別

首先搜集到目前使用較多的郵件語料,共包含5574條郵件文本數據,包括4827條正常的郵件和747條垃圾郵件數據,標籤分別為hamspam。為了建模的需要,進一步將正常郵件標記為,垃圾郵件標記為1,最終得到一個Excel格式的郵件語料庫smsspamcollection.xlsx。

然後使用pandas庫將郵件語料以DataFrame的形式讀入內存中,並對郵件文本進行去標點符號及分詞等預處理,得到如下郵件文本內容數據:

接下來進行特徵提取,這裏將所有單詞都作為特徵引入到模型,通過使用TF-IDF方法計算每個關鍵詞的權重,建立文本的向量特徵模型,則每一條郵件文本內容都可以轉化為一個特徵向量,進而就可以利用機器學習進行訓練和預測了。Scikit-learn庫是基於python的機器學習庫,其包括分類、降維、回歸、聚類和模型選擇等相關數據挖掘算法。使用CountVectorizer和TfidfTransformer函數來計算關鍵詞的權重,將郵件文本轉化為一個5574x8709的特徵矩陣

在進行建模之前需要將郵件樣本進行分割,用大部分郵件來進行模型訓練,留下小部分用來對模型進行測試。設置分割參數為0.25,保留25%的樣本作為測試集。然後在使用相同訓練集的情况下,分別構建Logistics回歸模型和SVM模型,並使用相同的測試集進行分類測試,得到分類結果和耗時情况如下:

Logistics回歸模型:

根據得到的混淆矩陣和計算的相關指標可以看到使用Logistics回歸模型進行分類,識別垃圾郵件的精度較高為0.993,但對垃圾郵件的召回率較低,為144/(49+144)=0.746,意思就是測試集中一共有193封垃圾郵件,但被正確識別為垃圾郵件的只有144封。綜合精確率和召回率得到該模型的f1-score為0.852,從模型構建到預測總共耗時0.123s

SVM模型:

從結果看到構建的SVM模型,識別垃圾郵件的精度較高為0.983,對垃圾郵件的召回率為172/(21+172)=0.891。綜合精確率和召回率得到該模型的f1-score為0.935,高於前面的Logistics回歸模型,說明該模型分類效果較好,但該模型共耗時50.19s,明顯高於Logistics回歸模型。

3.總結

Logistics回歸模型和SVM模型其實是兩種比較類似的算法,主要區別在於Logistics回歸通過非線性映像,對不同數據點的權重進行了調整,而SVM主要是只考慮支持向量上的點,即與分類最相關的點來學習分類器。通常會根據樣本和特徵的數量來對這兩種分類算法進行選擇,例如當樣本較多,特徵較少時,有足够的樣本來訓練複雜的模型,此時可以選擇Logistics回歸或線性SVM算法。

如需下載本文所用的數據集和代碼,請關注“易研数据”公眾號(微信號:ersdata)並發送“logistics”獲取。

易研數據

微信號:ersdata

長按識別二維碼關注

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180413G1G4B900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券