Python中的无监督随机森林相似度

5
我目前正在重新审视使用R语言进行的随机森林项目,以:
  1. 使用无监督的随机森林生成数据输入的相似度矩阵
  2. 从这个相似度矩阵计算距离矩阵,并传递给Partitioning Around Medoids(PAM)聚类算法
  3. 使用通过PAM获得的聚类,在监督模式下运行随机森林以训练新模型。
  4. 使用该模型预测来自未来时间点的另一个数据集。
我已经将我的工作流程转移到Python上,因为该语言非常灵活和有趣,但与我在R中执行此类任务的方式相比,我仍在适应sklearn。 我卡在了生成相似度矩阵(或某个包含样本之间相似度的容器)上,以便传递给PAM。我找到了以下帖子,它描述了类似的问题,但我一直无法找到实现被接受答案的作者所建议的方法。
有什么线索可以实现这一点吗?任何帮助都将不胜感激,我将确保将其回馈给更大的社区。我知道还有很多其他的R转Python的人会从这种信息中受益。
提前感谢,如果这是我简单地忽略了的简单解决方案,请原谅。

有进展吗?没有人真正描述如何在Python中使用sklearn实现这一点。 - O.rka
嗨迈克尔,我对你为什么将"proximities"改成"distance"很感兴趣。我在R中做过类似的操作,但没有转换成距离。根据我的理解,"proximity matrix"是一种距离度量方法? - undefined
2个回答

1
你可以使用R语言中编写的bigrf包(https://cran.r-project.org/web/packages/bigrf/bigrf.pdf)。它具有你所需要的一切。
以下是在R中实现它的方法:
# load bigrf library
library('bigrf')

# generate synthetic dataset
synthetic.df <- generateSyntheticClass(x)

# create rf model
forest <- bigrfc(synthetic.df$x, synthetic.df$y, trace = 1)

# calculate distances
dist  <- proximities(forest, trace =  2)
dist  <- data.frame(as.matrix(dist))
dist  <- dist[1:nrow(x), 1:nrow(x)]
dist  <- sqrt(1 - dist)

0

首先,您可能想查看pandas:http://pandas.pydata.org/。它可能会让您的生活更轻松。

对于使用Python数据结构的解决方案,这将取决于您如何加载数据以及之后要执行的操作(例如,您的PAM方法需要什么)。

存储距离的一种便捷方式是邻接表。有许多实现方法。我喜欢使用哈希,其中键是坐标元组,值是距离。

a = {}
a[(0,1)] = 7
a[(1,5)] = 20
a[(6,1)] = 1

这是针对二维的,但你可以通过给键更多的坐标来扩展到更高维度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接