一维聚类
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
data=pd.read_excel(r'C:\Users\11960\Desktop\k-means1.xlsx') #加载数据
data1=data['R1'] #取某列数据
data1=np.array(data1) #变成数组
data=[[i]for i in data1] #生成一个一个的列表
julei=KMeans(n_clusters=4) #进行Kmeans聚类,设置聚类数4类
julei.fit(data) #对数据聚类
label=julei.labels_ #获得聚类标签
center=julei.cluster_centers_ #聚类中心
多维聚类
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples
data=pd.read_excel(r'C:\Users\11960\Desktop\k-means1.xlsx') #读入数据
def juleipingjia(n): #n为聚类数,循环计算聚类数从2到n-1的轮廓系数进行聚类评价
julei=KMeans(n_clusters=n) #设置聚类数
julei.fit(data) #聚类
label=julei.labels_ #聚类所得标签
lkxs=silhouette_samples(data,label,metric='euclidean') #计算本次聚类,所有数据对应的轮廓系数
means=np.mean(lkxs) #对轮廓系数求均值,越接近1效果越好
return means
y=[]
for n in range(2,10): #计算聚类数分别为2、3、...10时的轮廓系数均值,便于选取最优聚类数
means=juleipingjia(n)
y.append(means) #将每次的轮廓系数存入y数组中
print(y)
轮廓系数处于-1至1,越大表示簇间相似度高而不同簇相似度低,即聚类效果越好