Scikit-Learn機器學習實踐:垃圾簡訊識別

2020-12-27 經理人分享

感謝關注天善智能,走好數據之路↑↑↑

歡迎關注天善智能,我們是專注於商業智能BI,人工智慧AI,大數據分析與挖掘領域的垂直社區,學習,問答、求職一站式搞定!

機器學習與垃圾簡訊識別

前不久,我們使用NLTK的貝葉斯分類模型垃圾對簡訊數據進行機器學習的垃圾簡訊識別。

其實除了使用NLTK,我們還可以使用Scikit-Learn這個集成了諸多機器學習算法的模塊進行上述的實驗。

Scikit-Learn的API設計非常合理和高效,對於初觸機器學習的同學來說非常友好,值得大家嘗試和使用。本人也經常在實驗環境和工作環境中使用scikit-learn進行機器學習的建模。

下面,我們就使用scikit-learn模塊,通過其樸素貝葉斯算法API對簡訊數據進行一次垃圾簡訊的識別。

導入簡訊數據

首先,我們需要對原始的簡訊數據進行處理,導入pandas模塊和jieba模塊。

pandas模塊用於讀取和處理數據,jieba模塊用於對簡訊進行分詞。

接著,我們導入簡訊數據:

查看一下部分簡訊數據:

其中第一列為原始序號,第二列為簡訊的分類,0表示正常簡訊,1表示垃圾簡訊,第三列就是簡訊的正文。

我們只需要關注第二和第三列。

查看一下這個簡訊數據集的形狀:

一共有七十餘萬條簡訊。

對簡訊進行分詞

文本的分類,基本上是基於詞袋模型,也就是一個文本中包含多少詞以及各個詞的頻率。對於英文而已,其天生的句子空格可以很容易的分割單詞出來,但是中文就得先進行分詞處理,也就是將一個完整的中文分割為一個一個詞。

在Python中,有第三方模塊——jieba,結巴分詞來提供對中文的分詞。

我們使用jieba對簡訊的內容進行分詞。

得到的結果如下:

提取特徵和目標數據

我們需要分別提取出特徵數據和目標數據,特徵數據表示輸入的數據,目標數據則是輸入數據的屬性,在這裡,簡訊內容就是特徵數據,簡訊的分類就是目標數據。

X中都是特徵數據,y中都是目標數據,便於下一步的分割訓練集和測試集。

分割訓練集和測試集

使用sklearn的分割模塊對訓練集和測試集進行分割:

提取文本特徵

從文本中提取特徵,需要利用到scikit-learn中的CountVectorizer()方法和TfidfTransformer()方法。

CountVectorizer()用於將文本從標量轉換為向量,TfidfTransformer()則將向量文本轉換為tf-idf矩陣。

建立樸素貝葉斯分類器並進行訓練

樸素貝葉斯是一個很經典同時準確率也很高的機器學習算法,用它來做分類器可以得到很好的效果。

在scikit-learn中,每一個模型都會有一個fit()方法用來模型訓練,有一個predict()方法用來模型預測,在此我們就傳入了訓練特徵和訓練目標進行了模型的訓練。

模型測試

模型訓練好之後,我們可以使用模型的predict()方法來測試與預測數據。

在這之前,我們還得進行另外一步。

因為之前對文本提取特徵只是針對於訓練集,測試集並沒有進行,所以我先對測試集進行文本特徵提取:

再使用predict()方法進行預測:

變量predicted_categories中包含的就是所有的預測結果。

模型評估

scikit-learn模塊中內置了很多模型評估的方法,對於分類問題,我們可以使用accuracy_score()方法,其返回一個數值,得分最高為1。

列印出來的結果顯示:

這個分類器的準確率達到了0.98,比上一次使用NLTK的貝葉斯算法高出了10%,很不錯。

可以列印部分測試的簡訊數據以及預測的結果來看:

基本上正常簡訊和垃圾簡訊都被正確識別出來了。

本文作者:天善智能社區 州的先生

可以加: xtechday (長按複製),進入機器學習愛好者交流群。

歡迎關注天善智能,我們是專注於商業智能BI,人工智慧AI,大數據分析與挖掘領域的垂直社區,學習,問答、求職一站式搞定!

(下載iPhone或Android應用「經理人分享」,一個只為職業精英人群提供優質知識服務的分享平臺。不做單純的資訊推送,致力於成為你的私人智庫。)

相關焦點

  • scikit-learn機器學習簡介
    在本節中,我們將介紹在scikit-learn中所使用的機器學習的基礎知識點,並且給出一個簡單的代碼示例。
  • Python + Scikit-learn 完美入門機器學習指南 ​
    Scikit-learn 是一個非常流行的機器學習工具,它幾乎集成了所有經典的機器學習算法,你只需要幾行代碼,通過簡單的方法類調用,就可以實現原本複雜的機器學習模型。如果你是一名 Python 程式設計師,又正好想學習一下人工智慧技術,scikit-learn 可能是你最好的選擇之一。
  • python機器學習之使用scikit-learn庫
    引言數據分析由一連串的步驟組成,對於其中預測模型的創建和驗證這一步,我們使用scikit-learn這個功能強大的庫來完成。scikit-learning庫python庫scikit-learn整合了多種機器學習算法。
  • 【下載】Scikit-learn作者新書《Python機器學習導論》, 教程+代碼手把手帶你實踐機器學習算法
    Müller同時也是著名機器學習Python包scikit-learn的主要貢獻者 Andreas Muller 和 Reonomy 公司數據科學家 Sarah Guido 的新書《Python機器學習導論》(Introduction to machine learning with Python)從實戰角度出髮帶你用Python快速上手機器學習方法。
  • WePay機器學習反欺詐實踐:Python+scikit-learn+隨機森林
    【編者按】將機器學習算法用於金融領域的一個很好的突破口是反欺詐,在這篇博文中,WePay介紹了支付行業構建機器學習模型應對很難發現的shell selling欺詐的實踐心得。WePay採用了流行的Python、scikit-learn開源學習機器學習工具以及隨機森林算法。以下是文章內容:什麼是shellselling?
  • 直答理工:機器學習——scikit-learn入門
    接下來將從具體介紹機器學習的基本概念及其在scikit-learn中實際操作。訓練組和測試組機器學習運用已有數據組的一些性質去預測新的數據。這就是為什麼一般機器學習中要將數據裂分為兩組,即訓練組和測試組,前者用於學習,後者則用於測試預測性質的準確性。
  • 用 Scikit-learn Pipeline 創建機器學習流程
    本文翻譯自:https://medium.com/vickdata/a-simple-guide-to-scikit-learn-pipelines
  • 極簡Scikit-Learn入門
    100天搞定機器學習寫了三天了機器學習100天|Day1數據預處理100天搞定機器學習|Day2
  • 一遍就懂的Scikit-Learn機器學習分類過程
    本文介紹了常見的機器學習問題。我的主要目的不是再次解決同樣的問題,而是使用Python的Scikit-Learn庫闡述教育目的的機器學習分類過程。在深入研究要解決的問題之前,我們首先理解可能涉及到的重要術語。
  • 資料| 連廣場大媽都聽得懂的「機器學習入門」scikit-learn -17頁...
    from=leiphonecolumn_res0604pmScikit-learn 是基於 Python 的開源機器學習庫,它基於 NumPy 和 SciPy 等科學計算庫,並支持支持向量機、隨即森林、梯度提升樹、K 均值聚類等學習算法。Scikit-learn 目前主要由社區成員自發進行維護,且專注於構建機器學習領域內經廣泛驗證的成熟算法。
  • 看完這篇 scikit-learn學習指南,下節AI課不用上了
    歡迎來到scikit-learn機器學習世界。scikit-learn是一款強大的通用機器學習庫。屬於傳統機器學習的領域,其特點是利用特徵工程,人為對數據進行提煉和清洗。本文將討論以下主題: 機器學習簡介 什麼是scikit-learn?
  • 使用 scikit-learn 玩轉機器學習——集成學習
    6、傳入上述的各個機器學習模型,實例化一個 VotingClassifier 模型,訓練並列印模型精度。換句話說,就是對於特徵集 X,隨機森林只是在行上隨機,Extremely Randomized Trees是在行和列上都隨機,下面我們調用演示下 scikit-learn 中的 Extremely Randomized Trees 的分類器:
  • scikit-learn中的自動模型選擇和複合特徵空間
    使用scikit-learn管道自動組合文本和數字數據有時,機器學習模型的可能配置即使沒有上千種,也有數百種,這使得手工找到最佳配置的可能性變得不可能,因此自動化是必不可少的。在處理複合特徵空間時尤其如此,在複合特徵空間中,我們希望對數據集中的不同特徵應用不同的轉換。
  • Python粉都應該知道的開源機器學習框架:Scikit-learn入門指南
    和其他眾多的開源項目一樣,Scikit-learn目前主要由社區成員自發進行維護。可能是由於維護成本的限制,Scikit-learn相比其他項目要顯得更為保守。這主要體現在兩個方面:一是Scikit-learn從來不做除機器學習領域之外的其他擴展,二是Scikit-learn從來不採用未經廣泛驗證的算法。
  • scikit-learn—樸素貝葉斯
    儘管貝葉斯分類器的假設明顯過於簡單,但它們在許多實際情況下(在著名的文檔分類和垃圾郵件過濾中)都表現良好,它們需要少量的訓練數據來估計必要的參數。(理論證明樸素貝葉斯為何能很好地工作,以及它在哪種數據類型上工作,請參見以下參考資料。)與更複雜的方法相比,樸素貝葉斯學習器和分類器是非常快速的。類條件特徵分布的解耦意味著每個特徵都可以被獨立地估計為一維分布。反過來,這有助於減輕因維數災難而產生的問題。
  • 機器學習之SKlearn(scikit-learn)的K-means聚類算法
    Scikit learn 也簡稱 sklearn, 是機器學習領域當中最知名的 python 模塊之一.Sklearn 包含了很多種機器學習的方式:· Classification 分類· Regression 回歸· Clustering 非監督分類· Dimensionality reduction 數據降維· Model Selection 模型選擇· Preprocessing 數據預處理
  • Scikit-learn估計器分類
    Scikit-learn實現了一系列數據挖掘算法,提供通用編程接口、標準化的測試和調參公局,便於用戶嘗試不同算法對其進行充分測試和查找最優參數值。本次講解數據挖掘通用框架的搭建方法。有了這樣一個框架,後續章節就可以把講解重點放到數據挖掘應用和技術上面。為幫助用戶實現大量分類算法,scikit-learn把相關功能封裝成估計器。估計器用於分類任務,它主要包括兩個函數。
  • Python中的人工智慧入門:在scikit-learn中的建模
    此外,我們將使用seaborn和scikit-plot庫進行可視化,所以我們也將安裝它們。!pip install seaborn scikit-plot使用如此知名的數據集的方便之處在於,我們可以很容易地從很多包中加載數據集,例如,像這樣。
  • 資源 | Scikit-learn中文文檔,一份完美的實踐教程
    Scikit-learn 目前主要由社區成員自發進行維護,且專注於構建機器學習領域內經廣泛驗證的成熟算法。Scikit-learn 項目最早為數據科學家 David Cournapeau 於 2007 年發起的 scikits.learn 項目,且 Scikit 的名字可視為 SciPy Toolkit,即 SciPy 的第三方擴展。
  • 用 Scikit-Learn 和 Pandas 學習線性回歸
    獲取數據,定義問題沒有數據,當然沒法研究機器學習啦。:) 這裡我們用UCI大學公開的機器學習數據來跑線性回歸。也不用我們搞,後面scikit-learn在線性回歸時會先幫我們把歸一化搞定。好了,有了這個csv格式的數據,我們就可以大幹一場了。3. 用pandas來讀取數據我們先打開ipython notebook,新建一個notebook。當然也可以直接在python的交互式命令行裡面輸入,不過還是推薦用notebook。