mou*_*hio 9 python cluster-analysis scikit-learn
我在约100万个项目上运行k-means聚类(每个项目表示为~100个特征向量).我已经为各种k运行了聚类,现在想要使用sklearn中实现的轮廓分数来评估不同的结果.试图在没有采样的情况下运行它似乎不可行并且需要花费相当长的时间,因此我假设我需要使用采样,即:
metrics.silhouette_score(feature_matrix, cluster_labels, metric='euclidean',sample_size=???)
Run Code Online (Sandbox Code Playgroud)
然而,我并不清楚适当的采样方法是什么.在给定矩阵大小的情况下,对于使用什么尺寸的样本,是否有经验法则?采用我的分析机可以处理的最大样本,或者采用更小样本的平均值更好吗?
我在很大程度上要求,因为我的初步测试(使用sample_size = 10000)产生了一些非常不直观的结果.
我也愿意采用其他更具可扩展性的评估指标.
编辑以显示问题:对于不同的样本大小,该图显示了作为聚类数量函数的轮廓得分 
有点奇怪的是,增加样本量似乎可以减少噪音.奇怪的是,鉴于我有100万个非常异质的向量,2或3是"最佳"聚类数.换句话说,当我增加簇的数量时,我会发现轮廓得分或多或少单调减少,这是不直观的.
其他指标
Elbow 方法:计算每个 K 的解释方差百分比,并选择图开始趋于平稳的 K。(这里有一个很好的描述https://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set)。显然,如果您有 k == 数据点数,则可以解释 100% 的方差。问题是解释的方差改进从哪里开始趋于平稳。
信息论:如果您可以计算给定 K 的似然,那么您可以使用 AIC、AICc 或 BIC(或任何其他信息论方法)。例如,对于 AICc,它只是在增加 K 和增加所需参数数量时平衡似然性的增加。在实践中,您所做的就是选择最小化 AICc 的 K。
您可以通过运行其他方法(例如 DBSCAN)来估算集群数量,从而了解大致合适的 K。虽然我还没有看到这种方法用于估计 K,但像这样依赖它可能是不可取的。但是,如果 DBSCAN 在这里也为您提供了少量集群,那么您的数据中可能存在一些您可能不会欣赏的内容(即没有您期望的那么多集群)。
采样多少
看起来你已经从你的情节中回答了这个问题:无论你的采样是什么,你都会在轮廓分数中得到相同的模式。所以这种模式对于抽样假设似乎非常稳健。
| 归档时间: |
|
| 查看次数: |
8193 次 |
| 最近记录: |