原理解读
K-Means :随机选取N个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。每分配一个样本,聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。
核心思想
1. 求出N个类别的聚类中心a1,a2, … ,aN
$$a_i=\frac {1}{\lvert C_i \rvert}\underset{x_i \in C_j}{\sum}{x_i}$$
2. 对于每个样本xj,将其标记为距离类别中心ai最近的一类
$$x_j \in C_i \ , \ 其中k=\underset{i,a_i \in C_k}{arg \ min}\ d(x_j,a_i)$$
3. 重复步骤1,2直到满足某个终止条件
算法流程
代码实战
代码中所用数据集可以查看相关文档,数据集(Data Set)
KMEANS_main.m
1 | clear;clc;close all; |
KMEANS_classify.m
1 | function [y,loc_center,k]=KMEANS_classify(x_scale,loc_center,sample_num,class_num) |
KMEANS_display.m
1 | function KMEANS_display(x,y,loc_center,sample_num,class_num) |
实验结果
性能比较
- 优点:
- 算法简单,容易理解
- 大数据集时,对噪声数据不敏感
- 缺点:
- 对初始中心点敏感
- 需要在测试前知道类别的个数
- 只适合分布呈凸型或者球形的数据集
- 对于高维数据,距离的度量并不是很好