R 的无监督随机森林中的选票是多少?

机器算法验证 r 机器学习 分类 随机森林 无监督学习
2022-04-06 12:10:53

我试图更好地理解无监督的随机森林。理解无监督随机森林的一个重要部分是能够评估给定森林的好坏程度。例如,布雷曼关于无人监督森林的页面说:

如果二分类问题中的 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

也就是说,来自无监督森林的值略高于其他两个值的中点,但对我来说并不明显发生了什么。多次这样做表明这是具有代表性的。

1个回答

这里阅读,我们确认您对无监督 Breiman 随机森林的理解。

无监督学习

在无监督学习中,数据由一组相同维度的 x 向量组成,没有类标签或响应变量。没有可优化的品质因数,使该领域容易得出模棱两可的结论。通常的目标是对数据进行聚类——看看它是否属于不同的堆,每个堆都可以被赋予一些含义。

随机森林中的方法是将原始数据视为第 1 类,并创建一个相同大小的合成第二类,将其标记为第 2 类。合成第二类是通过从原始数据的单变量分布中随机抽样创建的数据。下面是如何创建第二类的单个成员 - 第一个坐标是从 N 个值 {x(1,n)} 中采样的。第二个坐标独立于 N 个值 {x(2,n)} 进行采样,依此类推。

因此,第二类具有独立随机变量的分布,每个变量都具有与原始数据中相应变量相同的单变量分布。类 2 因此破坏了原始数据中的依赖结构。但是现在,有两类,这个人为的二类问题可以通过随机森林来运行。这允许将所有随机森林选项应用于原始未标记数据集。

如果二分类问题中的 oob 错误分类率是 40% 或更多,这意味着 x 变量看起来太像随机森林的自变量。依赖性没有很大的作用,也没有发生太多的歧视。如果误分类率较低,则依赖关系起着重要作用。

将其表述为一个两类问题有很多回报。可以有效地替换缺失值。可以找到异常值。可以测量变量的重要性。可以进行缩放(在这种情况下,如果原始数据有标签,无监督缩放通常会保留原始缩放的结构)。但最重要的回报是聚类的可能性。

投票总数是“真实”样本(第 1 类)的数量的原因仅仅是因为没有理由为“假”样本(第 2 类)返回投票。这些是随机的,它们的概率密度函数是完全已知的。

PU比较您和U模型中的投票分布:

png("unsupervisedRF.png")
par(mfrow = c(1,2), mar = c(5.1, 3.6, 4.1, 1.6))
boxplot(rfPU$votes[1:150,], names = c("PU-1","PU-2"), col = c("green","red"))
boxplot(rfU$votes, names = c("U-1","U-2"), col = c("green","red"))
dev.off()

在此处输入图像描述