如何使用非常小的数据集对特征进行加权以获得更好的聚类?
Posted
技术标签:
【中文标题】如何使用非常小的数据集对特征进行加权以获得更好的聚类?【英文标题】:How can I weight features for better clustering with a very small data set? 【发布时间】:2011-10-05 18:23:03 【问题描述】:我正在开发一个程序,该程序在特征空间(1000 多个维度)中接收几个 (
我的问题是,在任何一个 k-clustering pass 中,高维表示的不同部分都是多余的。我知道这个问题属于特征提取、选择或加权的范畴。
一般来说,在选择特定的特征提取/选择/加权算法时会考虑哪些因素?具体来说,在我的情况下,什么算法是准备数据以进行聚类的最佳方法?
【问题讨论】:
我想知道stats.stackexchange.com 是否更适合这个问题。 我认为它属于这里,因为它是一个算法问题,而且堆栈溢出似乎可以处理许多机器学习问题。 【参考方案1】:我建议将基于 PCA 的特征选择和 k-means 结合起来。
找到您的主要成分并按重量排序。并且消耗你层次结构的每个深度的权重。
例如,假设您有四个深度的集群层次结构,并且您获得的组件权重如下:
W1: 0.32
W2: 0.20
W3: 0.18
W4: 0.09
...
W1000: 0.00
我们希望为每个深度从顶部消耗1/N
的权重,其中N
是深度计数。在这里以N
为4
。第一个组件的0.25
被消耗,我们到达:
W1: 0.07*
W2: 0.20
W3: 0.18
W4: 0.09
...
W1000: 0.00
第一个组件的新分数变为0.32-0.25=0.07
。在第二次迭代中,我们再次消费顶部的0.25
。
W1: 0.00*
W2: 0.02*
W3: 0.18
W4: 0.09
...
W1000: 0.00
第三次迭代是:
W1: 0.00
W2: 0.00*
W3: 0.00*
W4: 0.04*
...
W1000: 0.00
第四次迭代使用权重达到0.25
的其余部分。
在每次迭代中,我们只使用我们消耗权重的特征。例如,我们在第二次迭代中只使用 KLT 之后特征的 PC1 和 PC2,因为这些是我们唯一消耗权重的组件。因此,每次迭代要聚类的组件变为:
Iteration 1: PC1
Iteration 2: PC1, PC2
Iteration 3: PC2, PC3, PC4
Iteration 4: PC4, ... PC1000
您可以以小于1.0
的最终权重消耗为目标,并为此目的迭代更少的权重。这实际上与在聚类之前过滤掉超出目标权重的所有组件以进行降维相同。
最后,我不知道这种方法是否有名字。使用 PCA 解决无监督问题感觉很自然。您也可以在第一次迭代后尝试监督特征选择,因为您手头有集群标签。
【讨论】:
这仅在您不想为每个级别的每个集群执行 PCA 时才有意义。由于您的样本数量很少,因此每个集群的 PCA 也可能就足够了。【参考方案2】:查看这篇论文:
Witten DM 和 R Tibshirani (2010) 聚类中的特征选择框架。美国统计协会杂志 105(490): 713-726。
还有弗里德曼的相关论文 COSA。他们都深入讨论了这些问题。
【讨论】:
哇,谢谢你的链接。那篇论文完美地回答了我的问题。以上是关于如何使用非常小的数据集对特征进行加权以获得更好的聚类?的主要内容,如果未能解决你的问题,请参考以下文章