《python機器學習基礎教程》筆記(第2章監督學習)(第2部分)

這是《python機器學習基礎教程》的第二章——監督學習第二部分,上一章筆記中說到樸素貝葉斯分類器,這次繼續其他的學習算法

決策樹

決策樹是廣泛應用於迴歸和分類問題的一種模型,其實決策樹就和我一開始認爲的機器學習的策略有點類似,就是很多很多的if判斷語句,來決定最後的結果。學習決策樹,就是學習一系列的if/else問題,使我們可以得到最後的答案。決策樹的模型若不進行一些干預,很容易產生過擬合的狀態,模型會用大量的if/else語句,使得模型在訓練數據上達到100%的效果,但是很明顯,泛化能力將大打折扣。防止決策樹過擬合,也就是控制決策樹的複雜度(越深的樹,對應越多的if/else,決策樹也就越複雜),主要有兩種方法,一是及早停止樹的繼續生長,也叫預剪枝。另外一種是先構造樹,待構造完畢後,刪除或者摺疊信息量較少的節點,這也叫後剪枝

from sklearn.tree import DecisionTreeClassifier,DecisionTreeRegressor

sklearn 中的決策樹實現了預剪枝,我們可以傳入參數 max_depth = x 來控制樹的深度。
至於決策樹的可視化可以使用tree模塊來查看,這裏不多講,因爲可以預見,當樹的深度較大時,查看整個樹的結構本身,幾乎完全看不出什麼有用的信息,還好,我們有方法可以查看樹的某些信息,我們可以直接查看決策樹的某些屬性來查看構建該決策樹時的特性的重要程度,在屬性feature_importances_ 中,這個屬性的值將體現出特徵的重要性,不過要注意,如果某個特徵的feature_importances_屬性值很小,並不能說明該特徵和結果無關,只能說該特徵沒有被決策樹選中,有可能其他特徵以及包含該特徵的信息。另外,feature_importances_始終是一個正值,所以它無法反應特徵影響的是正結果還是負結果。另外決策樹還有一個特點,利用決策樹進行迴歸分析時,結果不能外推,也就是不能用於訓練集意外的數據,那豈不是對於迴歸問題就沒有用了?怎麼說呢,作者說到這是樹預測的特殊性質。若是提供的預測數據超過了訓練數據的範圍,樹則無法進行預測了,但是若是預測數據在訓練數據範圍內,還是可以給出預測結果的,我是這麼理解。
決策樹非常容易過擬合(即使進行了預剪枝),泛化能力較差,所以通常,我們都會使用集成的方法來代替單棵決策樹,也就是下面介紹的森林。

決策樹集成

集成:合併多個機器學習模型來構建更強大的模型,已經證明有兩種集成模型對於大量的分類和迴歸問題都有很好的效果,就是 隨機森林 和 梯度提升決策樹

隨機森林

所謂隨機森林,我們可以這樣理解,前面說到,單個決策樹很容易產生過擬合,那麼我們是不是可以這樣做,構建大量的決策樹,而每個決策樹的預測結果可能都比較好,但是都對部分數據產生過擬合,那麼我們可以對這些樹取平均值,這樣既保證了較好的預測效果,同時降低了過擬合。
爲此我們應該構建大量決策樹,同時要讓每個決策樹都儘量不一樣,這就是隨機森林中隨機的意思。隨機的方式通常有兩種,一是在構造決策樹時選擇數據點,二是隻選擇部分特徵

from sklearn.ensemble import RandomForestRegressor,RandomForestClassifier

其中參數n_estimators 決定樹的個數,另外還有一個max_feature參數,決定每棵樹選特徵的個數最大值,若是max_feature等於n_feature(總特徵數),則相當於沒有添加隨機性,若max_feature = 1,則每棵樹都有很大差異,相當於只是對某單個特徵搜索不同的閥值。值得慶幸的是,默認狀態下的參數通常就會給出較好的結果。

梯度提升迴歸樹(梯度提升決策樹)

雖然名字有迴歸,但是該模型可用於迴歸或者分類問題。
和隨機森林不同,梯度提升回顧樹默認沒有隨機性,而是連續的構造樹,利用一棵樹來糾正前一棵樹的錯誤(這也是名字中迴歸的意思),要說明的是,梯度提升對於參數的設置更敏感,合適的參數將大大提高準確率。
其中參數learning_rate 決定每棵樹糾正前一棵樹的強度,越大意味着越複雜的模型
梯度提升決策樹是監督學習算法中最強大也是最常用的模型之一,它需要我們仔細調參,訓練時間也較長,不過和隨機森林一樣,這兩個方法不需要對數據進行縮放,但是這兩個方法都不適合於高維稀疏矩陣。

核支持向量機(SVM)

這裏將只記錄其用於分類問題的情況,用於分類的在SVC中實現,同樣用於迴歸的在SVR中實現,之前介紹過線性模型用於迴歸和分類,SVM則可以推廣大更復雜的模型上

from sklearn.svm import LinearSVC

我又花了點時間把這一節讀了一遍,很多知識點我發現不結合圖片來看的話會很難說明白(可以預見我又會寫很多的圈話來解釋),所以我不寫了。

在第二章的最後還介紹了下(神經網絡)深度學習,這裏不記錄,其實神經網絡也是一種模型,深度學習感覺是特殊的一種神經網絡。若有精力,放在《深度學習入門基於python的理論和實現》一書的筆記中去好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章