文章目录
- 基本介绍
- 算法步骤
- 伪代码
- 距离计算方法
- 算法优缺点
-
- 优点
- 缺点
- K-means++
听说点进蝈仔帖子的都喜欢点赞加关注~~
文章图片
感谢知乎:
https://zhuanlan.zhihu.com/p/78798251
基本介绍 来自百度百科:
K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得评价指标J最小。算法采用误差平方和准则函数作为聚类准则函数。
文章图片
Simply speaking, K-Means clustering is an algorithm to classify or to group your objects based on attributes/features, into K number of groups. K is a positive integer number. The grouping is done by minimizing the sum of squares of distances between data and the corresponding cluster centroid. Thus, the purpose of K-means clustering is to classify the data.算法步骤 算法步骤:
(1) 首先我们选择一些类/组,并随机初始化它们各自的中心点。中心点是与每个数据点向量长度相同的位置。这需要我们提前预知类的数量(即中心点的数量)。
(2) 计算每个数据点到中心点的距离,数据点距离哪个中心点最近就划分到哪一类中。
(3) 计算每一类中中心点作为新的中心点。
(4) 重复以上步骤,直到每一类中心在每次迭代后变化不大为止。也可以多次随机初始化中心点,然后选择运行结果最好的一个。
直观展示一个结果
文章图片
伪代码
获取数据 n 个 m 维的数据
随机生成 K 个 m 维的点
while(t)
for(int i=0;
i < n;
i++)
for(int j=0;
j < k;
j++)
计算点 i 到类 j 的距离
for(int i=0;
i < k;
i++)
1. 找出所有属于自己这一类的所有数据点
2. 把自己的坐标修改为这些数据点的中心点坐标
end
距离计算方法
文章图片
文章图片
算法优缺点 优点 容易理解,聚类效果不错,虽然是局部最优, 但往往局部最优就够了;
处理大数据集的时候,该算法可以保证较好的伸缩性;
当簇近似高斯分布的时候,效果非常不错;
算法复杂度低。
缺点 K 值需要人为设定,不同 K 值得到的结果不一样;
对初始的簇中心敏感,不同选取方式会得到不同结果;
对异常值敏感;
样本只能归为一类,不适合多分类任务;
不适合太离散的分类、样本类别不平衡的分类、非凸形状的分类。
K-means++ 定义:k-means++是一种为k-means聚类算法选择初始值(或“种子”)的算法。它是NP-hard k-means问题的一种近似算法,它是一种避免标准k-means算法有时发现的较弱聚类的方法。
【算法|K-means,K-means++方法详解-机器学习分类问题常见算法】K-means与K-means++:原始K-means算法最开始随机选取数据集中K个点作为聚类中心,而K-means++按照如下的思想选取K个聚类中心:假设已经选取了n个初始聚类中心(0
文章图片
推荐阅读
- 算法|PyTorch中的squeeze()和unsqueeze()详解与应用案例
- 机器学习|bagging && boosting && stacking 集成学习
- 算法|Fractal解题笔记
- 动态规划|符环 解题笔记
- 深度学习|深度学习相关概念(计算图与反向传播)
- numpy学习|numpy04——搜索相关功能的函数并获取帮助
- leetcode刷题记录|反转字符串——LC344题
- leetcode刷题记录|两数之和II - 输入有序数组——LC167题(中等难度)
- 最小生成树-克鲁斯卡尔算法(Kruskal算法)