问题引入
随机森林是一个常用到的模型了,大家知道随机森林可以用来做回归,也可以用来做分类,那么随机森林能否用来做聚类呢?是个有趣的问题,让我们一起探讨下。
问题解答
其实随机森林是可以用来做聚类的,对于没有标签的特征,随机森林通过生成数据来实现聚类。其主要的步骤如下:
第一步:生成假冒数据和临时标签。
我们先给原数据集增加一列,名叫“标签”,原生数据每一行的标签都是“1”。下面生成一些假数据,假数据的每一列都是从原生数据中根据其经验分布随机产生的,人工合成的数据的标签是“0”。举个例子,
标签 身高 体重 年龄
1 184 158 25
1 170 162 37
1 165 132 45
1 110 78 9
1 145 100 14
1 ... ... ...
上面是原生数据,下面我们开始制造虚假数据
标签 身高 体重 年龄
1 184 158 25
1 170 162 37
1 165 132 45
1 110 78 9
1 145 100 14
1 ... ... ...
0 170 100 9
0 110 162 37
0 165 158 14
每行假数据的每一个元素都是从它所在的那一列中随机抽取的,列和列之间的抽取是独立的。这样一来,人工合成的假数据就破坏了原有数据的结构性。现在我们的数据集和标签就生成完了。
第二步:用该数据集训练Random Forest并获得样本间的临近性(proximity)。
假设原生样本有N行,我们再生成M个假数据。现在我们就有了带标签的样本之后就可以用它训练出一个Random Forest。Random Forest在训练的同时,可以返回样本之间的临近性(proximity,两个样本出现在树杈同一节点的频率越高,它们就越临近)。我们就有了一个(N+M)x(N+M)的临近矩阵(这是个对称矩阵)。把与假数据相关的M行、M列去掉,我们就得到了NxN的矩阵,矩阵的第i行第j列的数值就是原生数据中第i个样本和第j个样本之间的临近性。
第三步:根据每个样本点两两之间的临近性来聚类。
这个是最后一步,在其中可以用两两之间的临近性当做两两之间的距离,然后再利用常规的聚类算法,比如层次聚类法(Hierarchical clustering),就可以完成对原样本的聚类。
欢迎关注我的公众号,第一时间追踪相关面试题和总结:百面机器学习。
回复干货获取相关资料和面试题总结(定期更新)。
参考
[1] https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm#unsup [2] https://www.cnblogs.com/igofreely/p/11218459.html [3] https://zhuanlan.zhihu.com/p/22097796
来源:oschina
链接:https://my.oschina.net/u/4275752/blog/4483475