K-means算法属于无监督学习,根本思想是将数据集中数据分为k组,计算各组元素到其聚类中心的欧氏距离。
在K-means方法中主要需要解决的问题是确定合适的分组数k,此时引入轮廓系数,通过计算不同分组数k下的轮廓系数确定最佳的k值。
Python中实现基于轮廓系数法的K-means聚类需要用到sklearn库中的相关部分和Pandas包。
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import pandas as pd
第一步,读取数据,将对应的数据特征值划分为数组作为聚类的准备工作:
data = pd.read_csv('E:/文件夹1/文件夹2/聚类数据集.csv')
data = data[['特征1','特征2','特征3']] #选择需要的分类特征值
data_Array = data.values #生成数组,以便进行聚类
第二步,通过遍历不同的k值,计算对应的轮廓系数值:
def Silhouette_ALL(n): #定义的轮廓系数函数
data_Cluster = KMeans(n_clusters = n)
data_Cluster.fit(data_Array)
label = data_Cluster.labels_
Silhouette_Coefficient = silhouette_score(data_Array, label)
return Silhouette_Coefficient
y=[]
for n in range(2,10): #遍历不同k值下轮廓系数
data_data_Silhouette_mean = Silhouette_ALL(n)
y.append(data_data_Silhouette_mean)
print(y)
第三步,选择步骤二中y中轮廓系数最大的项,将其对应的分组数作为K-means的k值进行计算,得到最佳的分类结果:
data_Cluster = KMeans(n_clusters=4) #n_clusters=y中轮廓系数最大值对应的分组数
data_Cluster.fit(data_Array)
label = data_Cluster.labels_ #获得聚类标签
center = data_Cluster.cluster_centers_ #聚类中心
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)