【问题标题】:iris data set K_means虹膜数据集 K_means
【发布时间】:2020-01-24 20:40:56
【问题描述】:

问题是为什么我得到 0.00 的准确度

iris = pd.read_csv('iris.csv')


feature_cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']

X_train, X_test, y_train, y_test = train_test_split(iris.loc[:, iris.columns != 'species'],
iris['species'], test_size=0.30 , random_state=0)


k_means = KMeans(n_clusters=3)
k_means.fit(X_train)


score = metrics.accuracy_score(y_test,k_means.predict(X_test))
print('Accuracy:{0:f}'.format(score))

print(k_means.predict(X_test))
print(k_means.labels_[:])
print(y_test[:])

问题是我得到了 0.0 的准确度

Accuracy:0.000000

[0 0 1 2 1 2 1 0 0 0 2 0 0 0 0 1 0 0 1 1 0 0 1 1 0 1 1 0 0 1 2 0 1 0 2 0 1
 0 0 0 2 1 2 1 1]

[0 2 2 0 2 0 2 0 0 0 0 0 0 2 2 0 1 0 0 0 0 0 2 1 1 2 0 1 1 2 1 0 0 1 0 2 0
 1 2 2 2 2 1 1 2 2 1 2 1 0 2 1 1 2 1 1 1 0 2 2 1 1 1 0 0 1 1 0 1 2 0 2 0 1
 0 1 2 1 1 2 1 2 0 0 0 2 2 0 2 1 0 2 0 1 0 0 0 0 1 1 1 2 0 2 1]

114     virginica

62     versicolor

33         setosa
 .
 .
 .

【问题讨论】:

  • 你没有发布问题
  • 为什么我的准确率是 0.0

标签: python scikit-learn k-means


【解决方案1】:

我认为问题在于 kmeans 会预测集群(0,1 或 2)。但它们的标签不一定与您的标签相同。例如 - 也许 kmeans 会将样本映射到集群 0,即物种 = 1。 您必须检查每个集群的标签并将 y_test 与它进行比较。

【讨论】:

    【解决方案2】:

    您正在使用准确性,就好像您在处理分类任务一样。 KMeans 是一种聚类方法(无监督学习),因此它会构建聚类而不是预测类。正如其他人已经指出的那样,效果是集群的数量或多或少是随机的。因此,如果您有 - 这仅适用于学术和/或玩具问题 - 与您比较聚类的分类必须执行额外的步骤。

    1. 使用聚类算法构建聚类
    2. 查看哪个集群与给定类集的重叠最大
    3. 重新分配有关重叠的数字
    4. 看看有多少集群和类不同

    这在教授机器学习时很常见。使用 iris 数据很常见,因为它很容易建立一个完美的分类模型(监督),但在聚类(无监督)方面则完全不同。如果您查看您的 KMeans 结果,请记住 KMeans 始终针对使用的规范/度量构建凸集群。

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 2020-06-11
      • 1970-01-01
      • 2018-09-13
      • 2013-04-29
      • 2020-10-05
      • 2018-04-21
      • 2019-01-25
      • 2018-05-25
      相关资源
      最近更新 更多