求問隨機森林演算法的簡單實現過程?
03-02
隨機森林(Random forest)指的是利用多棵樹對樣本進行訓練並預測的一種分類器。 並且其輸出的類別是由個別樹輸出的類別的眾數而定。在機器學習中有一個地位很重要的包scikit-learn可實現隨機森林演算法。
原理:(隨機森林的分類預測和回歸預測sklearn.ensemble.RandomForestRegressor方法)
(1)給定訓練集S,測試集T,特徵維數F。確定參數:使用到的CART的數量t,每棵樹的深度d,每個節點使用到的特徵數量f,終止條件:節點上最少樣本數s,節點上最少的信息增益m,對於第1-t棵樹,i=1-t:(2)從S中有放回的抽取大小和S一樣的訓練集S(i),作為根節點的樣本,從根節點開始訓練(3)如果當前節點上達到終止條件,則設置當前節點為葉子節點,如果是分類問題,該葉子節點的預測輸出為當前節點樣本集合中數量最多的那一類c(j),概率p為c(j)占當前樣本集的比例;如果是回歸問題,預測輸出為當前節點樣本集各個樣本值的平均值。然後繼續訓練其他節點。如果當前節點沒有達到終止條件,則從F維特徵中無放回的隨機選取f維特徵。利用這f維特徵,尋找分類效果最好的一維特徵k及其閾值th,當前節點上樣本第k維特徵小於th的樣本被劃分到左節點,其餘的被劃分到右節點。繼續訓練其他節點。
(4)重複(2)(3)直到所有節點都訓練過了或者被標記為葉子節點。(5)重複(2),(3),(4)直到所有CART都被訓練過。隨機森林的簡單實現過程如下:一、 開發環境、編譯環境:PyCharm Community Edition 2016.2.3Python2.7.10二、 所用庫及安裝方法:pandas[python自帶]sklearn:命令行pip install sklearn;如果沒有安裝pip,先使用easy_install pip安裝pip;如果在MAC上沒有許可權,使用sudo pip install sklearn;三、 代碼介紹
1. 使用pandas讀取本地excel的訓練集和測試集,將屬性集賦給X_train和Y_train;將要預測的集合賦給X_test和Y_test;2. 使用DictVectorizer對數據進行規範化、標準化3. 生成RandomForestRegressor對象,並將訓練集傳入fit方法中進行訓練4. 調用predict函數進行預測,並將結果存入y_predict變數中;5. 使用mean_squared_error、score方法輸出MSE、NMSE值對擬合度、穩定度進行分析;輸出feature_importance,對影響最終結果的屬性進行分析;6. 詳細代碼見附錄四、 附錄# coding:utf-8import pandas as pddata_train = pd.read_excel("/Users/xiaoliu/Desktop/data_train.xlsx")
X_train = data_train[["CPI", "GDP", "PPI", "AJR", "BJFJ", "FBDR", "PCFD", "PCFDED", "BDR"]]y_train = data_train["FJ"]data_test = pd.read_excel("/Users/xiaoliu/Desktop/data_test.xlsx")X_test = data_test[["CPI", "GDP", "PPI", "AJR", "BJFJ", "FBDR", "PCFD", "PCFDED", "BDR"]]y_test = data_test["FJ"]from sklearn.feature_extraction import DictVectorizervec = DictVectorizer(sparse=False)X_train = vec.fit_transform(X_train.to_dict(orient="records"))X_test = vec.transform(X_test.to_dict(orient="records"))from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor()rf.fit(X_train,y_train)y_predict = rf.predict(X_test)print "predict value:",y_predictfrom sklearn.metrics import mean_squared_errorprint "MSE:", mean_squared_error(y_test, y_predict)print "NMES:",rf.score(X_test, y_test)print rf.feature_importances_推薦閱讀:
※AppleScript類自然語言與非英語語法設計
※學編程有哪些好點的網站?
※求余和取模
※阻擋你學會Haskell最大的兩個問題是什麼?
※如何進行系統性的編程學習?