1.库安装:scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple
2.学习网站:2.3. 聚类 - sklearn
- KMeans 算法
KMeans 算法通过把样本分离成 n 个具有相同方差的类的方式来聚集数据,最小化称为 惯量(inertia) 或 簇内平方和(within-cluster sum-of-squares)的标准(criterion)。该算法需要指定簇的数量。它可以很好地扩展到大量样本(large number of samples),并已经被广泛应用于许多不同领域的应用领域。
k-means 算法将一组 样本 划分成 不相交的簇 , 每个都用该簇中的样本的均值 描述。 这个均值(means)通常被称为簇的 "质心(centroids)"; 注意,它们一般不是从 中挑选出的点,虽然它们是处在同一个空间。
K-means(K-均值)算法旨在选择一个质心, 能够最小化惯性或簇内平方和的标准:
4.算法流程
(1)选择K个点作为初始质心。
(2)将每个点指派到最近的质心,形成K个簇。
(3)对于上一步聚类的结果,进行平均计算,得出该簇的新的聚类中心。
(4)重复上述两步/直到迭代结束:质心不发生变化。
使用for循环计算聚类个数为2至9时的轮廓系数值,寻找最优聚类个数代码:
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt
读取Excel文件
df = pd.read_excel('E:\python练习\Python_Kmeans\工作簿1.xlsx', sheet_name='Sheet1')
data1=df['Relative Humidity']
data1=np.array(data1)
data2=df['Temp']
data2=np.array(data2)
data3=df['Wind']
data3=np.array(data3)
DATA=np.vstack((data1,data2,data3)).T
K=range(2,9)
score=[]
for k in K:
kmeans=KMeans(n_clusters=k)
kmeans.fit(DATA)
score.append(silhouette_score(DATA,kmeans.labels_,metric='euclidean'))
plt.plot(K,score,'r*-')
plt.xlabel('k')
plt.ylabel(u'lkxs')
plt.title(u'K_vaule')
plt.show()