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

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2022年5月7日
下一篇 2022年5月7日

相关推荐