Python中的无监督随机森林近似

时间:2014-08-02 01:23:33

标签: python cluster-analysis random-forest

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

  1. 使用无监督的RandomForest
  2. 生成数据输入的邻近矩阵
  3. 从此邻近矩阵计算距离矩阵并传递给Partitioning Around Medoids(PAM)聚类算法
  4. 使用通过PAM获得的聚类,在监督模式下运行RandomForest来训练新模型。
  5. 使用此模型预测使用未来某个时间点的其他数据集。
  6. 由于语言非常灵活和有趣,我已将工作流程转移到 Python ,因为语言非常灵活和有趣,但与我在R中执行此类任务的方式相比,我仍然在sklearn中工作。我的做法是生成一个接近矩阵(或一些容器之间保持接近的容器),然后传递给PAM。我找到了以下post,它描述了一个类似的问题,但我一直无法找到一种方法来实现所接受答案的作者所建议的内容。

    有关如何实现此问题的任何线索?非常感谢任何帮助,我一定会把它归还给更大的社区。我知道还有很多其他R到Python的转换器可以从这类信息中受益。

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

2 个答案:

答案 0 :(得分:2)

你可以使用用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)

答案 1 :(得分:0)

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

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

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

foreach (elem in menuHrefs )
{
    elem.click();
}

这适用于2个维度,但您可以通过为键提供更多坐标来提高。