编辑:K 表示聚类并找到最接近质心的点
Posted
技术标签:
【中文标题】编辑:K 表示聚类并找到最接近质心的点【英文标题】:Edited: K means clustering and finding points closest to the centroid 【发布时间】:2021-07-11 19:08:29 【问题描述】:我正在尝试根据以下列中的信息将 k 均值应用于集群参与者
Actors Movies TvGuest Awards Shorts Special LiveShows
Robert De Niro 111 2 6 0 0 0
Jack Nicholson 70 2 4 0 5 0
Marlon Brando 64 2 5 0 0 28
Denzel Washington 25 2 3 24 0 0
Katharine Hepburn 90 1 2 0 0 0
Humphrey Bogart 105 2 1 0 0 52
Meryl Streep 27 2 2 5 0 0
Daniel Day-Lewis 90 2 1 0 71 22
Sidney Poitier 63 2 3 0 0 0
Clark Gable 34 2 4 0 3 0
Ingrid Bergman 22 2 2 3 0 4
Tom Hanks 82 11 6 21 11 22
#began by scaling my data
X = StandardScaler().fit_transform(data)
#used an elbow plot to find optimal k value
sum_of_squared_distances = []
K = range(1,15)
for k in K:
k_means = KMeans(n_clusters=k)
model = k_means.fit(X)
sum_of_squared_distances.append(k_means.inertia_)
plt.plot(K, sum_of_squared_distances, 'bx-')
plt.show()
#found yhat for the calculated k value
kmeans = KMeans(n_clusters=3)
model = kmeans.fit(X)
yhat = kmeans.predict(X)
无法弄清楚演员创建散点图。
编辑: 如果质心也是使用绘制的,有没有办法找到最接近质心的演员
centers = kmeans.cluster_centers_(这里的kmeans指的是下面Eric的解决方案)
plt.scatter(centers[:,0],centers[:,1],color='purple',marker='*',label='centroid')
【问题讨论】:
描述每个演员需要多少维度?您可以显示多少个维度才能看到某些东西?你认为你的选择是什么?您可能会受益于在Data Science 上发布您的问题,这将更适合此类问题。 不太确定。感谢您的堆栈交换建议 请注意将verbatim questions 交叉发布到多个SE 站点是not allowed;请仅在您认为您的问题更合适的地方选择一个站点,然后删除另一个站点中的帖子(事实上,目前还不清楚您的问题是什么确切 )。 【参考方案1】:K 表示 Pandas 中的聚类 - 散点图
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
df = pd.DataFrame(columns=['Actors', 'Movies', 'TvGuest', "Awards", "Shorts"])
df.loc[0] = ["Robert De Niro", 111, 2, 6, 0]
df.loc[1] = ["Jack Nicholson", 70, 2, 4, 0]
df.loc[2] = ["Marlon Brando", 64, 4, 5, 0]
df.loc[3] = ["Denzel Washington", 25, 2, 3, 24]
df.loc[4] = ["Katharine Hepburn", 90, 1, 2, 0]
df.loc[5] = ["Humphrey Bogart", 105, 2, 1, 0]
df.loc[6] = ["Meryl Streep", 27, 3, 2, 5]
df.loc[7] = ["Daniel Day-Lewis", 90, 2, 1, 0]
df.loc[8] = ["Sidney Poitier", 63, 2, 3, 0]
df.loc[9] = ["Clark Gable", 34, 2, 4, 0]
df.loc[10] = ["Ingrid Bergman", 22, 5, 2, 3]
kmeans = KMeans(n_clusters=4)
y = kmeans.fit_predict(df[['Movies', 'TvGuest', 'Awards']])
df['Cluster'] = y
plt.scatter(df.Movies, df.TvGuest, c=df.Cluster, alpha = 0.6)
plt.title('K-means Clustering 2 dimensions and 4 clusters')
plt.show()
演出:
请注意,二维散点图上显示的数据点是 Movies
和 TvGuest
,但 Kmeans 拟合给出了 3 个变量:Movies
、TvGuest
、Awards
。想象一下屏幕上有一个额外的维度,用于计算集群的成员资格。
来源链接:
https://datasciencelab.wordpress.com/2013/12/12/clustering-with-k-means-in-python/
https://datascience.stackexchange.com/questions/48693/perform-k-means-clustering-over-multiple-columns
https://towardsdatascience.com/visualizing-clusters-with-pythons-matplolib-35ae03d87489
【讨论】:
说如果我也绘制质心,有没有办法找出最接近质心的演员 like center = kmeans.cluster_centers_plt.scatter(centers[:,0],centers[:,1],color='purple',marker='*',label='centroid') 您的问题是关于演员分解出的 kmeans 散点图。我回答说,如果您有后续问题正在探索:"what if we do something different in a new context, can we do that?"
,答案是肯定的,这将是一个新问题。
您好,由于某种原因,我的问题已达到上限。 (只问了 2 个问题)。
我已经修改了问题,如果可以的话以上是关于编辑:K 表示聚类并找到最接近质心的点的主要内容,如果未能解决你的问题,请参考以下文章
如何使用sklearn找到最接近K的点的索引意味着聚类中心?