набор данных радужной оболочки K_means - PullRequest
0 голосов
/ 24 января 2020

вопрос в том, почему я получаю 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
 .
 .
 .

Ответы [ 2 ]

0 голосов
/ 25 января 2020

Вы используете точность, как будто вы имеете дело с задачей классификации. KMeans - это метод кластеризации (обучения без учителя), поэтому он будет создавать кластер, а не предсказывать классы. Как уже сказал кто-то другой, эффект состоит в том, что числа кластеров более или менее случайны. Поэтому, если у вас есть - что справедливо только для академических c и / или игрушечных задач - классификация, чтобы сравнить кластеризацию с вами, должна выполнить дополнительный шаг.

  1. Использование кластерного алгоритма для построения кластеров
  2. Посмотрите, какой кластер имеет наибольшее перекрытие с заданным набором классов
  3. Переназначение чисел относительно перекрытий
  4. Посмотрите, насколько отличаются кластеры и классы

Это часто встречается, когда речь идет о преподавании машинного обучения. Как и обычно, используются данные радужной оболочки, потому что довольно просто построить идеальную модель классификации (под наблюдением), но это совсем другая история, когда речь идет о кластеризации (без присмотра). Если вы посмотрите на результаты KMeans, имейте в виду, что KMeans всегда строит выпуклые кластеры относительно используемой нормы / метри c.

0 голосов
/ 25 января 2020

Я думаю, что проблема в том, что kmeans будет предсказывать кластер (0,1 или 2). Но они не обязательно помечены так же, как ваши ярлыки. Например - может быть, kmeans отобразит выборку в кластер 0, который видов = 1. Вы должны проверить метку каждого кластера и сравнить y_test с ней.

...