【问题标题】:Generating high dimensional datasets with Scikit-Learn使用 Scikit-Learn 生成高维数据集
【发布时间】:2015-05-22 19:30:12
【问题描述】:

我正在使用 Mean Shift 聚类算法,该算法基于数据集的核密度估计。我想生成一个大型的高维数据集,我认为 Scikit-Learn 函数make_blobs 会很合适。但是当我尝试生成一个 100 万个点的 8 维数据集时,我最终将几乎每个点都视为一个单独的集群。

我正在生成标准差为 1 的 blob,然后将均值偏移的带宽设置为相同的值(我认为这是有道理的,对吧?)。对于二维数据集,这产生了很好的结果,但对于更高的维度,我认为我遇到了维度的诅咒,因为点之间的距离变得太大而无法进行有意义的聚类。

是否有人对如何获得适合(类似)Mean Shift 聚类的良好高维数据集有任何提示/技巧? (或者我做错了什么?(这当然是一个很好的可能性))

【问题讨论】:

    标签: python scikit-learn cluster-analysis mean-shift


    【解决方案1】:

    聚类的标准差不是 1。

    您有 8 个维度,每个维度的标准差为 1,因此您的总标准差为 sqrt(8) 或类似的值。

    由于带宽问题,核密度估计在高维数据中效果不佳。

    【讨论】:

    • 是的,我认为它是这样的。但特别是因为我知道标准偏差,我认为它可以作为带宽估计。那么如何计算总标准差呢?我不太明白你是如何得到 sqrt(8)
    • 但是由于维度的诅咒,它可能仍然无法工作。我在某处读到 KDE 倾向于在 6 维左右崩溃。
    • 嗯,好的,我会看看是否会发生这种情况。谢谢 :)。还有一件事:我的直觉是,我应该使用的带宽类似于所有 1d 标准偏差的平方和的平方根。因此,如果我选择 stddev 2,则意味着 sqrt((8*2^2)) 的总 stddev。这有意义吗?
    猜你喜欢
    • 2015-08-23
    • 2016-07-13
    • 2014-09-17
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 2012-11-29
    • 2017-01-09
    相关资源
    最近更新 更多