kohonen网络matlab,Kohonen网络matlab算法.doc

Kohonen网络matlab算法

%% data 为4500*39数据

%% 清空环境变量

clc

clear

%% 数据处理

load data

input=datatrain(:,1:38);

attackkind=datatrain(:,39);

%数据归一化

inputn=input;

[nn,mm]=size(inputn);

[b,c]=sort(rand(1,nn));

%网络期望输出

for i=1:nn

switch attackkind(i)

case 1

output(i,:)=[1 0 0 0 0];

case 2

output(i,:)=[0 1 0 0 0];

case 3

output(i,:)=[0 0 1 0 0];

case 4

output(i,:)=[0 0 0 1 0];

case 5

output(i,:)=[0 0 0 0 1];

end

end

%训练数据

input_train=inputn(c(1:4000),:);

output_train=output(c(1:4000),:);

%% 网络构建

%输入层节点数

Inum=38;

%Kohonen网络

M=6;

N=6;

K=M*N;%Kohonen总节点数

g=5; %输出层节点数

%Kohonen层节点排序

k=1;

for i=1:M

for j=1:N

jdpx(k,:)=[i,j];

k=k+1;

end

end

%学习率

rate1max=0.1;

rate1min=0.01;

rate2max=1;

rate2min=0.5;

%学习半径

r1max=1.5;

r1min=0.4;

%权值初始化

w1=rand(Inum,K); %第一层权值

w2=zeros(K,g); %第二层权值

%% 迭代求解

maxgen=10000;

for i=1:maxgen

%自适应学习率和相应半径

rate1=rate1max-i/maxgen*(rate1max-rate1min);

rate2=rate2min+i/maxgen*(rate2max-rate2min);

r=r1max-i/maxgen*(r1max-r1min);

%从数据中随机抽取

k=unidrnd(4000);

x=input_train(k,:);

y=output_train(k,:);

%计算最优节点

[mindist,index]=min(dist(x,w1));

%计算周围节点

d1=ceil(index/6);

d2=mod(index,6);

nodeindex=find(dist([d1 d2],jdpx')<=r);

%权值更新

for j=1:length(nodeindex)

w1(:,nodeindex(j))=w1(:,nodeindex(j))+rate1*(x'-w1(:,nodeindex(j)));

w2(nodeindex(j),:)=w2(nodeindex(j),:)+rate2*(y-w2(nodeindex(j),:));

end

end

%% 聚类结果

Index=[];

for i=1:4000

[mindist,index]=min(dist(inputn(i,:),w1));

Index=[Index,index];

end

inputn_test=datatest(:,1:38);

%样本验证

for i=1:500

x=inputn_test(i,:);

%计算最小距离节点

[mindist,index]=min(dist(x,w1));

[a,b]=max(w2(index,:));

outputfore(i)=b;

end

length(find((datatest(:,39)-outputfore')==0))

plot(outputfore,'linewidth',1.5)

hold on

plot(datatest(:,39),':r','linewidth',1.5)

title('网络分类','fontsize',12)

xlab

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值