集群数据的散点图,显示集群和中心
Scatterplot of clustered data, to show Clusters and Centers
我为每个数据找到了更好的聚类数量和我的聚类。
现在我可以绘制基于中心和聚类的散点图以查看数据吗?
这是我的数据集。
这是我使用的代码。
x = df_diabetes_normalizado['Glicose']
y = df_diabetes_normalizado['Massa Corporal']
Cluster = df_diabetes_normalizado['clusters']
centers = np.random.randn(1, 2)
fig = plt.figure(figsize=(14,9))
ax = fig.add_subplot(111)
scatter = ax.scatter(x,y,c=Cluster,s=50)
for i,j in centers:
ax.scatter(i,j,s=50,c='red',marker='+')
ax.set_xlabel('x')
ax.set_ylabel('y')
fig.show()
不过剧情对我来说太乱了
能否请您指导我如何修复我的脚本以生成基于中心和聚类分布的正确散点图?
使用 iris
数据集的示例:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:,0:2]
y = iris.target
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
assignments = kmeans.labels_ # this is the CLUSTERS column in your case
plt.figure(figsize=(12,8))
classes = np.unique(assignments)
colors= ['r','b','k','y'] # 4 CLUSTERS SO 4 COLORS HERE
for s,l in enumerate(classes):
xs = X[:,0]
ys = X[:,1]
plt.scatter(xs[assignments==s], ys[assignments==s], c = colors[s]) # color based on group
plt.plot(kmeans.cluster_centers_[0][0], kmeans.cluster_centers_[0][1], 'ro',markersize=16, alpha = 0.5, label='')
plt.plot(kmeans.cluster_centers_[1][0], kmeans.cluster_centers_[1][1], 'bo',markersize=16, alpha = 0.5)
plt.plot(kmeans.cluster_centers_[2][0], kmeans.cluster_centers_[2][1], 'ko',markersize=16, alpha = 0.5)
plt.plot(kmeans.cluster_centers_[3][0], kmeans.cluster_centers_[3][1], 'yo',markersize=16, alpha = 0.5)
plt.grid()
因为
- 你绘制了错误的变量:你的因变量应该是 'Classe'(1/0,大概是糖尿病与否) 不是 'clusters' ,它只是一个整数,告诉你有多少集群表现出这些特征,而不是它们是在
Classe==0
还是 1
.
- 显然你有 8 个变量('Numero Gravida'、'Glicose'、'Pressao'、...、'Idade')和 你的因变量('Classe') 是所有 8 个 的函数,而不仅仅是您任意选择绘制的两个函数:x='Glicose' 和 y='Massa Corporal'.
1) clusters
只是一个整数,它告诉您有多少集群表现出这些特征,而不是每个集群是在 Classe==0
还是 1
中。
Cluster = df_diabetes_normalizado['clusters']
...
scatter = ax.scatter(x,y,c=Cluster, ...)
您的图错误地使用颜色来显示 c=Cluster
,即聚类的数量,您没有在任何地方绘制 Classe
。改为绘制 Classe
。 (您可能会选择使用 size=Clusters
,因此较大的簇绘制得较大)
2) 'Generate the correct scatterplot [of two variables]'定义不明确;显然你有 8 个变量 ('Numero Gravida', 'Glicose', 'Pressao', ..., 'Idade') 和 你的因变量 ('Classe')是其中所有 8 个 的函数,而不仅仅是您任意选择绘制的两个:x='Glicose' 和 y='Massa Corporal'.
- 假设您不想绘制 3D 或 n 维图,您可以:
- 使用 PCA(主成分分析) 进行一些降维,然后绘制最重要的 two/three 伪变量(参见 this example...)
- 或者根据自定义聚类距离函数构建模型。
如果您 post MCVE 用于您的数据集,并且您告诉我们您实际想要什么样的图,那么可以 post 编码。
我为每个数据找到了更好的聚类数量和我的聚类。
现在我可以绘制基于中心和聚类的散点图以查看数据吗?
这是我的数据集。
这是我使用的代码。
x = df_diabetes_normalizado['Glicose']
y = df_diabetes_normalizado['Massa Corporal']
Cluster = df_diabetes_normalizado['clusters']
centers = np.random.randn(1, 2)
fig = plt.figure(figsize=(14,9))
ax = fig.add_subplot(111)
scatter = ax.scatter(x,y,c=Cluster,s=50)
for i,j in centers:
ax.scatter(i,j,s=50,c='red',marker='+')
ax.set_xlabel('x')
ax.set_ylabel('y')
fig.show()
不过剧情对我来说太乱了
能否请您指导我如何修复我的脚本以生成基于中心和聚类分布的正确散点图?
使用 iris
数据集的示例:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:,0:2]
y = iris.target
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
assignments = kmeans.labels_ # this is the CLUSTERS column in your case
plt.figure(figsize=(12,8))
classes = np.unique(assignments)
colors= ['r','b','k','y'] # 4 CLUSTERS SO 4 COLORS HERE
for s,l in enumerate(classes):
xs = X[:,0]
ys = X[:,1]
plt.scatter(xs[assignments==s], ys[assignments==s], c = colors[s]) # color based on group
plt.plot(kmeans.cluster_centers_[0][0], kmeans.cluster_centers_[0][1], 'ro',markersize=16, alpha = 0.5, label='')
plt.plot(kmeans.cluster_centers_[1][0], kmeans.cluster_centers_[1][1], 'bo',markersize=16, alpha = 0.5)
plt.plot(kmeans.cluster_centers_[2][0], kmeans.cluster_centers_[2][1], 'ko',markersize=16, alpha = 0.5)
plt.plot(kmeans.cluster_centers_[3][0], kmeans.cluster_centers_[3][1], 'yo',markersize=16, alpha = 0.5)
plt.grid()
因为
- 你绘制了错误的变量:你的因变量应该是 'Classe'(1/0,大概是糖尿病与否) 不是 'clusters' ,它只是一个整数,告诉你有多少集群表现出这些特征,而不是它们是在
Classe==0
还是1
. - 显然你有 8 个变量('Numero Gravida'、'Glicose'、'Pressao'、...、'Idade')和 你的因变量('Classe') 是所有 8 个 的函数,而不仅仅是您任意选择绘制的两个函数:x='Glicose' 和 y='Massa Corporal'.
1) clusters
只是一个整数,它告诉您有多少集群表现出这些特征,而不是每个集群是在 Classe==0
还是 1
中。
Cluster = df_diabetes_normalizado['clusters']
...
scatter = ax.scatter(x,y,c=Cluster, ...)
您的图错误地使用颜色来显示 c=Cluster
,即聚类的数量,您没有在任何地方绘制 Classe
。改为绘制 Classe
。 (您可能会选择使用 size=Clusters
,因此较大的簇绘制得较大)
2) 'Generate the correct scatterplot [of two variables]'定义不明确;显然你有 8 个变量 ('Numero Gravida', 'Glicose', 'Pressao', ..., 'Idade') 和 你的因变量 ('Classe')是其中所有 8 个 的函数,而不仅仅是您任意选择绘制的两个:x='Glicose' 和 y='Massa Corporal'.
- 假设您不想绘制 3D 或 n 维图,您可以:
- 使用 PCA(主成分分析) 进行一些降维,然后绘制最重要的 two/three 伪变量(参见 this example...)
- 或者根据自定义聚类距离函数构建模型。
如果您 post MCVE 用于您的数据集,并且您告诉我们您实际想要什么样的图,那么可以 post 编码。