機器學習--隨機森林 (Random Forest)

探索的終點將是開始時的起點。 –艾略特

文章內容目錄:

  • 一、隨機森林算法簡介
    • 隨機森林算法背景
    • 隨機森林算法思想
    • 隨機森林算法的特點
    • 隨機森林算法的應用
  • 二、隨機森林的相關知識
    • 信息、熵以及信息增益的概念
    • 決策樹
    • 集成學習
  • 三、隨機森林Python實現
  • 四、參考內容

一、隨機森林的那些事兒~

1、背景

 Leo Breiman和Adele Cutler發展出推論出隨機森林的算法。 而 "Random Forests" 是他們的商標。
  這個術語是1995年由貝爾實驗室的Tin Kam Ho所提出的隨機決策森林(random decision forests)而來的。
  這個方法則是結合 Breimans 的 "Bootstrap aggregating" 想法和 Ho 的"random subspace method"" 以建造決策樹的集合。

上世紀八十年代Breiman等人發明分類樹的算法(Breiman et al. 1984),通過反覆二分數據進行分類或迴歸,計算量大大降低。2001年Breiman把分類樹組合成隨機森林(Breiman 2001a),即在變量(列)的使用和數據(行)的使用上進行隨機化,生成很多分類樹,再彙總分類樹的結果。隨機森林在運算量沒有顯著提高的前提下提高了預測精度。隨機森林對多元公線性不敏感,結果對缺失數據和非平衡的數據比較穩健,可以很好地預測多達幾千個解釋變量的作用(Breiman 2001b),被譽爲當前最好的算法之一(Iverson et al. 2008)。

2、思想

隨機森林系列算法爲集成學習同質個體學習器間不存在強依賴關係(即一系列個體學習器可以並行生成)的代表算法

同質個體學習器:所有的個體學習器是一個種類的,比如都是決策樹個體學習器,都是神經網絡個體學習器

隨機森林,見名思意,很多樹用隨機方式組成一個森林。成百上千顆樹也就構成了森林,這也是隨機森林的主要思想–集成思想的體現。{集成學習思想:對於訓練集數據,通過訓練若干個個體學習器,通過一定的結合策略,形成一個強學習器。}

其中,隨機採用,隨機且又放回;森林中的很多樹爲決策樹

每棵決策樹都是一個分類器(分類問題),對於一個輸入樣本,N棵樹分別進行判斷,會有N個分類結果。隨機森林集成了所有的分類投票結果,將投票次數最多的類別爲預測結果,這就是一種最簡單的 Bagging 思想。

3、隨機森林算法特點

  • a. 極好的準確率
  • b. 很好的應用於大數據集
  • c. 具有很好的抗噪聲能力
  • d.對數據集的適應能力強:既能處理離散型數據,也能處理連續型數據
  • e. 能夠處理很高維度(feature很多)的數據,並且不用做特徵選擇
  • f. 在創建隨機森林時,對內部生成誤差是一種無偏估計
  • g. 在訓練過程中,能夠檢測到feature間的互相影響
  • h. 對於缺省值問題也能夠獲得很好得結果
  • i. ……

4、實際應用

美國政府用隨機森林算法 預測 恐怖分子
相同思路可以預測歹徒、不法分子等(畢竟人命,正確率再高也有一定風險);
常用於,預測疾病的風險和病患者的易感性;
市場營銷中,用於市場營銷模擬的建模,統計客戶來源,保留和流失;等。

二、隨機森林的相關知識

隨機森林看起來是很好理解,但是要完全搞明白它的工作原理,需要很多機器學習方面相關的基礎知識。在本文中,我們簡單談一下,而不逐一進行贅述,如果有同學不太瞭解相關的知識,可以參閱其他博友的一些相關博文或者文獻。

  1、信息、熵以及信息增益的概念

  這三個基本概念是決策樹的根本,是決策樹利用特徵來分類時,確定特徵選取順序的依據。理解了它們,決策樹你也就瞭解了大概。

  引用香農的話來說,信息是用來消除隨機不確定性的東西。當然這句話雖然經典,但是還是很難去搞明白這種東西到底是個什麼樣,可能在不同的地方來說,指的東西又不一樣。對於機器學習中的決策樹而言,如果帶分類的事物集合可以劃分爲多個類別當中,則某個類(xi)的信息可以定義如下:

  I(x)用來表示隨機變量的信息,p(xi)指是當xi發生時的概率。

  熵是用來度量不確定性的,當熵越大,X=xi的不確定性越大,反之越小。對於機器學習中的分類問題而言,熵越大即這個類別的不確定性更大,反之越小。

  信息增益在決策樹算法中是用來選擇特徵的指標,信息增益越大,則這個特徵的選擇性越好。

  這方面的內容不再細述,感興趣的同學可以看 信息&熵&信息增益 這篇博文。

  2、決策樹

  決策樹是一種樹形結構,其中每個內部節點表示一個屬性上的測試,每個分支代表一個測試輸出,每個葉節點代表一種類別。常見的決策樹算法有C4.5、ID3和CART。

  3、集成學習 

  集成學習通過建立幾個模型組合的來解決單一預測問題。它的工作原理是生成多個分類器/模型,各自獨立地學習和作出預測。這些預測最後結合成單預測,因此優於任何一個單分類的做出預測。

  隨機森林是集成學習的一個子類,它依靠於決策樹的投票選擇來決定最後的分類結果。你可以在這找到用python實現集成學習的文檔:Scikit
  
附:集成學習框架

這裏寫圖片描述

三、隨機森林Python實現

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
import numpy as np
'''
鳶尾花數據集及元數據,
data:150個 元素,每個元素四個數值;
target:花卉類別,
0:Setosa  1:Versicolour  2:Virginica
'''
iris = load_iris()                                            #加載鳶尾花全部數據
df = pd.DataFrame(iris.data, columns=iris.feature_names)      #轉換類型
df['data_train'] = np.random.uniform(0, 1, len(df)) <= .75    #產生150個[0,1)的數,並與0.75做判斷
df['data_class'] = pd.Categorical.from_codes(iris.target, iris.target_names)   #種類
head = df.head()     #前五行
print(head)          #輸出看看效果

train, test = df[df['data_train']==True], df[df['data_train']==False]          #train is true;test is flase

features = df.columns[:4]

clf = RandomForestClassifier(n_jobs=2)
y, _ = pd.factorize(train['data_class'])
clf = clf.fit(train[features], y)
preds = iris.target_names[clf.predict(test[features])]
pre = clf.predict(test[features])

cross = pd.crosstab(test['data_class'], preds, rownames=['actual'], colnames=['preds'])
print(cross)

數據head:

   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  \
0                5.1               3.5                1.4               0.2   
1                4.9               3.0                1.4               0.2   
2                4.7               3.2                1.3               0.2   
3                4.6               3.1                1.5               0.2   
4                5.0               3.6                1.4               0.2   

   data_train data_class  
0        True     setosa  
1        True     setosa  
2        True     setosa  
3        True     setosa  
4        True     setosa  

結果:

preds       setosa  versicolor  virginica
actual                                   
setosa          13           0          0
versicolor       0          16          1
virginica        0           0         11

四、參考內容

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