【问题标题】:Unsupervised Random Forest Proximities in PythonPython中的无监督随机森林近似
【发布时间】:2014-09-25 06:42:30
【问题描述】:

我目前正在重新访问几年前使用 R 语言执行的随机森林项目,以:

  1. 使用无监督的 RandomForest 生成数据输入的邻近矩阵
  2. 从此邻近矩阵计算距离矩阵并传递给围绕中心点分区 (PAM) 聚类算法
  3. 使用通过 PAM 获得的集群,在监督模式下运行 RandomForest 来训练新模型。
  4. 使用此模型使用另一个数据集从未来时间点进行预测。

对于许多项目,我已将我的工作流程转移到 Python,因为该语言非常灵活且有趣,但与我在 R 中执行此类任务的方式相比,我仍然对 sklearn 有所了解.我的挂断是在产生一个接近矩阵(或一些容器保持样本之间的接近度),以传递给PAM。我找到了以下post,它描述了一个类似的问题,但我一直无法找到一种方法来实现接受的答案作者的建议。

关于如何实现这一点的任何线索?任何帮助都将不胜感激,我一定会将其返回给更大的社区。我知道还有很多其他 R 到 Python 的转换者会从这类信息中受益。

如果这是一个我忽略的简单解决方案,请提前致谢并道歉。

【问题讨论】:

  • 这方面有什么进展吗?没有人真正描述过如何使用 sklearn 在 Python 中实现这一点。

标签: python cluster-analysis random-forest


【解决方案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)

【讨论】:

    【解决方案2】:

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

    对于使用 python 数据结构的解决方案,它实际上取决于您如何加载数据以及之后您将如何处理数据(例如,您的 PAM 方法需要什么)。

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

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

    这是二维的,但您可以通过为键提供更多坐标来提高。

    【讨论】:

      猜你喜欢
      • 2015-05-04
      • 2014-07-08
      • 2016-05-15
      • 2018-04-10
      • 2021-05-29
      • 2013-06-26
      • 2015-02-12
      • 2017-01-13
      • 2020-08-08
      相关资源
      最近更新 更多