#python #machine-learning #k-means
#python #машинное обучение #k-означает
Вопрос:
Я применил K-средние значения к задаче, в которой у меня есть случайный набор данных возраста и веса, после применения K средних я все еще не могу понять, почему точки данных не сходятся к центроидам.
age = [20,21,22,20,21,22,23,27,28,26,23,28,29,33,28,25,24,28,29,30,33,31,40,22,28,29,27,25,29,23]
weight = [80,50,70,50,82,49,60,66,76,45,66,86,77,56,76,81,72,92,72,91,72,75,60,61,99,54,56,45,40,76]
df_main = pd.DataFrame({'age':age_array,'weight':weight_array})
X_std = StandardScaler().fit_transform(df)
# Run local implementation of kmeans
km = KMeans(n_clusters=2, max_iter=100)
km.fit(X_std)
centroids = km.cluster_centers_
# Plot the clustered data
fig, ax = plt.subplots(figsize=(6, 6))
plt.scatter(X_std[km.labels_ == 0, 0], X_std[km.labels_ == 0, 1],
c='green', label='cluster 1')
plt.scatter(X_std[km.labels_ == 1, 0], X_std[km.labels_ == 1, 1],
c='blue', label='cluster 2')
plt.scatter(centroids[:, 0], centroids[:, 1], marker='*', s=50,
c='red', label='centroid')
plt.legend()
plt.xlim([-2, 2])
plt.ylim([-2, 2])
plt.xlabel('Age')
plt.ylabel('Height')
plt.title('Visualization of clustered data', fontweight='bold')
Комментарии:
1. Что вы подразумеваете под «точками данных, не сходящимися к центроидам»? Точки данных статичны, они не могут сходиться ни к чему
2. Я не могу различить, например, какая точка переходит в первый кластер, а какая — во второй кластер, поскольку оба они объединены. Разве они не должны быть похожи на какую-то строку, которая показывает, что вышеуказанные точки относятся к первому кластеру, а нижняя — к второму кластеру? Извините, если я ошибаюсь, я новичок в этом. @ForceBru
3. Один кластер синий, а другой зеленый — они не выглядят объединенными для меня. Если вы используете scikit-learn,
km.labels_
это именно тот способ классификации точек, и, похоже, вы делаете это правильно
Ответ №1:
Я думаю, вы не до конца понимаете k-средства.
Что на самом деле происходит, так это то, что на каждой итерации центроиды пересчитываются, чтобы минимизировать расстояние между ними и точками данных. (на первой итерации они выбираются случайным образом или с помощью другой инициализации).
Когда процесс завершается, мы пересчитываем для каждой точки данных расстояние от нее до центроидов, и минимальное расстояние определяет, к какому набору относится эта точка данных. Поэтому центроиды обычно не сходятся ни к одной точке данных, на самом деле, если это происходит, это признак того, что ваши гиперпараметры могут быть оптимизированы (например, уменьшить k).
Комментарии:
1. Да, моя концепция была слабой. Я читал об этом, поэтому начал внедрять, думаю, мне нужно больше учиться. :), хотя спасибо.