随机森林-集成学习方法(分类)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?隨機森林-集成學習方法(分類)
1?集成學習方法
集成學習通過建立幾個模型組合的來解決單一預測問題。它的工作原理是生成多個分類器/模型,各自獨立地學習和作出預測。這些預測最后結合成單預測,因此優于任何一個單分類的做出預測。
2 隨機森林
在機器學習中,隨機森林是一個包含多個決策樹的分類器,并且其輸出的類別是由個別樹輸出的類別的眾數而定。
在決策樹中,一個標準的決策樹會根據每維特征對預測結果的影響程度進行排序,進而決定不同的特征從上至下構建分裂節點的順序,如此以來,所有在隨機森林中的決策樹都會受這一策略影響而構建的完全一致,從而喪失的多樣性。所以在隨機森林分類器的構建過程中,每一棵決策樹都會放棄這一固定的排序算法,轉而隨機選取特征。
3 學習算法
根據下列算法而建造每棵樹:
(1)用N來表示訓練用例(樣本)的個數,M表示特征數目;
(2)輸入特征數目m,用于確定決策樹上一個節點的決策結果,其中m應遠小于M;
?(3)從N個訓練用例(樣本)中以隨機有放回抽樣的方式,取樣N次,形成一個訓練集(即bootstrap取樣),并用未抽到的用例(樣本)作預測,評估其誤差。
(4)對于每一個節點,隨機選擇m個特征,決策樹上每個節點的決定都是基于這些特征確定的。根據這m個特征,計算其最佳的分裂方式。
隨機抽樣訓練集目的:如果不進行隨機抽樣,每棵樹的訓練集都一樣,那么最終訓練出的樹分類結果也是完全一樣的
有返回抽樣的目的:如果不是有放回的抽樣,那么每棵樹的訓練樣本都是不同的,都是沒有交集的,也就是說每棵樹訓練出來都是有很大的差異的,而隨機森林最后分類取決于多棵樹(弱分類器)的投票表決。
4?集成學習API
class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None, bootstrap=True, random_state=None) 隨機森林分類器
n_estimators:integer,optional(default = 10) 森林里的樹木數量
criteria:string,可選(default =“gini”)分割特征的測量方法
max_depth:integer或None,可選(默認=無)樹的最大深度
bootstrap:boolean,optional(default = True)是否在構建樹時使用放回抽樣
5 案例
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.feature_extraction import DictVectorizer from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import GridSearchCV # 1.加載數據 datas = pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")# 2.處理數據,找出目標值和特征值 x = datas[['pclass','age','sex']] y = datas['survived']# 2.1利用pandas.DataFrame.fillna方法處理缺失數據,inplace=True直接修改原對象 x['age'].fillna(x['age'].mean(),inplace=True)# 3 分割數據集為訓練集合測試集 x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)# 4.特征工程的抽取 特征->類別->one_hot編碼 # 當特征里面是類別的信息,應該要one-hot編碼,否則計算機不知道怎么去計算 dict = DictVectorizer(sparse=False) # 將x_train(DataFrame類型)轉換為字典,關鍵字orient='records' 時形成[{column -> value}, … , {column -> value}]的結構 # 整體構成一個列表,內層是將原始數據的每行提取出來形成字典 x_train = dict.fit_transform(x_train.to_dict(orient='records')) print(dict.get_feature_names()) x_test = dict.transform(x_test.to_dict(orient='records'))# 5.隨機森林預測(使用超參數調優,所以在此不添加任何參數) rfcls = RandomForestClassifier()params = {"n_estimators":[120,200,300,500,800,1200],"max_depth":[5,10,15,20,25]} # 6網格搜索與交叉驗證 gc = GridSearchCV(rfcls,param_grid=params,cv=10) gc.fit(x_train,y_train) print("查看最好的結果:",gc.best_score_) print("查看選擇的參數模型:",gc.best_params_) print("查看最好的參數模型:",gc.best_estimator_) print("每個超參數每次交叉驗證的結果:", gc.cv_results_)6 隨機森林的優缺點
優點:在當前所有算法中,具有極好的準確率;能夠有效地運行在大數據集上;能夠處理具有高維特征的輸入樣本,而且不需要降維;能夠評估各個特征在分類問題上的重要性;對于缺省值問題也能夠獲得很好得結果。
隨機森林沒有缺點,有的就是選不到合適的參數和特征值。參數選擇和特征值準備共同決定最終的預測效果。
?
總結
以上是生活随笔為你收集整理的随机森林-集成学习方法(分类)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hive - 可优化的 10 个地方及详
- 下一篇: 2022年计算机考研学校,2022计算机