一、知识点补充
1.make_blobs用来生成聚类算法的测试数据。根据用户指定的特征数量、中心点数量、范围等来生成几类数据,这些数据可以用于聚类算法的测试效果。
二、代码
前三个是随机生成的,最后一个是input的数据
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
#建立12*12英寸的图像
plt.figure(figsize=(12,12))
n_samples=1500
random_state=170
#x返回的是向量化的数据点,y返回的是对应的数据类别号
x,y=make_blobs(n_samples=n_samples,random_state=random_state)
print('x=',x,type(x),'y=',y)
#使用KMeans去聚类,返回聚好的类别集合,n_cluster 聚成几类
y_pred=KMeans(n_clusters=3,random_state=random_state).fit_predict(x)
print("y_pred:",y_pred)
#subplot 绘制多个字母图,221等价于2,2,1表示两行两列字母中第一个
plt.subplot(221)
#scatter绘制散点图,c指的是颜色,根据不同的类给不同的颜色
plt.scatter(x[:,0],x[:,1],c=y_pred) #套公式就行了
plt.title("kMeans01")
#矩阵
transformation=[[0.608,-0.6367],
[-0.4089,0.8525]]
x_aniso=np.dot(x,transformation)#矩阵相乘
y_pred=KMeans(n_clusters=3,random_state=random_state).fit_predict(x_aniso)
plt.subplot(222)
plt.scatter(x_aniso[:,0],x_aniso[:,1],c=y_pred)
plt.title("KMeans02")
#vstack是合并矩阵,将y=0的取出100行
x_filtered=np.vstack((x[y==0][:500],x[y==1][:100],x[y==2][:10]))
y_pred=KMeans(n_clusters=3,random_state=random_state).fit_predict(x_filtered)
plt.subplot(223)
plt.scatter(x_filtered[:,0],x_filtered[:,1],c=y_pred)
plt.title("KMeans03")
#数据导入准备 这里就直接导入了,要多学习不同的做法,及时积累
dataMat=[]
fr=open("testSet.txt","r")
for line in fr.readlines:
#if line.strip() <> "":
#这里其实是知道数据有空行和空格,不知道为什么老师写了运行了行,我却报错在jupyter notebook上
curLine=line.strip().spplit('\t')
fltLine=map(float,curLine)
dataMat.append(fltLine)
dataMat=np.array(dataMat)#能知道和理解为什么这么写,但是好像不是自己逻辑理解的范围之内的
y_pred=kmeans(n_clusters=4).fit_predict(dataMat)
plt.subplot(224)
plt.scatter(data[:,0],dataMat[:,1],c=y_pred)
plt.title("KMeans04")
plt.savefig("./Kmeans.png")
plt.show()