Python_无监督学习_基于轮廓系数法的K-means聚类实现

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_                #聚类中心

你可能感兴趣的:(无监督学习,Python学习笔记,聚类,python)