本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
Kohonen规则是由Kohonen提出的一种对样本进行聚类的规则,它是SOM神经网络的基础
本文讲解Kohonen规则的思想、更新公式以及算法流程,并展示一个Kohonen聚类的例子
通过本文可以快速了解Kohonen规则是什么,以及如何使用Kohonen规则对样本进行聚类
本节讲解Kohonen规则聚类的算法思想以及算法流程
什么是Kohonen规则聚类
kohonen规则是一种用于聚类的算法,简单且有效
SOM神经网络就是基于kohonen规则的基础上的一种聚类算法
kohonen规则聚类算法如下:
1. 先随机初始化k个聚类中心
2. 选出一个样本,将离它最近的聚类中心向它移动
这样可以使该聚类中心更离本次的样本点更近
重复步骤2,m次后终止算法,完成聚类
其中,每次对聚类中心的更新法则如下:
其中
:离样本最近的聚类中心点
: 学习率
本节展示一个kohonen规则聚类的具体代码实例
kohonen规则进行聚类-代码实现
kohonen规则虽然简单,但却是行之有效的,下面展示一个kohonen的代码实例
我们先生成四簇数据,然后随机初始化5个聚类中心点,再使用Kohonen规则训练聚类中心
具体实现代码如下:
% Kohonen聚类规则
rand('seed',70);
%------------生成样本数据-------------
dataC = [2.5,2.5;7.5,2.5;2.5,7.5;7.5,7.5]; % 生成四个样本中心
sn = 40; % 样本个数
X = rand(sn,2)+dataC(mod(1:sn,4)+1,:); % 随机生成样本点
% -----------初始化聚类中心点--------------
kn = 5; % 聚类中心点个数
C = rand(kn,2)*10; % 随机生成聚类中心
C0 = C; % 备份聚类中心点的初始值
% -----------使用样本训练聚类中心点-----------
lr = 0.1; % 学习率
for t = 1:50
for i = 1:sn
cur_x = X(i,:); % 提取一个样本
dist = sum((repmat(cur_x,kn,1) - C).^2,2); % 计算样本到各个聚类中心点的距离
[~,idx] = min(dist); % 找出最近的聚类中心点
C(idx,:) = C(idx,:) + lr*(cur_x - C(idx,:)); % 将该聚类中心点往样本靠近
end
end
% ----------画图------------------------
subplot(1,2,1)
plot(X(:,1),X(:,2),'*');
hold on
plot(C0(:,1),C0(:,2),'or','MarkerFaceColor','g');
subplot(1,2,2)
plot(X(:,1),X(:,2),'*');
hold on
plot(C(:,1),C(:,2),'or','MarkerFaceColor','g');
运行结果如下:
可以看到,经过一定的更新步数后,聚类中心移到了四类数据的中心位置附近
End