聚类方法已经被广泛运用在如图像处理、客户精准营销、生物信息学等多个领域,也可以作为使用分类方法前对数据进行预先探索的一种手段来使用。
1、Kmeans算法核心思想:
- 从数据集中选取K个样本点作为初始样本中心(聚类中心Ci);
- 计算每个样本点到每个聚类中心的欧氏距离,并将样本点分配到距离最近的聚类中心所对应的簇中;
- 计算每个簇中样本点距离的平均值作为新的聚类中心,进行下一轮迭代;
直到聚类中心不再变化或达到最大的迭代次数时停止。
欧氏距离计算公式:
其中,X为数据对象;Ci为第i个聚类中心;m为数据对象的维度;Xj,Cij为X和Ci的第j个属性值。
estimator = KMeans(n_clusters=3,init='k-means++',random_state=0).fit(X)
得出y的预测值有两种方法:(这两种方法都可以)
predY_1 = estimator.predict(X)
print(predY_1)
predY_2 = estimator.labels_
print(predY_2)
2、聚类算法评价指标:
1、簇内误差平方和(SSE),也叫簇惯性和类畸变程度 即各簇内的样本点到所在质心的距离平方和,越小说明各簇越紧凑,簇内相似度越高。但注意!!!并不是越小越好,也不是越大越好,而是一定程度时最好。
关键代码:kmeans.inertia_
常用于模型调参:
from sklearn.cluster import KMeans
wcss = []
for i in range(1, 11):
kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42)
kmeans.fit(X)
wcss.append(kmeans.inertia_) 获取K-means算法的SSE
2、轮廓系数
from sklearn import metrics
score = metrics.silhouette_score(X, y_cluster_kmeans)# metrics.silhouette_score函数用于计算轮廓系数
score
'''
0.5667473
'''
3、 优点
- 容易理解,聚类效果不错,虽然是局部最优, 但往往局部最优就够了;
- 处理大数据集的时候,该算法可以保证较好的伸缩性;
- 当簇近似高斯分布的时候,效果非常不错;
- 算法复杂度低。
4、 缺点
- K 值需要人为设定,不同 K 值得到的结果不一样;
- 对初始的簇中心敏感,不同选取方式会得到不同结果;
- 对异常值敏感;
- 样本只能归为一类,不适合多分类任务;
- 不适合太离散的分类、样本类别不平衡的分类、非凸形状的分类。
5、算法调优与改进
针对 K-means 算法的缺点,我们可以有很多种调优方式:如数据预处理(去除异常点),合理选择 K 值,高维映射等。以下将简单介绍:
5.1 数据预处理
K-means 的本质是基于欧式距离的数据划分算法,均值和方差大的维度将对数据的聚类产生决定性影响。所以未做归一化处理和统一单位的数据是无法直接参与运算和比较的。常见的数据预处理方式有:数据归一化,数据标准化。
此外,离群点或者噪声数据会对均值产生较大的影响,导致中心偏移,因此我们还需要对数据进行异常点检测。