www.gusucode.com > som-bp混合神经网络的matlab程序源码 > matlab_emulator/HybridNet/SOM_choose.m
%% som mapping and distinct the classs of significant and not %------------------------ Mapping the positve training samples-------------------------------------- function [pos_train_sample,pos_test_sample,neg_train_sample,neg_test_sample,net] = SOM_choose(pos_sample,neg_sample,sizeout,SOM_epochs,net) P = [pos_sample, neg_sample]; [feature_num sample_num] = size(P); pos_num = size(pos_sample,2); neg_num = size(neg_sample,2); SOM_out_num = [sizeout sizeout]; % 输出节点数目 SOM_input_num = feature_num; % 输入节点数目 MinMaxValue = [zeros(feature_num ,1),ones(feature_num,1)]; % net = newsom( MinMaxValue,SOM_out_num); % net.trainParam.epochs = SOM_epochs; % net.trainParam.show = 1000; % -------- som training begin_time = clock; % [net,tr,Y,E,Pf,Af] = train(net,P); Y = sim(net,P); cost_time = etime(clock,begin_time) % map distribution [Maxvalue max_num] = max(Y); distr = zeros(pos_num,2); for(i=1:sample_num) distr(i,1) = floor((max_num(i)-1)/sizeout)+1; distr(i,2) = max_num(i)-( distr(i,1) - 1 )*sizeout+1; distr(i,2) = rem(max_num(i)-1,sizeout)+1; end distr_pos = distr(1:pos_num,:); distr_neg = distr(pos_num+1:sample_num,:); % plot the distribution of the map result figure for(i=1:pos_num) hold on plot(distr_pos(i,1),distr_pos(i,2),'r*'); end for(i=1:neg_num) hold on plot(distr_neg(i,1),distr_neg(i,2),'bsquare'); end title('som result distribution ') % cal the center of the positive class center = floor(mean(distr_pos,1)); plot(center(1),center(2),'rO','LineWidth',2,... 'MarkerEdgeColor','k',... 'MarkerFaceColor','g',... 'MarkerSize',10); % cal the distance of the positive class, the mean distance, the max_num distance dislength = zeros(pos_num,1); dislength = dist(distr_pos,center'); mean_dist = mean( dislength,1); max_dist = max( dislength); thresh_dist = floor((mean_dist+max_dist)/2); train_num = 0; test_num = 0; train_som = zeros(feature_num,pos_num); test_som = zeros(feature_num,pos_num); for(i=1:pos_num) if( dislength(i)<=thresh_dist) train_num = train_num + 1; train_som(:,train_num) = pos_sample(:,i); % choose the train sample hold on plot(distr_pos(i,1),distr_pos(i,2),'c+'); else test_num = test_num + 1; test_som(:,test_num) = pos_sample(:,i); end end pos_train_sample = train_som(:,1:train_num); pos_test_sample = test_som(:,1:test_num); % cal the center of the positive class center = floor(mean(distr_neg,1)); hold on plot(center(1),center(2),'rO','LineWidth',2,... 'MarkerEdgeColor','k',... 'MarkerFaceColor','g',... 'MarkerSize',10); % cal the distance of the positive class, the mean distance, the max_num distance dislength = zeros(neg_num,1); dislength = dist(distr_neg,center'); mean_dist = mean( dislength,1); max_dist = max( dislength); thresh_dist = floor((mean_dist+max_dist)/2); train_num = 0; test_num = 0; train_som = zeros(feature_num,neg_num); test_som = zeros(feature_num,neg_num); for(i=1:neg_num) if( dislength(i)<=thresh_dist) train_num = train_num + 1; train_som(:,train_num) = neg_sample(:,i); % choose the train sample hold on plot(distr_neg(i,1),distr_neg(i,2),'Mx'); else test_num = test_num + 1; test_som(:,test_num) = neg_sample(:,i); end end neg_train_sample = train_som(:,1:train_num); neg_test_sample = test_som(:,1:test_num);