• (Matlab)使用竞争神经网络实现数据聚类


    目录

    摘要:

    参考文献:

    1.竞争神经网路介绍:

    2.仿真实验:

    3.相关代码:


    摘要:

    基于Matalb平台,构建竞争神经网络模型,并实现无监督的数据聚类。

    1.竞争神经网路介绍:

            竞争型神经网络是以无教师示教方式进行网络训练的一种神经网络。它的特点是能将输入数据中隐含的特征抽取出来,自动进行学习。网络通过自身训练,自动对输入模式进行分类。竞争型神经网络在结构上一般是由输入层和竞争层构成的两层网络。两层之间各神经元实现双向全连接,没有隐含层,有时竞争层各神经元之间还存在横向连接。

            在学习方法上,不是以网络的误差或能量函数的单调递减作为算法准则,而是依靠神经元之间的兴奋、协调、抑制、竞争的作用来进行信息处理,指导网络的学习与工作。长期以来,一些研究者提出了基于以上竞争型神经网络模型的许多改进方法,使神经网络模型的功能和性能得到很大提高,这些都为神经网络技术应用于数据挖掘奠定了一定的基础。然而其进一步的发展却受到许多缺陷的限制,主要表现在:

            第一,输入模式过于臃肿和训练时间过于漫长,影响了神经网络的训练速度和训练效果。为了解决神经网络的训练规模归于庞大的缺点,有学者利用粗糙集理论对输入数据进行预处理,消除输入模式的冗余属性,从而简化了神经网络的训练规模。但是粗糙集理论的缺点是只能处理离散化的数据,而对连续输入属性无能为力。而在现实的数据库中,大部分是连续性数据或是连续性和离散性相混合的数据,因此在数据处理前必须对数据进行离散化处理,这极大地限制了粗糙集理论在聚类分析中的应用范围。

            第二,竞争型神经网络存在“死点”问题,某些神经元在竞争中可能始终未能获胜而成为“死神经元”,不仅造成神经元的浪费,而且造成训练误差偏大,无法达到训练误差的精度要求,不能很好完成它所担负的聚类或分类任务。

    2.仿真实验:

            首先生成需要聚类的数据,共80个样本,每个样本有2个特征值,所有样本在二维空间中的分布如下:

            然后,设置网路神经元的个数,这里设置神经元个数为8个,首先将网路的权重向量至于所有聚类数据的中心,然后开始训练竞争神经网络:

            训练完成后,竞争神经网络的权重参数分布在对应的聚类中心,此时完成数据的聚类。如下图所示

            输入一个样本,即可查询对应的分类情况,比如输入样本特征值为[0,0.2],则网络输出其对应的分类:

    3.相关代码

    参考文献:

    部分代码:

    1. clc;
    2. clear;
    3. %% 生成数据
    4. bounds = [0 1; 0 1]; % 数据生成范围限制
    5. clusters = 8; % 设置分类类数
    6. points = 10;
    7. std_dev = 0.05;
    8. x = nngenc(bounds,clusters,points,std_dev); % 产生数据
    9. % 查看生成数据的分布情况
    10. figure(1);
    11. plot(x(1,:),x(2,:),'+r');
    12. title('生成数据的分布情况');
    13. xlabel('横坐标');
    14. ylabel('纵坐标');
    15. %% 构建竞争神经网络模型
    16. % 此处 COMPETLAYER 接受两个参数,即神经元数量和学习率。
    17. % 我们可以配置网络输入(通常由 TRAIN 自动完成),并绘制初始权重向量以查看其分类尝试过程。
    18. % 对权重向量 (o) 进行训练,使它们出现在输入向量 (+) 的聚类的中心。
    19. epochs = 8; % 设置网络神经元个数
    20. [net,circles] = Build_Net(clusters,x,epochs);
    21. %% 查看分类情况
    22. w = net.IW{1};
    23. figure(3)
    24. plot(x(1,:),x(2,:),'+r');
    25. hold on
    26. plot(w(:,1),w(:,2),'ob');
    27. hold off
    28. title('训练后网络的权重向量分布情况(蓝色的点)');
    29. xlabel('横坐标');
    30. ylabel('纵坐标');
    31. %% 使用训练后的网络查询数据的类别
    32. x1 = [0; 0.2]; % 查询这个数据
    33. y = net(x1) % 调用网络

  • 相关阅读:
    安装DevEco Studio 3.0 Beta2
    docker-ip与服务器ip冲突问题
    【工具】Apifox
    std::function
    关于安装李沐深度学习d2l包报错的解决办法(保姆教程)
    视频监控系统/视频汇聚平台EasyCVR有下级平台注册时出现断流情况该如何排查解决?
    2023年9月8日
    《代码大全2》第10章 使用变量的一般事项
    《软件方法》读后感
    以太网PHY芯片LAN8720A芯片研究
  • 原文地址:https://blog.csdn.net/weixin_46039719/article/details/126658717