機器學習分析方法有哪些

  近二十年來,機器學習方法的發展為我們的生活帶來許多便利。智慧網路搜尋、語音識別,乃至無人超市、無人駕駛汽車等,依託於機器學習方法的新事物正迅速地在生活中普及。想了解更多機器學習分析方法的資訊嗎,和小編一起看看吧!

  機器學習分析方法一、有監督意味著需要人工標註,需要人為的給文字一個類標籤

  比如我有5000條商品評論,如果我要把這些評論分成積極和消極兩類。那我就可以先從裡面選2000條評論,然後對這2000條資料進行人工標註,把這2000條評論標為“積極”或“消極”。這“積極”和“消極”就是類標籤。

  假設有1000條評論被標為“積極”,有1000條評論被標為“消極”。***兩者數量相同對訓練分類器是有用的,如果實際中數量不相同,應該減少和增加資料以使得它們數量相同***

  機器學習分析方法二、之後就要選擇特徵

  特徵就是分類物件所展現的部分特點,是實現分類的依據。我們經常會做出分類的行為,那我們依據些什麼進行分類呢?

  舉個例子,如果我看到一個年輕人,穿著新的正裝,提著嶄新的公文包,快步行走,那我就會覺得他是一個剛入職的職場新人。在這裡面,“嶄新”,“正裝”,“公文包”,“快步行走”都是這個人所展現出的特點,也是我用來判斷這個人屬於哪一類的依據。這些特點和依據就是特徵。可能有些特徵對我判斷更有用,有些對我判斷沒什麼用,有些可能會讓我判斷錯誤,但這些都是我分類的依據。

  我們沒辦法發現一個人的所有特點,所以我們沒辦法客觀的選擇所有特點,我們只能主觀的選擇一部分特點來作為我分類的依據。這也是特徵選擇的特點,需要人為的進行一定選擇。

  而在情感分類中,一般從“詞”這個層次來選擇特徵。

  比如這句話“手機非常好用!”,我給了它一個類標籤“Positive”。裡面有四個詞***把感嘆號也算上***,“手機”,“非常”,“好用”,“!”。我可以認為這4個詞都對分類產生了影響,都是分類的依據。也就是無論什麼地方出現了這四個詞的其中之一,文字都可以被分類為“積極”。這個是把所有詞都作為分類特徵。

  同樣的,對這句話,我也可以選擇它的雙詞搭配***Bigrams***作為特徵。比如“手機 非常”,“非常 好用”,“好用 !”這三個搭配作為分類的特徵。以此類推,三詞搭配***Trigrams***,四詞搭配都是可以被作為特徵的。

  機器學習分析方法三、再之後特徵要降維

  特徵降維說白了就是減少特徵的數量。這有兩個意義,一個是特徵數量減少了之後可以加快演算法計算的速度***數量少了當然計算就快了***,另一個是如果用一定的方法選擇資訊量豐富的特徵,可以減少噪音,有效提高分類的準確率。

  所謂資訊量豐富,可以看回上面這個例子“手機非常好用!”,很明顯,其實不需要把“手機”,“非常”,“好用”,“!”這4個都當做特徵,因為“好用”這麼一個詞,或者“非常 好用”這麼一個雙詞搭配就已經決定了這個句子是“積極”的。這就是說,“好用”這個詞的資訊量非常豐富。

  那要用什麼方法來減少特徵數量呢?答案是通過一定的統計方法找到資訊量豐富的特徵。

  統計方法包括:詞頻***Term Frequency***、文件頻率***Document Frequency***、互資訊***Pointwise Mutual Information***、資訊熵***Information Entropy***、卡方統計***Chi-Square***等等。

  在情感分類中,用詞頻選擇特徵,也就是選在語料庫中出現頻率高的詞。比如我可以選擇語料庫中詞頻最高的2000個詞作為特徵。用文件頻率選特徵,是選在語料庫的不同文件中出現頻率最高的詞。而其它三個,太高階冷豔,表示理解得還不清楚,暫且不表。。。

  不過意思都是一樣的,都是要通過某個統計方法選擇資訊量豐富的特徵。特徵可以是詞,可以是詞組合。

  機器學習分析方法四、把語料文字變成使用特徵表示

  在使用分類演算法進行分類之前,第一步是要把所有原始的語料文字轉化為特徵表示的形式。

  還是以上面那句話做例子,“手機非常好用!”

  如果在NLTK 中,如果選擇所有詞作為特徵,其形式是這樣的:[ {“手機”: True, “非常”: True, “好用”: True, “!”: True} , positive]

  如果選擇雙詞作為特徵,其形式是這樣的:[ {“手機 非常”: True, “非常 好用”: True, “好用 !”: True} , positive ]

  如果選擇資訊量豐富的詞作為特徵,其形式是這樣的:[ {“好用”: True} , positive ]

  ***NLTK需要使用字典和陣列兩個資料型別,True 表示對應的元素是特徵。至於為什麼要用True 這樣的方式,我也不知道。。。反正見到的例子都是這樣的。。。有空再研究看是不是可以不這樣的吧***

  無論使用什麼特徵選擇方法,其形式都是一樣的。都是[ {“特徵1”: True, “特徵2”: True, “特徵N”: True, }, 類標籤 ]

  機器學習分析方法五、把用特徵表示之後的文字分成開發集和測試集,把開發集分成訓練集和開發測試集

  機器學習分類必須有資料給分類演算法訓練,這樣才能得到一個***基於訓練資料的***分類器。

  有了分類器之後,就需要檢測這個分類器的準確度。

  根據《Python 自然語言處理》的方法,資料可以分為開發集合測試集。開發集專門用於不斷調整和發現最佳的分類演算法和特徵維度***數量***,測試集應該一直保持“不被汙染”。在開發集開發完畢之後,再使用測試集檢驗由開發集確定的最佳演算法和特徵維度的效果。具體如圖:

  圖2:開發集和測試集***摘自《Natural Language Processing with Python》***

  一般來說,訓練集的數量應該遠大於測試集,這樣分類演算法才能找出裡面的規律,構建出高效的分類器。

  用回前面的例子。假設2000條已經標註了積極和消極的評論資料,開發集可以是隨機的1600條,測試集是剩餘的隨機400條。然後開發集中,訓練集可以是隨機的1400條,開發測試集是200條。

  機器學習分析方法六、用不同的分類演算法給訓練集構建分類器,用開發測試集檢驗分類器的準確度

  這個時候終於可以使用各種高階冷豔的機器學習演算法啦!

  我們的目標是:找到最佳的機器學習演算法。

  可以使用樸素貝葉斯***NaiveBayes***,決策樹***Decision Tree***等NLTK 自帶的機器學習方法。也可以更進一步,使用NLTK 的scikit-learn 介面,這樣就可以呼叫scikit-learn 裡面的所有,對,是所有機器學習演算法了。我已經忍不住的淚流滿面。

  其實方法很容易。只要以下五步。

  1. 僅僅使用開發集***Development Set***。

  2. 用分類演算法訓練裡面的訓練集***Training Set***,得出分類器。

  3. 用分類器給開發測試集分類***Dev-Test Set***,得出分類結果。

  4. 對比分類器給出的分類結果和人工標註的正確結果,給出分類器的準確度。

  5. 使用另一個分類演算法,重複以上三步。

  在檢驗完所有演算法的分類準確度之後,就可以選出最好的一個分類演算法了。

  在選出最好的分類演算法之後,就可以測試不同的特徵維度對分類準確度的影響了。一般來說,特徵太少則不足以反映分類的所有特點,使得分類準確率低;特徵太多則會引入噪音,干擾分類,也會降低分類準確度。所以,需要不斷的測試特徵的數量,這樣才可以得到最佳的分類效果。

  機器學習分析方法七、選擇出開發集中最佳的分類演算法和特徵維度,使用測試集檢驗得出情感分類的準確度

  在終於得到最佳分類演算法和特徵維度***數量***之後,就可以動用測試集。

  直接用最優的分類演算法對測試集進行分類,得出分類結果。對比分類器的分類結果和人工標註的正確結果,給出分類器的最終準確度。

  用Python 進行機器學習及情感分析,需要用到兩個主要的程式包:nltk 和 scikit-learn

  nltk 主要負責處理特徵提取***雙詞或多詞搭配需要使用nltk 來做***和特徵選擇***需要nltk 提供的統計方法***。