聚类数据的散点图,以显示聚类和中心

时间:2019-12-09 11:34:46

标签: python scikit-learn cluster-analysis scatter-plot

我发现簇的数量更好,并且我的簇用于eacch数据。

现在我可以根据中心和群集绘制散点图以查看数据吗?

这是我的数据集。

enter image description here

这是我使用的代码。

from datetime import datetime

# Get first of the month
currentmonth = datetime.now.strftime('%Y-%m-01')

# separate the month, and increment
split = currentmonth.split("-")
split[1] = str(int(split[1])-1)
lastmonth = '-'.join(split)

但是情节对我来说真是个混混。

enter image description here

能否请给我一些指导,以说明如何根据中心和聚类分布来修复脚本,以使我的正确分类更为成功?

2 个答案:

答案 0 :(得分:1)

使用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() 

enter image description here

答案 1 :(得分:1)

因为

  1. 您正在绘制错误的变量:您的因变量应为“ Classe”(1/0,大概是糖尿病患者与否)不是“ clusters”,这只是一个整数,它告诉您如何许多集群都表现出这些特征,而不管它们处于Classe==0还是1中。
  2. 很明显,您有8个变量(“ Numero Gravida”,“ Glicose”,“ Pressao”,...,“ Idade”),并且因变量(“ Classe”)是所有8个变量的函数,而不仅仅是您随意选择的两个图:x ='Glicose'和y ='Massa Corporal'。

1)clusters只是一个整数,它告诉您有多少簇具有这些特征,而不是每个簇都位于Classe==01中。

    Cluster = df_diabetes_normalizado['clusters']
    ...
    scatter = ax.scatter(x,y,c=Cluster, ...)

您的绘图错误地使用颜色显示c=Cluster,即簇数,您并未在任何地方绘制Classe。改为绘制Classe。 (您可能会选择使用size=Clusters,因此较大的簇会更大)

2)“生成[两个变量]的正确散点图”的定义不明确;显然,您有8个变量(“ Numero Gravida”,“ Glicose”,“ Pressao”,...,“ Idade”),并且您的因变量(“ Classe”)是所有8个变量的函数,而不仅仅是您随意选择的两个图:x ='Glicose'和y ='Massa Corporal'。

  • 假设您不想进行3D或n维绘图,则可以执行以下操作:
  • 使用 PCA(主成分分析)进行降维,然后绘制最重要的两个/三个伪变量(例如,见this example ...)
  • 或者基于自定义簇距离函数构建模型。

如果您为数据集发布MCVE,并且告诉我们您真正想要哪种绘图,则可以发布代码。