K-means聚类分析探究
1、K-means聚类分析原理
对于聚类分析,是在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好。
K-means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。K-means算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛。
2、MATLAB中提供了对于K-means聚类分析的函数
(1)语法
idx = kmeans(X,k)
idx = kmeans(X,k,Name,Value)
[idx,C] = kmeans( )
[idx,C,sumd] = kmeans( )
[idx,C,sumd,D] = kmeans( )
(2)说明
idx = kmeans(X,k)执行k-means聚类,将n-by-p数据矩阵X的观测数据划分为k个簇,并返回一个包含每个观测数据的簇索引的n-by-1向量(idx)。X的行对应点,列对应变量。默认情况下,kmeans使用平方欧氏距离度量和k-mean++算法初始化集群中心。
idx = kmeans(X,k,Name,Value)返回带有由一个或多个Name,Value对参数指定的附加选项的集群索引。例如,指定余弦距离、使用新初始值重复聚类的次数或使用并行计算的次数。
[idx,C] = kmeans( )返回k-by-p矩阵C中的k个质心位置。
[idx,C,sumd] = kmeans( )返回k-by-1向量sumd中点到质心距离的簇内和。
[idx,C,sumd,D] = kmeans( )返回n × k矩阵D中每个点到每个质心的距离。
(3)例子
例子在matlab帮助菜单中可以很方便地找到,便于学习,在此不再举例。
3、K-means代码共同学习
function [Idx, Center] = K_means(X, xstart)
len = length(X);
Idx = zeros(len, 1);
C1 = xstart(1,:);
C2 = xstart(2,:);
C3 = xstart(3,:);
for i_for = 1:100
for i = 1:len
x_temp = X(i,:);
d1 = norm(x_temp - C1);
d2 = norm(x_temp - C2);
d3 = norm(x_temp - C3);
d = [d1;d2;d3];
[~, id] = min(d);
Idx(i) = id;
end
L1 = X(Idx == 1,:);
L2 = X(Idx == 2,:);
L3 = X(Idx == 3,:);
C1 = mean(L1);
C2 = mean(L2);
C3 = mean(L3);
end
Center = [C1; C2; C3];
手机扫一扫,获取更多MATLAB实用技能~