Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当使用k-均值聚类时,我能用calinski和hrabasz验证确定k吗?_Python_Scikit Learn_Cluster Analysis_K Means - Fatal编程技术网

Python 当使用k-均值聚类时,我能用calinski和hrabasz验证确定k吗?

Python 当使用k-均值聚类时,我能用calinski和hrabasz验证确定k吗?,python,scikit-learn,cluster-analysis,k-means,Python,Scikit Learn,Cluster Analysis,K Means,我想使用python中的scikit包(metrics.calinski_-harabaz_score)中的calinski和harabasz验证自动选择k(k-means集群) 我循环遍历所有聚类范围,以选择calinski_harabaz_得分的最大值 for kClusterCnt in range(2, 21) : value = metrics.calinski_harabaz_score(datasets.data, kmCls.labels_) 当我仅使用该

我想使用python中的scikit包(metrics.calinski_-harabaz_score)中的calinski和harabasz验证自动选择k(k-means集群)

我循环遍历所有聚类范围,以选择calinski_harabaz_得分的最大值

    for kClusterCnt in range(2, 21) :
       value = metrics.calinski_harabaz_score(datasets.data, kmCls.labels_)

当我仅使用该方法时,是否存在任何缺陷或错误?

我认为您需要为每个集群编号调用kmeans fit。我合并了来自和您的代码的示例,如下所示

from sklearn import metrics
from sklearn.metrics import pairwise_distances
from sklearn import datasets
dataset = datasets.load_iris()
X = dataset.data
y = dataset.target
import numpy as np
from sklearn.cluster import KMeans
kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
labels = kmeans_model.labels_
metrics.calinski_harabaz_score(X, labels)
for k in range(2, 21):
    kmeans_model = KMeans(n_clusters=k, random_state=1).fit(X)
    labels = kmeans_model.labels_
    labels = kmeans_model.labels_
    print k, metrics.calinski_harabaz_score(X, labels)
输出如下

2 513.303843352
3 560.399924247
4 529.120719084
5 494.094381914
6 474.517429587
7 448.871449442
8 436.613024881
9 414.530317405
10 390.646480599
11 368.89696343
12 357.194592002
13 342.732084105
14 344.610818724
15 337.809470535
16 324.972019063
17 322.825466107
18 314.587220111
19 306.64863559
20 316.905301605

根据这一结果,3个聚类中心是最好的。“3 560.399924247”。

我认为您需要为每个群集号码调用kmeans fit。我合并了来自和您的代码的示例,如下所示

from sklearn import metrics
from sklearn.metrics import pairwise_distances
from sklearn import datasets
dataset = datasets.load_iris()
X = dataset.data
y = dataset.target
import numpy as np
from sklearn.cluster import KMeans
kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
labels = kmeans_model.labels_
metrics.calinski_harabaz_score(X, labels)
for k in range(2, 21):
    kmeans_model = KMeans(n_clusters=k, random_state=1).fit(X)
    labels = kmeans_model.labels_
    labels = kmeans_model.labels_
    print k, metrics.calinski_harabaz_score(X, labels)
输出如下

2 513.303843352
3 560.399924247
4 529.120719084
5 494.094381914
6 474.517429587
7 448.871449442
8 436.613024881
9 414.530317405
10 390.646480599
11 368.89696343
12 357.194592002
13 342.732084105
14 344.610818724
15 337.809470535
16 324.972019063
17 322.825466107
18 314.587220111
19 306.64863559
20 316.905301605

根据这一结果,3个聚类中心是最好的。“3560.39992447”。

记住,由于初始化阶段的随机性,k-均值是不确定的。这意味着您将得到一系列答案,并且您必须针对k的每个值对该范围进行采样,以获得该k的最佳拟合。这不是一蹴而就的

记住,由于初始化阶段的随机性,k-均值是不确定的。这意味着您将得到一系列答案,并且您必须针对k的每个值对该范围进行采样,以获得该k的最佳拟合。这不是一蹴而就的

谢谢你回答这个问题。是的,我做的源代码和你一样。但我不知道选择k是否有效,也没有错误。找到精确的k仍然是一个开放的研究问题。calinski_-harabaz_评分法是目前提出的聚类适应度方法之一。只有您可以说它对您的问题/数据集是否有效。请始终多次随机初始化k-means。感谢您回答此问题。是的,我做的源代码和你一样。但我不知道选择k是否有效,也没有错误。找到精确的k仍然是一个开放的研究问题。calinski_-harabaz_评分法是目前提出的聚类适应度方法之一。只有您可以说它对您的问题/数据集是否有效。请始终对k-means进行多次随机初始化。您也可以掷骰子选择k。不要依赖这些措施,请始终手动验证群集。感谢您的回复。我知道我必须用平方和和和其他方法检查聚类数。但我需要做一个程序,自动选择K并运行聚类,而无需人工决定。所以我写这些问题是为了得到一些建议。不,也不要依赖平方和!自动聚类是一种矛盾修饰法。你也可以掷骰子选择k。不要依赖这些措施,请始终手动验证群集。感谢您的回复。我知道我必须用平方和和和其他方法检查聚类数。但我需要做一个程序,自动选择K并运行聚类,而无需人工决定。所以我写这些问题是为了得到一些建议。不,也不要依赖平方和!自动聚类是一个矛盾修饰法。谢谢你回答这个问题。我试着再考虑一下。谢谢你回答这个问题。我试着再考虑一下。