【问题标题】:How to find best no of clusters for clustering algorithm using categorical data如何使用分类数据为聚类算法找到最佳聚类数
【发布时间】:2020-02-18 08:46:11
【问题描述】:

我正在处理具有多个特征的分类数据,但我一直不知道我的数据集的最佳聚类数量。

有什么方法可以找到分类数据聚类的最佳 K。

我使用了需要指定簇数的 K 模式,但这并不能解决问题。

提前感谢您的帮助

【问题讨论】:

  • 这是否与 K 均值聚类密切相关?
  • @silentsudo : 并非如此,因为 k-means 使用距离矩阵,如欧几里德距离度量、曼哈顿距离度量,但我们不能使用这些矩阵来比较分类变量的距离

标签: cluster-analysis categorical-data


【解决方案1】:

嗯,聚类确实不是为序数数据设计的。我建议你看看OHE。查看此代码示例。

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(handle_unknown='ignore')
X = [['Male', 1], ['Female', 3], ['Female', 2]]
enc.fit(X)

enc.categories_

enc.transform([['Female', 1], ['Male', 4]]).toarray()

enc.inverse_transform([[0, 1, 1, 0, 0], [0, 0, 0, 1, 0]])

enc.get_feature_names(['gender', 'group'])

drop_enc = OneHotEncoder(drop='first').fit(X)
drop_enc.categories_

drop_enc.transform([['Female', 1], ['Male', 2]]).toarray()

https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html

或者,您可以使用 OE。这是更多示例代码。

from sklearn.preprocessing import OrdinalEncoder
enc = OrdinalEncoder()
X = [['Male', 1], ['Female', 3], ['Female', 2]]
enc.fit(X)

enc.categories_

enc.transform([['Female', 3], ['Male', 1]])

https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OrdinalEncoder.html#sklearn.preprocessing.OrdinalEncoder

最后,您可以考虑使用 Affinity Propagation、Hierarchical Clustering 或 DBSCAN;链接如下。

https://scikit-learn.org/stable/auto_examples/cluster/plot_affinity_propagation.html

https://scikit-learn.org/stable/auto_examples/cluster/plot_agglomerative_dendrogram.html

https://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html

我认为结果对于聚类分类数据集没有意义或相关。红色、蓝色和绿色之间的“距离”是多少?有意义吗?

【讨论】:

  • 这些天我一直在做更多关于分类数据聚类的研究,但几乎找不到像 k-medioids、Rock 和 k-modes 这样的结果。所涉及的步骤是:a)我使用 gower 距离找到了一个差异矩阵 b)我使用 k-medioids 对数据进行了聚类 c)我使用 silhouette_score 检查了聚类的性能
猜你喜欢
  • 1970-01-01
  • 2020-10-08
  • 2021-10-11
  • 2017-04-07
  • 2017-04-28
  • 2015-06-24
  • 2013-02-28
相关资源
最近更新 更多