随机森林袋外变量重要性
randomForest out-of-bag variable importance
我想了解 %var 是如何超过 100 的。
我正在使用脚本:
require(randomForest)
start <- "B_fixed"
suffix <- ".txt"
dataDir <- "/Users/Desktop/"
mod1 <- read.table(paste(dataDir,start,suffix,sep=""),sep="\t",header=T)
form <- as.formula(Ksat_f~.)
Ksat_rf <- randomForest(form, data=mod1[c(1:14)],na.action=na.omit, ntree=1000,
replace=F,importance=T, do.trace=50, keep.forest=T,keep.inbag=T)
我得到以下输出:
| Out-of-bag |
Tree | MSE %Var(y) |
50 | 3.258 114.85 |
100 | 3.06 107.87 |
150 | 3.096 109.12 |
200 | 3.054 107.66 |
250 | 3.014 106.25 |
300 | 3.012 106.15 |
350 | 2.978 104.96 |
400 | 2.971 104.73 |
450 | 2.952 104.06 |
500 | 2.941 103.66 |
550 | 2.936 103.49 |
600 | 2.928 103.22 |
650 | 2.933 103.39 |
700 | 2.934 103.44 |
750 | 2.92 102.94 |
800 | 2.929 103.23 |
850 | 2.953 104.10 |
900 | 2.957 104.24 |
950 | 2.951 104.04 |
1000 | 2.931 103.32 |
这是使用 14 个变量.....如果我使用一个变量,%var 可以达到 145%。
任何事情都会有所帮助。
感谢
-t
145% 这个数字告诉你,你的模型错的远比对的多
我承认这有点令人困惑。 %Var(y)
指的是误差与总目标方差相比的百分比方差。而 % Var explained:
指的是模型解释的百分比方差。
注意:105.15% + (-5.15%) = 100%
在下面的可重现示例中,我 shuffle/permute 目标 (y's) 因此 RF 模型没有机会进行预测。您会看到它的表现非常糟糕,因为误差超过 100% 并且解释的方差小于 0%。在解释方差为 0% 时,您的模型与预测任何等于总均值的观测值具有相同的准确性。
set.seed(1)
library(randomForest)
X <- data.frame(replicate(5,rnorm(1000)))
y <- apply(X,1,sum)
y <- sample(y)
Data <- data.frame(X,y)
form <- as.formula(y~.)
rf <- randomForest(form, data=Data,na.action=na.omit,
ntree=1000,replace=F,importance=T,
do.trace=50, keep.forest=T,keep.inbag=T)
| Out-of-bag |
Tree | MSE %Var(y) |
50 | 5.81 108.91 |
100 | 5.671 106.31 |
150 | 5.651 105.95 |
1000 | 5.609 105.15 |
print(rf)
Call:
randomForest(formula = form, data = Data, ntree = 1000, replace = F, importance = T, do.trace = 50, keep.forest = T, keep.inbag = T, na.action = na.omit)
Type of random forest: regression
Number of trees: 1000
No. of variables tried at each split: 1
Mean of squared residuals: 5.608769
% Var explained: -5.15
我想了解 %var 是如何超过 100 的。
我正在使用脚本:
require(randomForest)
start <- "B_fixed"
suffix <- ".txt"
dataDir <- "/Users/Desktop/"
mod1 <- read.table(paste(dataDir,start,suffix,sep=""),sep="\t",header=T)
form <- as.formula(Ksat_f~.)
Ksat_rf <- randomForest(form, data=mod1[c(1:14)],na.action=na.omit, ntree=1000,
replace=F,importance=T, do.trace=50, keep.forest=T,keep.inbag=T)
我得到以下输出:
| Out-of-bag |
Tree | MSE %Var(y) |
50 | 3.258 114.85 |
100 | 3.06 107.87 |
150 | 3.096 109.12 |
200 | 3.054 107.66 |
250 | 3.014 106.25 |
300 | 3.012 106.15 |
350 | 2.978 104.96 |
400 | 2.971 104.73 |
450 | 2.952 104.06 |
500 | 2.941 103.66 |
550 | 2.936 103.49 |
600 | 2.928 103.22 |
650 | 2.933 103.39 |
700 | 2.934 103.44 |
750 | 2.92 102.94 |
800 | 2.929 103.23 |
850 | 2.953 104.10 |
900 | 2.957 104.24 |
950 | 2.951 104.04 |
1000 | 2.931 103.32 |
这是使用 14 个变量.....如果我使用一个变量,%var 可以达到 145%。
任何事情都会有所帮助。
感谢
-t
145% 这个数字告诉你,你的模型错的远比对的多
我承认这有点令人困惑。 %Var(y)
指的是误差与总目标方差相比的百分比方差。而 % Var explained:
指的是模型解释的百分比方差。
注意:105.15% + (-5.15%) = 100%
在下面的可重现示例中,我 shuffle/permute 目标 (y's) 因此 RF 模型没有机会进行预测。您会看到它的表现非常糟糕,因为误差超过 100% 并且解释的方差小于 0%。在解释方差为 0% 时,您的模型与预测任何等于总均值的观测值具有相同的准确性。
set.seed(1)
library(randomForest)
X <- data.frame(replicate(5,rnorm(1000)))
y <- apply(X,1,sum)
y <- sample(y)
Data <- data.frame(X,y)
form <- as.formula(y~.)
rf <- randomForest(form, data=Data,na.action=na.omit,
ntree=1000,replace=F,importance=T,
do.trace=50, keep.forest=T,keep.inbag=T)
| Out-of-bag |
Tree | MSE %Var(y) |
50 | 5.81 108.91 |
100 | 5.671 106.31 |
150 | 5.651 105.95 |
1000 | 5.609 105.15 |
print(rf)
Call:
randomForest(formula = form, data = Data, ntree = 1000, replace = F, importance = T, do.trace = 50, keep.forest = T, keep.inbag = T, na.action = na.omit)
Type of random forest: regression
Number of trees: 1000
No. of variables tried at each split: 1
Mean of squared residuals: 5.608769
% Var explained: -5.15