文章目录
1. K-Means 聚类
1.1 聚类的概念
- 给事物打标签,寻找同一组内的个体之间的一些潜在的相似模式,即对数据进行自然分组。
- 是一种无监督的机器学习任务,划分数据为 cluster 簇。
- 是知识的发现而非预测。
- 常用于发现数据间的潜在关系,异常值检测,特征提取、数据压缩等。
1.2 聚类的目标
分组成簇
在K-Means 这里 K 代表要分 几 簇。
组之间的通过组内元素的相似性划分。
那么相似性如何表示?或者说如何规范求解?
元素之间的距离,代表它们之间的相似性。
距离的类型
- 欧式距离
- 余弦距离
NLP 文章相似度用的多。
1.3 简单理解 K-Means 流程
- 按 K 规定要分 K 簇;
- 随机选取 K 个中心点,并求其他点到中心点的距离,距离近的,即相似度高的,划分为同一簇;
- 分完一次后,求取所有点的 均值(Means),定为新的中心点,然后继续调整;
- 充分迭代至收敛,完成聚类。
1.3.1 K-Means 变种
1.4 K 的选取
肘部法
通过查看 Loss 损失函数,找出合适的点。
增加K的数量,查看loss的大小;
肘部拐点后,变化不大,所以可以选择肘部拐点。
Loss 损失函数
这里不用(GD)梯度下降法(中心点会变化,每次变量数量不同),而是用(EM)期望最大化的思想来估计参数(何为EM?后续讲解)。
1.5 小拓展:Canopy聚类
将 K-Means第一步的随机中心值,利用 Canopy聚类 代替一下。
远者中心点,近者同类。
1.6 聚类评估方法
实际不太会用,还是聚类后专业人士看一下
1.7 代码测试
import numpy as np
import matplotlib.pyplot as plt
import sklearn.datasets as ds
import matplotlib.colors
from sklearn.cluster import KMeans
if __name__ == '__main__':
# 制作数据 400个 4簇
N = 400
centers = 4
data, y = ds.make_blobs(N, n_features=2, centers=centers