1. 程式人生 > >基於隨機森林的分類與迴歸

基於隨機森林的分類與迴歸

一、隨機森林基本概念

隨機森林(Random forest) 是一種組成式的有監督學習方法。在隨機森林中,我們同時生成多個預測模型,並將模型的結果彙總以提升預測模型的準確率。

隨機森林演算法(預測和迴歸)主要包括一下三個方面:
1.從原始資料隨機有放回的抽取N個樣本單元,生成決策或者回歸樹。

2.在每一個節點隨機抽取m<M個變數,將其作為分割節點的候選變數。每一個節點處變數數應該一致。

3.最終對每一顆決策或者回歸樹的結果進行整合,生成預測值。

二、隨機森林的優勢

1.在沒有驗證資料集的時候,可以計算袋外預測誤差(生成樹時沒有用到的樣本點所對應的類別可由生成的樹估計,與其真實類別比較即可得到袋外預測)。

2.隨機森林可以計算變數的重要性。

3.計算不同資料點之間的距離,從而進行非監督分類。

三、隨機森林R語言例項

如果資料集的響應變數為類別型,則隨機森林根據預測變數預測一個分類結果;如果資料集的響應變數為連續型,則隨機森林根據預測變數進行迴歸。

1.利用隨機森林預測一個分類結果

載入程式包

library(randomForest)
library(MASS)

載入資料

data(fgl)
str(fgl)

為保證結果大家運算結果一致 設定隨機種子

set.seed(17)

構建隨機森林模型 mtry引數表徵預設在每個節點抽取的變數數

fgl.rf<- randomForest(type ~ .,data=fgl, mtry=2, importance=TRUE,
   do.trace=100)
fgl.rf

混淆矩陣結果可以看出隨機森林對各類別的分類效果。

採用十折交叉驗證對比隨機森林與支援向量機的誤差。十折交叉驗證:用來測試精度。是常用的精度測試方法。將資料集分成十分,輪流將其中9份做訓練1份做測試,10次的結果的均值作為對演算法精度的估計,一般還需要進行多次10倍交叉驗證求均值,例如10次10倍交叉驗證,更精確一點。

library(ipred)
set.seed(131)
error.RF<- numeric(10)
for(iin 1:10) error.RF[i] <-
   errorest(type ~ ., data = fgl,
   model = randomForest, mtry = 2)$error
summary(error.RF)

library(e1071)
set.seed(563)
error.SVM<- numeric(10)
for(i in 1:10) error.SVM[i] <-
   errorest(type ~ ., data = fgl,
   model = svm, cost = 10, gamma = 1.5)$error
summary(error.SVM)

從結果中可以看出隨機森林的誤差要小於支援向量機模型

檢視變數重要性

imp<- as.data.frame(fgl.rf$importance)
head(imp)
attach(imp)
par(mfrow= c(2, 2))
for(i in 1:4){
   data <-imp[order(imp[,i],decreasing=T),]
   plot(data[,i],type = “h”, main =paste(“Measure”, i), ylab=””, xaxt=”n”)
  text(data[,i],rownames(data),cex=0.6,pos=4,col=”red”)
}

由上圖可以看出不同變數在預測不同類別時的重要性

2.基於隨機森林迴歸分析

首先,我們先注意一下隨機森林迴歸和隨機森林分類的差別:(1)預設mtry是p/3而不是p1/2,其中p表示預測變數數(2)預設節點大小為5而不是1(3)只有一個測量變數的重要性。

data(Boston)
set.seed(1341)
BH.rf<- randomForest(medv ~ ., Boston)
BH.rf

由上圖可以看出隨機森林迴歸模型結果的方差解釋量

對比隨機森林預測結果、多元迴歸預測結果和實際值的差異

forest.pred<- predict(BH.rf, Boston)
fit<- lm(medv ~ ., Boston)
lm.pred<-predict(fit,Boston)
data<- data.frame(Boston$medv, forest.pred1, lm.pred1)
head(data)
library(car)
png(filename= “lm.png”, width = 900, height = 500)
scatterplotMatrix(data)
dev.off()

由上圖可以看出隨機森林結果要優於多元迴歸模型。

3.隨機森林中需要注意的地方:

3.1合理確定決策樹的數量。

3.2合理確定每個節點隨機抽取的變數數

3.3決策樹數量越多,結果越穩定。

作者:吳健 中國科學院大學 R語言、統計學愛好者,尤其擅長R語言和Arcgis在生態領域的應用分享

個人公眾號:統計與程式語言 

∑編輯 | Gemini

來源 | 網路

演算法數學之美微信公眾號歡迎賜稿

稿件涉及數學、物理、演算法、計算機、程式設計等相關領域,經採用我們將奉上稿酬。

投稿郵箱:[email protected]

相關推薦

基於隨機森林分類迴歸

一、隨機森林基本概念隨機森林(Random forest) 是一種組成式的有監督學

基於隨機森林的化合物活性二分類模型

#匯入依賴包 import pandas as pd import numpy as np from rdkit import Chem, DataStructs from rdkit.Chem

利用scikit-learn庫實現隨機森林分類演算法

自己實踐一下在本章學到一些方法   首先實踐核心的部分,怎麼實現一個分類模型,並通過驗證曲線去優化模型,最後使用訓練出來的模型進行預測 In [20]:

區分識別機器學習中的分類迴歸

預測建模是關於學習從輸入到輸出的函式對映的問題,這個對映稱作函式逼近。 分類是給一個樣本預測離散型類別標籤的問題。 迴歸是給一個樣本預測連續輸出量的問題。 本教程分為以下 5 個部分: 1. 函式逼近 2. 分類

機器學習中分類迴歸的解決區別

機器學習可以解決很多問題,其中最為重要的兩個是 迴歸與分類。 這兩個問題怎麼解決, 它們之間又有什麼區別呢? 以下舉幾個簡單的例子,以給大家一個概念 1. 線性迴歸 迴歸分析常用於分析兩個變數X和Y 之間的關係。 比如 X=房子大小 和 Y=房價 之間的關係, X=(公園人流量,公園門票票價

一份非常全面的機器學習分類迴歸演算法的評估指標彙總

本文是《機器學習寶典》第 3 篇,讀完本文你能夠掌握分類與迴歸演算法的評估指標。 PS:文末附有練習題 讀完機器學習演算法常識之後,你已經知道了什麼是欠擬合和過擬合、偏差和方差以及貝葉斯誤差。在這篇給大家介紹一些機器學習中離線評估模型效能的一些指標。 當我們訓練得到

scikit-learn /sklearn : 整合學習 之 隨機森林分類器(Forests of Randomized Tree)官方檔案翻譯

整合學習 之 隨機森林分類器 整合學習的定義和分類。 隨機森林法的定義和分類。 隨機森林sklearn.ensemble.RandomForestClassifier()引數分類和含義。 附註:Bias和Variance的含義和關係。 一、整合學習 (Ensemble

機器學習中分類迴歸問題的區別聯絡

分類和迴歸問題之間存在重要差異。 從根本上說,分類是關於預測標籤,而回歸是關於預測數量。 我經常看到諸如以下問題: 如何計算迴歸問題的準確性? 像這樣的問題是沒有真正理解分類和迴歸之間的差異以及試圖衡量的準確度的症狀。 在本教程中,您將發現分類和迴歸之間的差異。

機器學習~分類迴歸異同

一篇來著外文網站的關於分類與迴歸異同的解釋。 Difference Between Classification and Regression in Machine Learning Fundamentally, classification is about predi

分類迴歸

https://www.zhihu.com/question/21329754 如何區分類與迴歸,看的不是輸入,而是輸出的連續與否 分類和迴歸的區別在於輸出變數的型別。 定量輸出稱為迴歸,或者說是連續變數預測; 定性輸出稱為分類,或者說是離散變數預測。 舉個例子: 預測明天的氣溫是

解密SVM系列(五):matlab下libsvm的簡單使用:分類迴歸

本節簡單介紹一下libsvm的使用方法。關於libsvm似乎曾經使用過,那個時候主要用libsvm進行。當時還翻譯過關於 介紹與分類實驗 下載下來的libsvm其實包含好多個平臺的工具箱軟體,c++,matlab,java,python都有。他們的函

分類迴歸樹(CART,Classification And Regression Tree)

分類迴歸樹也屬於一種決策樹。 分類迴歸樹是一棵二叉樹,且每個非葉子節點都有兩個孩子。 構建決策樹時通常採用自上而下的方法,在每一步選擇一個最好的屬性來分裂。 "最好" 的定義是使得子節點中的訓練集儘

CART分類迴歸樹的原理實現

// cart.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include<vector> #include<set> #include<algorithm> #include<iostream> #include

資料探勘十大經典演算法--CART: 分類迴歸

一、決策樹的型別  在資料探勘中,決策樹主要有兩種型別: 分類樹 的輸出是樣本的類標。 迴歸樹 的輸出是一個實數 (例如房子的價格,病人呆在醫院的時間等)。 術語分類和迴歸樹 (CART) 包含了上述兩種決策樹, 最先由Breiman 等提出.分類樹和迴歸樹有些共同點和不同

分類迴歸——CART分類迴歸以及Python實現

CART分類與迴歸樹本質上是一樣的,構建過程都是逐步分割特徵空間,預測過程都是從根節點開始一層一層的判斷直到葉節點給出預測結果。只不過分類樹給出離散值,而回歸樹給出連續值(通常是葉節點包含樣本的均值),另外分類樹基於Gini指數選取分割點,而回歸樹基於平方誤差選取分割點。

隨機森林分類和adaboost分類方法的異同之處

隨機森林和adaboost演算法都可以用來分類,它們都是優秀的基於決策樹的組合演算法。相對於經典線性判別分析,其分類效果一般要好很多。 下說明這兩種分類方法的相同和不同之處: 1,相同:二者都是bo

python中使用整合模型,隨機森林分類器,梯度提升決策樹效能模型分析 視覺化

import pandas as pd titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt') #titanic = pd.read_csv('.

資料探勘十大經典演算法(十) CART: 分類迴歸

在資料探勘中,決策樹主要有兩種型別: 分類樹 的輸出是樣本的類標。 迴歸樹 的輸出是一個實數 (例如房子的價格,病人呆在醫院的時間等)。  分類迴歸樹是一棵二叉樹,且每個非葉子節點都有兩個孩子,所以對於第一棵子樹其葉子節點數比非葉子節點數多1。  決策樹為什麼(WHY)要

機器學習:決策樹cart演算法在分類迴歸的應用(上)

#include #include #include #include #include #include #include #include #include #include #include using namespace std; //置信水平取0.95時的卡方表 const double CHI

基於隨機森林的姿態識別演算法

本部落格主要是對“Uncertainty-Driven 6D Pose Estimation of Objects and Scenes from a Single RGB Image” 論文的解讀。 1.訓練資料的採集 由於是基於畫素級的訓練,所以需要每個畫