一. 聚类算法简介
概念
无监督学习算法
根据样本之间的相似性,将样本划分到不同的类别中;不同的相似度计算方法,会得到不同的聚类结果,常用的相似度计算方法有欧式距离法。
聚类算法的目的是在没有先验知识的情况下,自动发现数据集中的内在结构和模式。
使用不同的聚类准则, 产生的聚类结果不同
应用场景
聚类算法分类
根据聚类颗粒度分类
根据实现方法分类
-
K-means:按照质心分类,主要介绍K-means,通用、普遍
-
层次聚类:对数据进行逐层划分,直到达到聚类的类别个数
-
DBSCAN聚类是一种基于密度的聚类算法
-
谱聚类是一种基于图论的聚类算法
总结
聚类概念
无监督学习算法,主要用于将相似的样本自动归到一个类别中;计算样本和样本之间的相似性,一般使用欧式距离
聚类分类
颗粒度:粗聚类、细聚类。
实现方法: K-means聚类、层次聚类、 DBSCAN聚类、谱聚类
二. API
Kmeans算法的API
Kmeans-API实践
聚类算法API
构造数据API
数据-结果
流程
代码
import os os.environ["OMP_NUM_THREADS"] = '4' # 解决内存泄露警告 from sklearn.cluster import KMeans from sklearn.datasets import make_blobs from sklearn.metrics import calinski_harabasz_score import matplotlib.pyplot as plt # 1. 构建数据集 # x是样本(点的横纵坐标), y是标签 x, y = make_blobs( n_samples=1000, # 样本数 n_features=2, # 特征数: x, y centers=[[-1, -1], [0, 0], [1, 1], [2, 2]], # 聚类中心, 也可以写数字表示中心点的数量 cluster_std=[0.4, 0.2, 0.2, 0.2], # 聚类标准差, 默认为1, 也可以写数字表示所有点的标准差 random_state=21 ) # print(x) # print(y) # 绘图显示数据集 plt.figure() plt.scatter(x[:, 0], x[:, 1], marker='o') plt.show() # 2. 模型训练预测 model = KMeans( n_clusters=4, # 蕨类中心的数量 random_state=21 ) y_pred = model.fit_predict(x) # 3. 显示聚类效果 plt.scatter(x[:, 0], x[:, 1], c=y_pred) plt.show() # 4. 模型评估 print(calinski_harabasz_score(x, y_pred))
结果
三. ★Kmeans实现流程
★实现流程原理
-
事先确定
常数K
,常数K意味着最终的聚类类别数
-
随机选择
K 个样本点
作为初始聚类中心 -
计算
每个样本到 K 个中心的距离
,选择最近的聚类中心点作为标记类别 -
根据每个类别中的样本点,
重新计算出新的聚类中心点
(各聚类类别内点的平均值),如果计算得出的新中心点与原中心点一样则停止聚类
,否则重新进行第 2 步过程
,直到聚类中心不再变化
举例说明
原始数据
流程
-
随机设置K个特征空间内的点作为初始的聚类中心(本案例中设置p1和p2)
-
对于其他每个点计算到K个中心的距离,选择最近的一个聚类中心点作为标记类别
-
接着对标记的聚类中心,
重新计算每个聚类的新中心点
(平均值) -
如果计算得出的
新中心点与原中心点一样
(质心不再移动),那么结束,否则重新进行第二步过程【经过判断,需要重复上述步骤,开始新一轮迭代】