kMeAnS代码

Kmeans算法是一个无监督算法,

他是根据一大堆数据自己训练出他自己是属于哪一类型的,本质上也是算距离

我们先自己搞一个已经做好分类的kmeans数据集

from sklearn.datasets import make_blobs #自己创建数据集 
X, y = make_blobs(n_samples=500,n_features=2,centers=4,random_state=1)  #有500样本,2个类别,4个中心点
plt.scatter(X[:, 0], X[:, 1], marker='o')#点的形状 ,s=8 #点的大小

color = ["red","pink","orange","gray"] 
for i in range(4): 
	plt.scatter(X[y==i, 0], X[y==i, 1]
	,marker='o'   #点的形状 
	,s=8         #点的大小 
	,c=color[i] ) 
plt.show()

# 这样就看到了一个可视化的kmeans图

下面来正式导入sklearn实践

from sklearn.cluster import KMeans 
n_clusters = 3 
cluster = KMeans(n_clusters=n_clusters, random_state=0).fit(X) 

cluster.labels_   #重要属性 labels_,查看聚好的类别,每个样本所对应的类
cluster.cluster_centers_  #这个是用来看质心的坐标的

# 如何衡量模型的好坏,用轮廓系数:
# 依赖评价簇内的稠密程度(簇内差异小)和簇间的离散程度(簇外差异大)来评估聚类的效果
# 轮廓系数越接近 1:样本与自己所在的簇中的样本很相似,并且与其他簇中的样本不相似。
# 轮廓系数为 0 时:两个簇中的样本相似度一致,两个簇本应该是一个簇。
# 轮廓系数为负时:样本点与簇外的样本更相似。

from sklearn.metrics import silhouette_score   #返回的是一个数据集中,所有样本的轮廓系数的均值。
from sklearn.metrics import silhouette_samples  #返回的是数据集中每个样本自己的轮廓系数

import pandas as pd 
score=[] 
for i in range(2,100): 
	cluster= KMeans(n_clusters=i, random_state=0).fit(X) 
	score.append(silhouette_score(X,cluster.labels_)) 
plt.plot(range(2,100),score) 
plt.axvline(pd.DataFrame(score).idxmin()[0]+2,ls=':')

猜你喜欢

转载自blog.csdn.net/weixin_44820355/article/details/124712075