Random Forest算法參數解釋及調優

文章介紹了如何對隨機森林模型進行參數調優

原文來自:http://www.analyticsvidhya.com/blog/2015/06/tuning-random-forest-model/

為什么要調整機器學習算法?

一個月以前,我在kaggle上參加了一個名為TFI的比賽。 我第一次提交的結果在50%。 我不懈努力在特征工程上花了超過2周的時間,勉強達到20%。 出乎我意料的事是,在調整機器學習算法參數之后,我能夠達到前10%。

這是這就是機器學習算法參數調優的重要性。 隨機森林是在工業界中使用的最簡單的機器學習工具之一。 在我們以前的文章中,我們已經向您介紹了隨機森林和和CART模型進行了對比 。 機器學習工具包正由于這些算法的表現而被人所熟知。。

隨機森林是什么?

隨機森林是一個集成工具,它使用觀測數據的子集和變量的子集來建立一個決策樹。 它建立多個這樣的決策樹,然后將他們合并在一起以獲得更準確和穩定的預測。 這樣做最直接的事實是,在這一組獨立的預測結果中,用投票方式得到一個最高投票結果,這個比單獨使用最好模型預測的結果要好。

?我們通常將隨機森林作為一個黑盒子,輸入數據然后給出了預測結果,無需擔心模型是如何計算的。這個黑盒子本身有幾個我們可以擺弄的杠桿。 每個杠桿都能在一定程度上影響模型的性能或資源 -- 時間平衡。 在這篇文章中,我們將更多地討論我們可以調整的杠桿,同時建立一個隨機林模型。

調整隨機森林的參數/杠桿

隨機森林的參數即可以增加模型的預測能力,又可以使訓練模型更加容易。 以下我們將更詳細地談論各個參數(請注意,這些參數,我使用的是Python常規的命名法):

1.使模型預測更好的特征

主要有3類特征可以被調整,以改善該模型的預測能力:

A. max_features:

隨機森林允許單個決策樹使用特征的最大數量。 Python為最大特征數提供了多個可選項。 下面是其中的幾個:

  1. Auto/None :簡單地選取所有特征,每顆樹都可以利用他們。這種情況下,每顆樹都沒有任何的限制。

  2. sqrt :此選項是每顆子樹可以利用總特征數的平方根個。 例如,如果變量(特征)的總數是100,所以每顆子樹只能取其中的10個。“log2”是另一種相似類型的選項。

  3. 0.2:此選項允許每個隨機森林的子樹可以利用變量(特征)數的20%。如果想考察的特征x%的作用, 我們可以使用“0.X”的格式。

max_features如何影響性能和速度?

增加max_features一般能提高模型的性能,因為在每個節點上,我們有更多的選擇可以考慮。 然而,這未必完全是對的,因為它降低了單個樹的多樣性,而這正是隨機森林獨特的優點。 但是,可以肯定,你通過增加max_features會降低算法的速度。 因此,你需要適當的平衡和選擇最佳max_features。

B. n_estimators:

在利用最大投票數或平均值來預測之前,你想要建立子樹的數量。 較多的子樹可以讓模型有更好的性能,但同時讓你的代碼變慢。 你應該選擇盡可能高的值,只要你的處理器能夠承受的住,因為這使你的預測更好更穩定。

C. min_sample_leaf:

如果您以前編寫過一個決策樹,你能體會到最小樣本葉片大小的重要性。 葉是決策樹的末端節點。 較小的葉子使模型更容易捕捉訓練數據中的噪聲。 一般來說,我更偏向于將最小葉子節點數目設置為大于50。在你自己的情況中,你應該盡量嘗試多種葉子大小種類,以找到最優的那個。

2.使得模型訓練更容易的特征

有幾個屬性對模型的訓練速度有直接影響。 對于模型速度,下面是一些你可以調整的關鍵參數:

A. n_jobs:

這個參數告訴引擎有多少處理器是它可以使用。 “-1”意味著沒有限制,而“1”值意味著它只能使用一個處理器。 下面是一個用Python做的簡單實驗用來檢查這個指標:

%timeit 
model = RandomForestRegressor(n_estimator = 100, oob_score = TRUE,n_jobs = 1,random_state =1)
model.fit(X,y)
Output  ———-  1 loop best of 3 : 1.7 sec per loop%timeit 
model = RandomForestRegressor(n_estimator = 100,oob_score = TRUE,n_jobs = -1,random_state =1)
model.fit(X,y)
Output  ———-  1 loop best of 3 : 1.1 sec per loop 

“%timeit”是一個非常好的功能,他能夠運行函數多次并給出了最快循環的運行時間。 這出來非常方便,同時將一個特殊的函數從原型擴展到最終數據集中。

B. random_state:

此參數讓結果容易復現。 一個確定的隨機值將會產生相同的結果,在參數和訓練數據不變的情況下。 我曾親自嘗試過將不同的隨機狀態的最優參數模型集成,有時候這種方法比單獨的隨機狀態更好。

C. oob_score:

這是一個隨機森林交叉驗證方法。 它和留一驗證方法非常相似,但這快很多。 這種方法只是簡單的標記在每顆子樹中用的觀察數據。 然后對每一個觀察樣本找出一個最大投票得分,是由那些沒有使用該觀察樣本進行訓練的子樹投票得到。

下面函數中使用了所有這些參數的一個例子:

model = RandomForestRegressor(n_estimator = 100, oob_score = TRUE, n_jobs = -1,random_state =50,max_features = "auto", min_samples_leaf = 50)model.fit(x, y)

通過案例研究學習

我們以在以前的文章中經常提到泰坦尼克號為例。 讓我們再次嘗試同樣的問題。 這種情況下的目標是,了解調整隨機森林參數而不是找到最好的特征。 試試下面的代碼來構建一個基本模型:

from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import roc_auc_score
import pandas as pd
x = pd.read_csv("train.csv")
y = x.pop("Survived")
model =  RandomForestRegressor(n_estimator = 100 , oob_score = TRUE, random_state = 42)
model.fit(x(numeric_variable,y)
print "AUC - ROC : ", roc_auc_score(y,model.oob_prediction)AUC - ROC:0.7386

這是一個非常簡單沒有參數設定的模型。 現在讓我們做一些參數調整。 正如我們以前討論過,我們有6個關鍵參數來調整。 我們有一些Python內置的的網格搜索算法,它可以自動調整所有參數。在這里讓我們自己動手來實現,以更好了解該機制。 下面的代碼將幫助您用不同的葉子大小來調整模型。

練習:試試運行下面的代碼,并在評論欄中找到最佳葉片大小。

sample_leaf_options = [1,5,10,50,100,200,500]for leaf_size in sample_leaf_options :model = RandomForestRegressor(n_estimator = 200, oob_score = TRUE, n_jobs = -1,random_state =50,max_features = "auto", min_samples_leaf = leaf_size)model.fit(x(numeric_variable,y)print "AUC - ROC : ", roc_auc_score(y,model.oob_prediction)

備注

就像是隨機森林,支持向量機,神經網絡等機器學習工具都具有高性能。 他們有很高的性能,但用戶一般并不了解他們實際上是如何工作的。 不知道該模型的統計信息不是什么問題,但是不知道如何調整模型來擬合訓練數據,這將會限制用戶使用該算法來充分發揮其潛力。 在一些后續的文章中,我們將討論其他機器學習算法,像支持向量機,GBM和neaural networks。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456901.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456901.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456901.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

浮動問題

- 浮動很多時候是用來解決多列顯示的問題- 浮動之后變為inline-block(浮動文本必須制定width)- 浮動之后會脫離文檔流- 浮動后的元素不會存在margin的垂直方向的問題 - 浮動之后會影響周圍元素的布局- 浮動不會超出父級元素- 浮動效果只會影響后面的元素(包括自己的…

Servlet3.0新特性

1 Servlet3.0新特性概述 使用要求:MyEclipse10.0或以上版本,發布到Tomcat7.0或以上版本,創建JavaEE6.0應用!  Servlete3.0的主要新特性如下三部分:    使用WebServlet、WebFilter、WebListener三個注解來替代we…

計算機系統遵循,自考《計算機系統結構》第10章精講

第十章 新型計算機系統結構本章只作一般要求,了解基本原理和概況。一、計算模型分類(識記)計算模型是描述如何在計算機中完成計算的一種概念性方法,不涉及硬件和軟件細節。它給出了完成計算所必須遵循的基本規則。計算機系統結構是有關計算模型的一個具體…

re模塊的使用

import re # pip 包管理工具r re.match函數 原型:match(pattern, string, flags0) pattern: 匹配的正則表達式 string: 要匹配的字符串 flags:標志位,用于控制正則表達式的匹配方式,值如下 re.I 忽略大小寫 re.L 做本地話識別 re.M 多行匹配&…

Random Forest隨機森林概述

引言 在機器學習中,隨機森林由許多的決策樹組成,因為這些決策樹的形成采用了隨機的方法,因此也叫做隨機決策樹。隨機森林中的樹之間是沒有關聯的。當測試數據進入隨機森林時,其實就是讓每一顆決策樹進行分類,最后取所…

走出半生,望你歸來仍是程序員

在世二十七年,自認為積累了一點人生經驗。思索著當你還在你娘胎的日子里,整理一番留給以后的你,當作你以后漫漫人生路上的參考。我保證,倘若哪天你發現某條不對或者跟你的想法不一樣,你能敞開心扉與我交談,…

kd tree學習筆記 (最近鄰域查詢)

https://zhuanlan.zhihu.com/p/22557068 http://blog.csdn.net/zhjchengfeng5/article/details/7855241 KD樹在算法競賽中主要用來做各種各樣的平面區域查詢,包含則累加直接返回,相交則繼續遞歸,相離的沒有任何貢獻也直接返回。可以處理圓&am…

正則表達式的元素符

import reprint("----------匹配單個字符與數字----------") r . 匹配除換行符以外的任意字符 [0123456789] []是字符集合,表示匹配方括號中所有所包含的任意一個字符 [liuwang] [] 匹配‘l,i,u 中任意一個字符…

圖像影音型計算機主板選擇什么,電腦主板型號在哪里看? 每日一答

電腦主板型號在哪里看?想要看主板的型號其實非常簡單,一般來說,主板上都會有一個專門的身份標識,位于PCI-E顯卡插槽之間,比如下方這張圖,就清晰地寫明了MAXIMUS X APEX的標識,熟悉的玩家一眼就能…

使用葉神模擬器無法訪問本機服務器的問題(報錯:java.net.ConnectException: failed to connect to /127.0.0.1 (port 5000) )

最近打算用夜神模擬器來和本機服務器做一些信息交互的功能,但是服務器搭建好了,用葉神模擬器卻無法訪問。折騰了大半天才發現原來是模擬器的問題。 具體過程如下: 搭建好服務器后,在本機上訪問“http://127.0.0.1:5000/”&#…

NSObject協議中方法:description 和 debugDescription

description基本概念 1.NSLog("%", objectA);這會自動調用objectA的description方法來輸出ObjectA的描述信息. 2.description方法默認返回對象的描述信息(默認實現是返回類名和對象的內存地址) 3.description方法是基類NSObject 所帶的方法,因為其默認實現是返回類名…

re模塊的深入

import re 字符串切割str1 "allen is a good man" print(str1.split()) print(re.split((r" "),str1)) re.finditer函數 原型:finditer(pattern, string, flags0) pattern: 匹配的正則表達式 string: 要匹配的字符串 flags:標志位&…

身份證

<?php defined(IN_IA) or exit(Access Denied);class check {// $num為身份證號碼&#xff0c;$checkSex&#xff1a;1為男&#xff0c;2為女&#xff0c;不輸入為不驗證public function checkIdentity($num, $checkSex ) {// 不是15位或不是18位都是無效身份證號if (strl…

鼓勵參與計算機考試宣傳標語,誠信考試的宣傳標語(精選60條)

誠信考試的宣傳標語(精選60條)誠信考試&#xff0c;做文明公民&#xff0c;既是時代需要&#xff0c;也是做人的基本準則。下面是小編收集的誠信考試的宣傳標語(精選60條)&#xff0c;歡迎閱讀。1、讓舞弊遠離校園&#xff0c;讓誠信常駐心中2、刻苦學習&#xff0c;認真做人3、…

初學大數據之如何選擇機器學習算法

最近在國外網站看到一篇不錯的文章&#xff0c;所以就翻譯過來給大家分享一下。主要介紹初學者怎么選擇機器學習算法,希望對各位初學者有幫助。 原文如下: 一個初學者面臨各種機器學習算法的典型問題是“我應該使用哪種算法&#xff1f;”問題的答案取決于許多因素&#xff0…

Django查詢 – id vs pk

當編寫django查詢時&#xff0c;可以使用id / pk作為查詢參數。 Object.objects.get(id1) Object.objects.get(pk1) pk代表主鍵(primary key)&#xff0c; pk更加獨立于實際的主鍵字段&#xff0c;即不必關心主鍵字段是否被稱為id或object_id或其他。 如果您具有不同主鍵字…

Tomcat的Session管理(三)

摘要&#xff1a;PersistentManager與StandardManager的異同。 之前兩篇關于session的文章主要討論了session相關的創建、查詢、過期處理。而我們查看源碼的時候都是默認實現是StandardManager類&#xff0c;實際上實現也可以是PersistentManager類&#xff0c;下面我們就查看下…

計算機基礎的函數公式,大學計算機基礎 excle 公式與函數

《大學計算機基礎 excle 公式與函數》由會員分享&#xff0c;可在線閱讀&#xff0c;更多相關《大學計算機基礎 excle 公式與函數(32頁珍藏版)》請在人人文庫網上搜索。1、,.,場景1,發布日期:2011.11.09,新入職場,經理說&#xff1a; 小張&#xff0c;以后工資發放的事情就交給…

穩定和性能如何兼顧?58大數據平臺的技術演進與實踐

作者&#xff5c;趙健博 編輯&#xff5c;尚劍 本文將為你分享58大數據平臺在最近一年半內技術演進的過程&#xff0c;包括&#xff1a;58大數據平臺目前的整體架構是怎么樣的&#xff1b;最近一年半的時間內我們面臨的問題、挑戰以及技術演進過程&#xff1b;以及未來的規劃。…

Random Forest算法簡介

轉自JoinQuant量化課堂 一、相關概念 分類器&#xff1a;分類器就是給定一個樣本的數據&#xff0c;判定這個樣本屬于哪個類別的算法。例如在股票漲跌預測中&#xff0c;我們認為前一天的交易量和收盤價對于第二天的漲跌是有影響的&#xff0c;那么分類器就是通過樣本的交易量…