我试图更好地理解无监督的随机森林。理解无监督随机森林的一个重要部分是能够评估给定森林的好坏程度。例如,布雷曼关于无人监督森林的页面说:
如果二分类问题中的 oob 错误分类率是 40% 或更多,这意味着 x 变量看起来太像随机森林的自变量。依赖性没有很大的作用,也没有发生太多的歧视。如果误分类率较低,则依赖关系起着重要作用。
然而,在这样一个无监督的森林中,R 实现不会返回错误分类率。然而,它确实返回了一个“投票”组件,在受监督的情况下,它可以很容易地转化为混淆矩阵和错误分类率。想法是检查这个投票组件应该有助于理解无监督森林中的错误分类。但是,我对这些选票实际代表什么感到困惑。
我的理解是,在无监督的情况下,在实际数据和随机数据集之间进行分类,如下所示:
set.seed(23)
require(dplyr)
require(randomForest)
n <- nrow(iris)
irisBS <- mutate_each(iris,funs(sample(.,replace=TRUE)))
y <- factor(c(rep(1, n), rep(2, n)))
rfPU <- randomForest(x=rbind(iris,irisBS), y=y)
正如预期的那样,这将返回一个具有两倍于原始数据(iris)行数的投票组件:
n
# [1] 150
nrow(rfPU$votes)
# [1] 300
但是,实际的无监督森林会返回一个与原始数据具有相同行数的投票组件:
set.seed(23)
rfU <- randomForest(x=iris)
nrow(rfPU$votes)
# [1] 150
那么问题是这些代表什么。当考虑正确或不正确的分类时,实际无监督森林中第二类的总票数介于我上面的伪无监督版本中的票数之间:
sum(rfU$votes[,2])
# [1] 87.12367
sum(rfPU$votes[1:n,2])
# [1] 24.34562
sum(rfPU$votes[(n+1):(2*n),2])
# [1] 119.3299
也就是说,来自无监督森林的值略高于其他两个值的中点,但对我来说并不明显发生了什么。多次这样做表明这是具有代表性的。
