scikit-learn 谱聚类的输入值可以是负值吗?

Posted

技术标签:

【中文标题】scikit-learn 谱聚类的输入值可以是负值吗?【英文标题】:Can the input values to the spectral clustering of scikit-learn be a negative value? 【发布时间】:2019-12-05 23:36:34 【问题描述】:

假设,我有 20 列和 10K 行的 df。由于数据的取值范围很广,我使用以下代码对数据进行规范化:

from sklearn.preprocessing import StandardScaler
min_max_scaler = preprocessing.StandardScaler()
df_scaled = min_max_scaler.fit_transform(df)

df_scaled 现在包含负值和正值。 现在,如果我将这个归一化的数据帧传递给光谱集群,如下所示,

spectral = SpectralClustering(n_clusters = k, 
                                  n_init=30,
                                  affinity='nearest_neighbors', random_state=cluster_seed,
                                  assign_labels='kmeans')
 clusters =  spectral.fit_predict(df_scaled)

我会拿到集群标签。

这让我感到困惑:official doc 说 “只应使用产生相似性分数(随相似性增加的非负值)的内核。聚类算法不会检查此属性。”

问题:df_scaled的归一化负值会影响聚类结果吗? 要么 它是否取决于我正在使用的亲和力计算,例如precomputed, rbf?如果是这样,我如何将归一化的输入值用于 SpectralClustering? 我的理解是规范化可以改善聚类结果并有利于更快的计算。 非常感谢任何有关如何解决该问题的帮助或提示。

【问题讨论】:

【参考方案1】:

您传递的是 数据 矩阵,而不是预先计算的亲和度矩阵。

“最近邻”使用非负的二元核。

为了更好地理解内部工作原理,请查看源代码。

【讨论】:

以上是关于scikit-learn 谱聚类的输入值可以是负值吗?的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn 谱聚类:无法找到潜伏在数据中的 NaN

谱聚类--SpectralClustering

谱聚类(spectral clustering)原理总结

谱聚类算法总结

谱聚类

谱聚类的实现