使用 Scikit-Learn 生成高维数据集

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案1】:

聚类的标准差不是 1。

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

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

【讨论】:

是的,我认为它是这样的。但特别是因为我知道标准偏差,我认为它可以作为带宽估计。那么如何计算总标准差呢?我不太明白你是如何得到 sqrt(8) 但是由于维度的诅咒,它可能仍然无法工作。我在某处读到 KDE 倾向于在 6 维左右崩溃。 嗯,好的,我会看看是否会发生这种情况。谢谢 :)。还有一件事:我的直觉是,我应该使用的带宽类似于所有 1d 标准偏差的平方和的平方根。因此,如果我选择 stddev 2,则意味着 sqrt((8*2^2)) 的总 stddev。这有意义吗?

以上是关于使用 Scikit-Learn 生成高维数据集的主要内容,如果未能解决你的问题,请参考以下文章

[机器学习与scikit-learn-6]:数据集获取的主要方式-2-计算机生成数据集

scikit-learn 管道:对变压器参数进行网格搜索以生成数据

主成分分析法

如何使用 scikit-learn 创建我自己的数据集?

如何在 scikit-learn(用于计算机视觉)中使用我自己的数据集?

基于HDF5的高维数据有效