数据聚类是一个无监督学习问题。给n个无label的数据
![c6ea185d6e32f33726706bf182dc1524.png](https://i-blog.csdnimg.cn/blog_migrate/9299b1fbe4de4ad8d65a3215693f895e.png)
1.相似度
首先考虑如何定义相似度。定义相似度的方法有很多,只有定义一个恰到好处的相似度,才能更好的度量类内相似度和类间相似度。最常见的度量相似度的方法:特征空间的距离(余弦值和相关系数等也可以度量相似度,这里不作详述)。比如我们要度量
Euclidean Distance :
Minkowski Distance:
Kernel Distance:
![b4c8c60a76c348ad05bea6c704ec38d8.png](https://i-blog.csdnimg.cn/blog_migrate/c80fad699ecf295693b5243ada8259f0.png)
![342bf550f74ab08c3f2db95a12feb366.png](https://i-blog.csdnimg.cn/blog_migrate/5b0cdfa7b92196a6a5f97c47cdb12a83.png)
2.K-means 算法介绍
K-meas 算法首先假设:每个类别有一个类别重心centerid
![a2c84157e5e9957a2e5e3e8309e0f47a.png](https://i-blog.csdnimg.cn/blog_migrate/ed06a7e6b0de79ba758cc6d7151930c0.png)
当给定所有的类别重心
-
为每一个 数据
- 随机初始化
- 重复执行以下操作直到收敛:
- a. 计算每个数据
- -
- b. 计算每个类别的重心
- -
因为Objective Function 对
![6e501f6f7150ffcf76bc3a997d7a8beb.png](https://i-blog.csdnimg.cn/blog_migrate/062dd7348d1ae8b7ca63181c8a0d697e.jpeg)
3. 如何更好的初始化重心:K-means++
根据初始起点
![6963a972285abe5f688de80f3f7b135f.png](https://i-blog.csdnimg.cn/blog_migrate/be92b76ffd546edaf9e2d47400e1f7b2.jpeg)
K-means++ 是一种获取更好初始化的方法。不同于原始算法的等概率初始化重心
- 初始化
-
- 初始化第j个重心
- -
4. 如何选择K
在K-means中K是超参数,需要人工设定。面对一个新的数据集,目前没有一个准确的方法,帮助找出一个正确的K。直觉上,K设的越大,loss(Objective Function值)越小。当K与数据集大小相等时,loss达到最小值0,即每个数据点为一个类别。为了防止K过大,可以加入一些关于K的惩罚项。另一种确定K的方法是:选择当loss不在剧烈变化时的K。如图4-1所示
![609047416283594ba9a81a4d3cf692d8.png](https://i-blog.csdnimg.cn/blog_migrate/9e35db49244205e5b5ec973a91b7e9e2.png)
5. K-means优点和缺点
优点:原理简单,易于理解,容易实现,计算效率高;
缺点:1. 算法需要指定聚类数目K;
2. 若存在异常数据,对异常数据敏感;