整体思路:创建随机据类数据集,然后对其进行分类,然后画散点图
####小编第一次自己用python写的东西,在这里先说明一下,注意矩阵到list转化,注意注意注意##### import numpy as np import matplotlib.pyplot as plt from sklearn.datasets.samples_generator import make_blobs X, y = make_blobs(n_samples=300, n_features=2, centers=[[1,1], [5,5], [2,9]], cluster_std=[0.4, 0.5, 0.2]) 这里面的X是生成的数据(300*2),y 为种类这里我没有用到 avg1=X[0:3,:] #这是三个类别的平均值,开始随机选的三个点作为开始的平均值。 L=[4]*len(X)#装数据种类用的 distance=[4]*(len(X))#每个点到最近的那个点的距离 #print(distance) def plant(s1,s2,s3): plt.scatter(s1[:, 0], s1[:, 1], marker='x', c='r') # print(s2) plt.scatter(s2[:, 0], s2[:, 1], marker='v', c='b') plt.scatter(s3[:, 0], s3[:, 1], marker='o', c='g') plt.show() for x in range(2):#这里用了最少的两次,想不明白为什么两次就可以分开???????????? s1=[] #用来存分完类的数据 s2=[] s3=[] l=len(X) for j in range(l): L[j]=0 distance[j]=np.linalg.norm(X[j] - avg1[0])#计算两个向量之间的距离 AVG=avg1[1:3,:] i1=1; for j1 in AVG : #求得最小距离 dis=np.linalg.norm(X[j] - j1) # if(dis<distance[j]): # L[j]=i1; # distance[j]=dis # i1=i1+1; if(L[j]==0): s1.append(X[j]) elif(L[j]==1): s2.append(X[j]) else: s3.append(X[j]) s1=np.array(s1) s2 = np.array(s2) s3 = np.array(s3) s=[] s.append(s1) s.append(s2) s.append(s3) avg1f=avg1 avg2=list(avg1f) for k in range(3): avg=np.mean(s[k],axis=0) #avg array for i in range(2): if(avg[i]==avg1[k][i]): pass else: avg1[k]=avg plant(s1,s2,s3)