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

目录

摘要:

1.竞争神经网路介绍:

2.仿真实验:

3.相关代码:


摘要:

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

1.竞争神经网路介绍:

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

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

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

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

2.仿真实验:

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

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

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

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

3.相关代码

参考文献:

部分代码:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 模糊均值聚类(fuzzy c-means clustering,FCM)是一种基于模糊理论的聚类算法,在无监督学习任务中被广泛应用。Matlab作为一种流行的科学计算软件,提供了方便实现FCM算法的工具箱,“fcm”函数即可实现模糊均值聚类。 下面以一个简单的实例来说明如何在Matlab使用FCM算法进行聚类。假设有一个数据集,包含100个二维样本点,其中分别有三类点,如下图所示: ![image-20210518112055538](https://cdn.jsdelivr.net/gh/1045932616/CS2022/img/image-20210518112055538.png) 首先需要将数据集导入Matlab中,并将其存储在一个矩阵中,每一行代表一个样本点的坐标。假设矩阵的名称为“data”。接着,使用“fcm”函数进行聚类代码如下: ```matlab [centers,U]=fcm(data,3); %聚成3类 ``` 函数“fcm”接受两个输入参数,第一个是数据矩阵,第二个是期望的聚类数目。输出结果包括聚类中心矩阵“centers”和隶属度矩阵“U”。其中,“centers”是一个$k$行$d$列的矩阵,每一行代表一个聚类中心点的坐标,“U”是一个$N \times k$的矩阵,其中$N$为样本点数目,“k”为聚类数目,每一行代表一个样本点对于每个聚类的隶属度。 接着可以将聚类结果可视化,将每个聚类用不同颜色标记出来,代码如下: ```matlab maxU=max(U,[],2); index=[]; for i=1:3 index{i}=find(U(:,i)==maxU); end scatter(data(index{1},1),data(index{1},2),'r'); hold on; scatter(data(index{2},1),data(index{2},2),'g'); hold on; scatter(data(index{3},1),data(index{3},2),'b'); ``` 代码中,首先计算每个样本点对于三个聚类中最高的隶属度值,然后找到所有隶属于某个聚类的样本点的下标,最后用散点图将每个聚类的样本点可视化出来。 运行以上代码,得到如下结果: ![image-20210518112250370](https://cdn.jsdelivr.net/gh/1045932616/CS2022/img/image-20210518112250370.png) 如图所示,三个聚类用不同颜色标记出来,每个聚类包含了相似的样本点。通过以上步骤,我们成功使用Matlab实现了模糊均值聚类算法对样本进行聚类分析。 ### 回答2: 模糊均值聚类是一种聚类分析方法,可以用来将数据点划分成多个群组。MATLAB作为一种流行的计算工具,提供了丰富的聚类分析工具,其中之一就是模糊均值聚类。 以下是一个MATLAB模糊均值聚类的实例: 先生成一组数据: x = [2.5 3.6 3.8 4.5 4.9 5.2 5.4 5.5]; y = [1.6 1.8 2.1 2.9 2.8 3.5 3.5 4.2]; figure; plot(x, y, 'o'); 使用fcm函数进行模糊均值聚类,设置聚类数量为2和迭代次数为100: [centers, U] = fcm([x; y], 2, [2.0 NaN 0.0001 0]); 其中centers表示聚类中心,U是分配给每个点的聚类概率。迭代次数可以根据需要进行调整。NaN表示默认值,0表示模糊度,其指定两个聚类间的界限。 绘制结果: plot(x, y, 'o'); maxU = max(U); index1 = find(U(1,:) == maxU); index2 = find(U(2,:) == maxU); line([x(index1) x(index2)], [y(index1) y(index2)]); hold on plot(centers(1,1),centers(2,1),'x', 'markersize', 15, 'LineWidth', 3); plot(centers(1,2),centers(2,2),'x', 'markersize', 15, 'LineWidth', 3); hold off 结果显示出两个聚类的中心,以及分配给每个数据点的聚类概率。这些信息可以用来进一步深入分析和可视化数据。模糊均值聚类是一种灵活的聚类分析方法,可以应用于各种不同类型的数据,包括图像和时间序列。MATLAB作为一种计算工具,提供了强大的聚类分析功能,可以帮助用户有效地处理和分析大量的数据。 ### 回答3: 模糊均值聚类是指在数据样本中,根据各数据点之间相似性的度量,将数据分成K类的一种聚类分析方法。MATLAB提供了模糊聚类函数fcm来实现此种模糊均值聚类。 以下是一个利用MATLAB进行模糊均值聚类分析的实例: 假设我们有一组100个数据,每个数据有两个属性,对此数据使用模糊均值聚类进行分析,代码如下: ```matlab %生成数据 data = [randn(50,2)*0.75+ones(50,2);randn(50,2)*0.5-ones(50,2)]; %进行模糊聚类分析 options = [2.0,100,1e-5,0]; [centers, U] = fcm(data, 2, options); %绘制结果 plot(data(:,1),data(:,2),'o'); hold on; maxU = max(U); index1 = find(U(1,:) == maxU); index2 = find(U(2,:) == maxU); line(data(index1,1),data(index1,2),'linestyle','none','marker','*','color','g'); line(data(index2,1),data(index2,2),'linestyle','none','marker','*','color','r'); plot(centers(:,1),centers(:,2),'*k'); title('Fuzzy C-Means Clustering with 2 Clusters'); ``` 运行后,我们可以得到数据的可视化图表,并看到数据被成功分成了两个类别,其聚类中心分别为(-1, -1)和(1, 1)。 以上就是一个MATLAB模糊均值聚类分析的实例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值