![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第1张图片](http://img.e-com-net.com/image/info8/11653c0e257f4cf7972fd41bf6303000.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第2张图片](http://img.e-com-net.com/image/info8/1061e0ec8e5d41a7990a0f666a6c9647.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第3张图片](http://img.e-com-net.com/image/info8/63796efc15b243849ec3fff2a0d17184.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第4张图片](http://img.e-com-net.com/image/info8/3bb62d5e5e8e41859be622e89af6b7b2.jpg)
from sklearn.cluster import KMeans
cluster=KMeans(n_clusters=3,random_state=0).fit(X)
y_pred=cluster.labels_
color=["red","pink","orange","gray"]
#根据聚类结果画图
fig,ax1=plt.subplots(1)
for i in range(3):
ax1.scatter(X[y_pred==i,0],X[y_pred==i,1]
,marker='o'
,s=8,
c=color[i])
ax1.scatter(cluster.cluster_centers_[:,0],cluster.cluster_centers_[:,1]
,marker="x"
,s=20,
c="black"
)
plt.show()
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第5张图片](http://img.e-com-net.com/image/info8/92d663bcd2b24377bfa341910b49ecb1.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第6张图片](http://img.e-com-net.com/image/info8/72ba616618f94e389fc5a9670c6f7524.jpg)
![在这里插入图片描述](http://img.e-com-net.com/image/info8/bbf36c2d6a5441108ca0115fd1764b75.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第7张图片](http://img.e-com-net.com/image/info8/90068e475ccc4ea5a2a840d52de86e46.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第8张图片](http://img.e-com-net.com/image/info8/571a4ec3aa4948cd8d78260920fd45c3.jpg)
![在这里插入图片描述](http://img.e-com-net.com/image/info8/f56828263a5141678159479b2302b644.jpg)
#聚类算法的模型评估指标
#轮廓系数是对每一个样本而言的,不是针对某一簇而言
from sklearn.metrics import silhouette_samples
from sklearn.metrics import silhouette_score
cluster=KMeans(n_clusters=4,random_state=0).fit(X)
y_pred=cluster.labels_
silhouette_score(X,y_pred)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第9张图片](http://img.e-com-net.com/image/info8/c7038997bdb54e99837a79437c23e850.jpg)
![在这里插入图片描述](http://img.e-com-net.com/image/info8/2bd04f1b61174caa86cf5465a65fd75e.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第10张图片](http://img.e-com-net.com/image/info8/5ceb8dce67fc437193cec2853189e6ac.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第11张图片](http://img.e-com-net.com/image/info8/6fbc4b193b684ffb8198c6c9ab2658e5.jpg)
![在这里插入图片描述](http://img.e-com-net.com/image/info8/77bc348428ce436e8e46b2fab9f207c6.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第12张图片](http://img.e-com-net.com/image/info8/7fab602b3a5847ff97acfd156d1c4b7b.jpg)
![在这里插入图片描述](http://img.e-com-net.com/image/info8/7b505a44b29d4e50a3d1758d3a24d9bc.jpg)
#通过轮廓系数来选择最佳的n_clusters,之所以不选择学习曲线是因为它不能很好的展示分类结果
#sklearn中的kmeans使用的是欧式距离
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cm as cm#colormap用来画图
#自己创建数据集
X,y=make_blobs(n_samples=500,n_features=2,centers=4,random_state=0)
n_clusters=4
#创建一个画布,画布上有2个子图对象
fig,(ax1,ax2)=plt.subplots(1,2)
#设置画布的尺寸
fig.set_size_inches(18,7)
#第一个图是轮廓系数图像,由每个样本的轮廓系数作为横坐标
#横向条形图,纵坐标是每个样本,并且要求同一簇内的放在一起,同样的颜色,
ax1.set_xlim([-0.1,1])
ax1.set_ylim([0,X.shape[0]+(n_clusters+1)*10])
#开始建模
clusterer=KMeans(n_clusters=n_clusters,random_state=10).fit(X)
silhouette_avg=silhouette_score(X,clusterer.labels_)#整体的轮廓系数
print("FOR n_clusters=",n_clusters,"the average silhouette_score is ",silhouette_avg)
#返回每个样本的轮廓系数作为横坐标,并且把横坐标进行排序
sample_silhouette_values=silhouette_samples(X,clusterer.labels_)
#设定y轴上的初始取值
y_lower=10
#接下来对每一个簇进行循环
for i in range(n_clusters):
ith_cluster_silhouette_values=sample_silhouette_values[clusterer.labels_==i]
ith_cluster_silhouette_values.sort()
#得出该簇中的样本总数
size_cluster_i=ith_cluster_silhouette_values.shape[0]
#这一簇的纵坐标就是y_lower+样本总数
y_upper=y_lower+size_cluster_i
#colormap使用小数来调用颜色的函数
#nipy_spectral(输入任意小数代表一个颜色)(i)
color=cm.nipy_spectral(float(i)/n_clusters)
#开始填充图像
#fill_between是填充曲线与直角之间空间的函数
#fill_betweenx的直角实在纵坐标上,定义曲线点的横坐标,纵坐标,颜色
#fill_betweeny的直角实在横坐标上
ax1.fill_betweenx(np.arange(y_lower,y_upper)
,ith_cluster_silhouette_values
,facecolor=color
,alpha=0.7)
ax1.text(-0.05,y_lower+0.5*size_cluster_i,str(i))
y_lower=y_upper+10
ax1.set_title("The silhouette plot for the various clusters.")
ax1.set_xlabel("The silhouette coefficient values")
ax1.set_ylabel("Cluster label")
ax1.axvline(x=silhouette_avg, color="red", linestyle="--")#设置一条均线
ax1.set_yticks([])
ax1.set_xticks([-0.1, 0, 0.2, 0.4, 0.6, 0.8, 1])
colors = cm.nipy_spectral(clusterer.labels_.astype(float) / n_clusters)
ax2.scatter(X[:,0],X[:,1]
,c=colors,
marker="o",
s=8)
centers=clusterer.cluster_centers_
ax2.scatter(centers[:,0],centers[:,1]
,marker="x"
,s=15,
c="black")
plt.show()
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第13张图片](http://img.e-com-net.com/image/info8/bfdf369318f4484f951037dddb9b282f.jpg)
for n_clusters in [2,3,4,5,6,7]:
#创建一个画布,画布上有2个子图对象
fig,(ax1,ax2)=plt.subplots(1,2)
#设置画布的尺寸
fig.set_size_inches(18,7)
#第一个图是轮廓系数图像,由每个样本的轮廓系数作为横坐标
#横向条形图,纵坐标是每个样本,并且要求同一簇内的放在一起,同样的颜色,
ax1.set_xlim([-0.1,1])
ax1.set_ylim([0,X.shape[0]+(n_clusters+1)*10])
#开始建模
clusterer=KMeans(n_clusters=n_clusters,random_state=10).fit(X)
silhouette_avg=silhouette_score(X,clusterer.labels_)#整体的轮廓系数
print("FOR n_clusters=",n_clusters,"the average silhouette_score is ",silhouette_avg)
#返回每个样本的轮廓系数作为横坐标,并且把横坐标进行排序
sample_silhouette_values=silhouette_samples(X,clusterer.labels_)
#设定y轴上的初始取值
y_lower=10
#接下来对每一个簇进行循环
for i in range(n_clusters):
ith_cluster_silhouette_values=sample_silhouette_values[clusterer.labels_==i]
ith_cluster_silhouette_values.sort()
#得出该簇中的样本总数
size_cluster_i=ith_cluster_silhouette_values.shape[0]
#这一簇的纵坐标就是y_lower+样本总数
y_upper=y_lower+size_cluster_i
#colormap使用小数来调用颜色的函数
#nipy_spectral(输入任意小数代表一个颜色)(i)
color=cm.nipy_spectral(float(i)/n_clusters)
#开始填充图像
#fill_between是填充曲线与直角之间空间的函数
#fill_betweenx的直角实在纵坐标上,定义曲线点的横坐标,纵坐标,颜色
#fill_betweeny的直角实在横坐标上
ax1.fill_betweenx(np.arange(y_lower,y_upper)
,ith_cluster_silhouette_values
,facecolor=color
,alpha=0.7)
ax1.text(-0.05,y_lower+0.5*size_cluster_i,str(i))
y_lower=y_upper+10
ax1.set_title("The silhouette plot for the various clusters.")
ax1.set_xlabel("The silhouette coefficient values")
ax1.set_ylabel("Cluster label")
ax1.axvline(x=silhouette_avg, color="red", linestyle="--")#设置一条均线
ax1.set_yticks([])
ax1.set_xticks([-0.1, 0, 0.2, 0.4, 0.6, 0.8, 1])
colors = cm.nipy_spectral(clusterer.labels_.astype(float) / n_clusters)
ax2.scatter(X[:,0],X[:,1]
,c=colors,
marker="o",
s=8)
centers=clusterer.cluster_centers_
ax2.scatter(centers[:,0],centers[:,1]
,marker="x"
,s=15,
c="black")
plt.show()
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第14张图片](http://img.e-com-net.com/image/info8/70494e799327473b8b32a3a24d1dbed4.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第15张图片](http://img.e-com-net.com/image/info8/9f899bdc7fa24edabbeb908dbcb4df78.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第16张图片](http://img.e-com-net.com/image/info8/263a2dbc5f4143198f9aa069fa23a797.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第17张图片](http://img.e-com-net.com/image/info8/289440a8197343a5be63026a1b6ce6b3.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第18张图片](http://img.e-com-net.com/image/info8/365c30dd34334f348f316303de62dd14.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第19张图片](http://img.e-com-net.com/image/info8/e47da8fb0d1c4cef8bd2de8b6b72e754.jpg)
并不是选择轮廓系数最高的,而是根据业务需求进行选择
矢量量化
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第20张图片](http://img.e-com-net.com/image/info8/ce4f37862eba4f8897d408e86d7ee1c3.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第21张图片](http://img.e-com-net.com/image/info8/5b1c2033f0104101940ad75b97d9c60f.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第22张图片](http://img.e-com-net.com/image/info8/d5e3fbe9da8f49f8a85f8388fdb0e99f.jpg)
#使用kmeans做矢量量化
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import pairwise_distances_argmin
#对两个序列中的点进行距离匹配的函数
from sklearn.datasets import load_sample_image
#导入图片数据的类
from sklearn.utils import shuffle
#打乱一个有序的序列,用来洗牌等
china=load_sample_image("china.jpg")#图片一般是三维数据
china
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第23张图片](http://img.e-com-net.com/image/info8/920e72426a544f4996bdce9f9104e6ed.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第24张图片](http://img.e-com-net.com/image/info8/5ab8efdc962f4617b3fdf6d9b7fd730d.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第25张图片](http://img.e-com-net.com/image/info8/17809084052a459dbea5f73012196f4a.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第26张图片](http://img.e-com-net.com/image/info8/0cbdb1f0374447d5b9d4e3622f92a17a.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第27张图片](http://img.e-com-net.com/image/info8/767fb48150584128a4421ddc21da69a3.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第28张图片](http://img.e-com-net.com/image/info8/9c8cb9979cfb482a952d683cc837e2f9.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第29张图片](http://img.e-com-net.com/image/info8/97152972251b4b34b34ac92d91b56a7c.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第30张图片](http://img.e-com-net.com/image/info8/38ad88e9cf0c4183857aeb100b25c5a3.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第31张图片](http://img.e-com-net.com/image/info8/e9baa3c5f1df408196d8433cee032267.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第32张图片](http://img.e-com-net.com/image/info8/0af140bab2e14a74be5d5a4cb69c3d27.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第33张图片](http://img.e-com-net.com/image/info8/73b4686ac44949a9b9c8584d16d8d607.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第34张图片](http://img.e-com-net.com/image/info8/68599d2fd7df44b1a60368fb4806d4b8.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第35张图片](http://img.e-com-net.com/image/info8/c554b047aa734871bf46c6df5e593302.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第36张图片](http://img.e-com-net.com/image/info8/56de6a71a5fc454d8f978d759ea924b7.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第37张图片](http://img.e-com-net.com/image/info8/922cd1c016ac46e69ad5bd3db4ab0afc.jpg)
![kmeans学习笔记轮廓系数以及使用KMeans做矢量量化_第38张图片](http://img.e-com-net.com/image/info8/8917c6c20a5c4a6cb05d815f4a940bee.jpg)