% MATLAB implementation of Rival-Penalized Competitive Learning (RPCL)
% Source:
% L. Xu, A. Krzyzak and E. Oja 1993, "Rival penalized competitive
% learning for clustering analysis, RBF net, and curve detection,"
% IEEE Trans. Neural Networks, vol. 4, no. 4, p. 636--648.
%
% Note: According to the RPCL algorithm, once training is completed,
% prototypes located far away from the data clusters should
% be eliminated.
%
% Code authors: Guilherme A. Barreto
% Date: October 18th 2005
clear; clc; close all;
% Load data
load dataset1.dat;
Dw=dataset1; clear dataset1
% Get size of data matrix (1 input vector per row)
[LEN_DATA DIM_INPUT]=size(Dw);
% Create a SOM structure %%
Mx = 16; % Number of neurons
MAP_SIZE = [Mx 1]; % Size of SOM map (always use 1-D map)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Create a CL network structure %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sMap = som_map_struct(DIM_INPUT,'msize',MAP_SIZE,'rect','sheet');
% Different weights initialization methods %%
% sMap = som_randinit(Dw, sMap); % Random weight initialization
% sMap = som_lininit(Dw, sMap); % Linear weight initialization
I=randperm(LEN_DATA); sMap.codebook=Dw(I(1:Mx),:); % Select Mx*My data vectors at random
% Train the RPCL algorithm %%
Ep=200; % number of training epochs
alpha=0.05; % Learning rate of the 1st winner
eta=0.001; % Learning rate of the 2nd winner (rival)
counter=zeros(Mx,1); % Counter for the number of victories
freq=zeros(Mx,1); % Relative frequency of victories
for t=1:Ep, % loop for training epochs
Epoca=t,
% Shuffle input data vectors at each training epoch
I=randperm(LEN_DATA); % shuffle the row indices
Dw=Dw(I,:);
for tt=1:LEN_DATA, % loop for iteration within an epoch
% Plain Euclidean distances from current input to all neurons
Di=sqrt(som_eucdist2(sMap,Dw(tt,:))); % Compute Euclidean distances for all neurons
% Weighted Euclidean distances
WDi=freq.*Di;
% Find the 1st winner using Wdi
[WDi1 win1]=min(WDi);
% Find the 2nd winner using Wdi
WDi(win1)=10^4; % Insert a large value to avoid the 1st winner to be chosen again
[WDi2 win2]=min(WDi);
% Reward the 1st winner
sMap.codebook(win1,:)=sMap.codebook(win1,:) + alpha*(Dw(tt,:)-sMap.codebook(win1,:));
% Penalize the 2nd winner (rival)
sMap.codebook(win2,:)=sMap.codebook(win2,:) - eta*(Dw(tt,:)-sMap.codebook(win2,:));
% Update counter of victories of the 1st winner
counter(win1)=counter(win1)+1;
% Update the relative frequency of victories of the winner
freq(win1)= counter(win1)/sum(counter);
end
% Quantization error per training epoch
Qerr(t) = som_quality(sMap, Dw);
end
% Plot prototypes and data altogether
figure, plot(Dw(:,1),Dw(:,2),'+r'), hold on
plot(sMap.codebook(:,1),sMap.codebook(:,2),'b*')
title('Prototype vectors in input space'), hold off
% Plot quantization error evolution per training epoch
figure, plot(Qerr)
title('Quantization Error per Training Epoch')
% A bar plot of the number of victories per neuron throughout epochs
figure, bar(1:Mx,counter)
title('Victories per neuron')
การใช้งาน MATLAB %ของ Rival-Penalized แข่งขันเรียน (RPCL) แหล่ง%: % L. Xu, A. Krzyzak และ E. Oja 1993 "คู่ต่อสู้สำเร็จแข่งขัน %สำหรับคลัสเตอร์วิเคราะห์ RBF สุทธิ และตรวจ สอบเส้นโค้ง การเรียนรู้" % IEEE โอนย้ายประสาทเครือข่าย ปี 4 หมายเลข 4, p. 636-648 % หมายเหตุ%: ตามอัลกอริทึม RPCL เมื่อฝึกอบรมเสร็จ ควรตั้งอยู่ห่างจากกลุ่มข้อมูลแบบตัวอย่าง% %จะตัดออก % ผู้เขียนรหัส%: Guilherme A. Barreto %วัน: 18 2548 ตุลาคม ล้าง clc ปิดทั้งหมด ข้อมูลโหลด% โหลด dataset1.dat Dw = dataset1 ล้าง dataset1 %ได้จำนวนข้อมูลเมตริกซ์ (1 ป้อนเวกเตอร์ต่อแถว) [LEN_DATA DIM_INPUT]=size(Dw) %สร้างโครงสร้างสม % Mx = 16 %ของ neurons MAP_SIZE = [Mx 1]; %ขนาดส้มแผนที่ (จะใช้ 1 D แผนที่) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %สร้างโครงสร้างเครือข่าย CL % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% สแมป = som_map_struct(DIM_INPUT,'msize',MAP_SIZE,'rect','sheet') วิธีเริ่มต้นน้ำหนัก%ต่างไปจากเดิม % สแมป% = som_randinit (Dw สแมป); เริ่มต้นน้ำหนักสุ่ม% สแมป% = som_lininit (Dw สแมป); เริ่มต้นน้ำหนักเส้น% I=randperm(LEN_DATA) sMap.codebook=Dw(I(1:Mx),:) %เลือก Mx * ข้อมูลเวกเตอร์สุ่ม อัลกอริทึม RPCL รถไฟ%% % Ep = 200 จำนวนฝึก epochs % alpha = 0.05 %อัตราการเรียนรู้ของผู้ชนะที่ 1 เอตาก = 0.001 อัตราการเรียนรู้%ของผู้ชนะที่ 2 (คู่แข่ง) counter=zeros(Mx,1) นับ%จำนวนชัยชนะ freq=zeros(Mx,1) %ความถี่สัมพัทธ์ของชัยชนะ สำหรับ t = 1:Ep วน%สำหรับฝึก epochs Epoca = t สลับ%ป้อนเวกเตอร์ข้อมูลในแต่ละยุคการฝึกอบรม I=randperm(LEN_DATA) ดัชนีแถวสลับ% Dw=Dw(I,:) สำหรับ tt = 1:LEN_DATA, %การวนซ้ำสำหรับการเกิดซ้ำในยุค ระยะ Euclidean ธรรมดา%จากปัจจุบันเข้า neurons ทั้งหมด Di=sqrt(som_eucdist2(sMap,Dw(tt,:))) %คำนวณระยะทาง Euclidean สำหรับ neurons ทั้งหมด ระยะทาง Euclidean ถ่วงน้ำหนัก% WDi = freq. * Di %ค้นหาผู้ชนะ 1 ใช้ Wdi [WDi1 win1]=min(WDi) %ค้นหาผู้ชนะ 2 ใช้ Wdi WDi (win1) = 10 ^ 4 %ใส่ค่าขนาดใหญ่เพื่อหลีกเลี่ยงการเป็นผู้ชนะที่ 1 ที่จะเลือกอีกครั้ง [WDi2 win2]=min(WDi) รางวัลชนะเลิศ 1% sMap.codebook(win1,:)=sMap.codebook(win1,:) + alpha*(Dw(tt,:)-sMap.codebook(win1,:)) %การลงโทษ 2 ผู้ชนะเลิศ (คู่แข่ง) sMap.codebook(win2,:)=sMap.codebook(win2,:) - eta*(Dw(tt,:)-sMap.codebook(win2,:)) %ปรับปรุงเคาน์เตอร์ของชัยชนะของผู้ชนะที่ 1 (win1) เคาน์เตอร์เคาน์เตอร์ (win1) = + 1 %ปรับปรุงความถี่สัมพัทธ์ของชัยชนะของผู้ชนะ freq(win1) = counter(win1)/sum(counter) สิ้นสุด % Quantization ข้อผิดพลาดต่อการฝึกอบรมยุค Qerr(t) = som_quality (สแมป Dw); สิ้นสุด %แผนแบบตัวอย่างและข้อมูลกัน รูป plot(Dw(:,1),Dw(:,2),'+r') เก็บ plot(sMap.codebook(:,1),sMap.codebook(:,2),'b*') ชื่อเรื่อง ('ต้นแบบเวกเตอร์ในพื้นที่อินพุต'), แง่ %แผนวิวัฒนาการ quantization ข้อผิดพลาดต่อการฝึกอบรมยุค รูป plot(Qerr) ชื่อเรื่อง ('Quantization ข้อผิดพลาดต่อการฝึกอบรมยุค') % A บาร์พล็อตของชัยชนะต่อเซลล์ประสาทตลอด epochs รูป bar(1:Mx,counter) ชื่อเรื่อง ('ชัยชนะต่อเซลล์ประสาท')
การแปล กรุณารอสักครู่..

% MATLAB การดำเนินงานของคู่แข่ง-ลงโทษการเรียนรู้การแข่งขัน
(RPCL)% ที่มา:% แอลซูเอ Krzyzak และอี Oja ปี 1993 "คู่แข่งลงโทษการแข่งขันการเรียนรู้% สำหรับการจัดกลุ่มการวิเคราะห์สุทธิ RBF, และการตรวจสอบเส้นโค้ง"% อีอีอีทรานส์ . โครงข่ายประสาทฉบับ 4 ไม่มี 4, p . 636--648%% หมายเหตุ: ตามอัลกอริทึม RPCL เมื่อเสร็จสิ้นการฝึกอบรมต้นแบบ% ตั้งอยู่ห่างไกลจากกลุ่มข้อมูลควร% จะตัดออก.%% ผู้เขียนรหัสสินค้า: Guilherme เอเร% วันที่: 18 ตุลาคม 2005 ที่ชัดเจน ; CLC; ปิด;% ข้อมูลโหลดโหลดdataset1.dat; Dw = DataSet1; ชัดเจน DataSet1% ขนาดของเมทริกซ์รับข้อมูล (1 เวกเตอร์ป้อนข้อมูลต่อแถว) [LEN_DATA DIM_INPUT] = ขนาด (DW);% สร้างโครงสร้าง SOM %% Mx = 16; % จำนวนของเซลล์ประสาทMAP_SIZE = [Mx 1]; % ขนาดของแผนที่ SOM (มักจะใช้แผนที่ 1-D) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% สร้าง โครงสร้างเครือข่าย CL %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SMAP = som_map_struct (DIM_INPUT 'msize' , MAP_SIZE 'ดูแลรักษา', 'แผ่น');% น้ำหนักที่แตกต่างกันวิธีการเริ่มต้น %%% SMAP = som_randinit (DW, SMAP); % น้ำหนักเริ่มต้นสุ่ม% SMAP = som_lininit (DW, SMAP); % เริ่มต้นน้ำหนักเชิงเส้นI = randperm (LEN_DATA); sMap.codebook = Dw (ผม (1: Mx) :); เลือก Mx% * ข้อมูลเวกเตอร์ของฉันที่สุ่มรถไฟ% ขั้นตอนวิธี RPCL %% Ep = 200; % จำนวน epochs ฝึกอบรมอัลฟา= 0.05; % อัตราการเรียนรู้ที่ 1 ผู้ชนะการทางพิเศษแห่งประเทศไทย= 0.001; % อัตราการเรียนรู้ของผู้ชนะที่ 2 (คู่แข่ง) เคาน์เตอร์ศูนย์ = (MX, 1); % เคาน์เตอร์สำหรับจำนวนของชัยชนะความถี่ศูนย์= (MX, 1); % ความถี่สัมพัทธ์ของชัยชนะสำหรับt = 1: Ep% ห่วงสำหรับการฝึกอบรม epochs Epoca = ที% สุ่มเวกเตอร์ป้อนข้อมูลในแต่ละยุคการฝึกอบรมI = randperm (LEN_DATA); สับเปลี่ยน% ดัชนีแถวDw = Dw (ฉัน :); สำหรับ tt = 1: LEN_DATA ห่วง% สำหรับการทำซ้ำภายในยุค% ระยะทางธรรมดาแบบยุคลิดจากการป้อนข้อมูลปัจจุบันเซลล์ประสาททุกDi = sqrt (som_eucdist2 (SMAP, Dw (tt, :))); % คำนวณระยะทางแบบยุคลิดสำหรับเซลล์ทั้งหมด% ระยะทางแบบยุคลิดถ่วงน้ำหนักวดี = ความถี่ * Di.% หาผู้ชนะที่ 1 โดยใช้วดี[WDi1 Win1] = นาที (WDI);% หาผู้ชนะที่ 2 โดยใช้วดีวดี(Win1) = 10 ^ 4 ; % ใส่ค่าขนาดใหญ่เพื่อหลีกเลี่ยงการเป็นผู้ชนะที่ 1 จะได้รับเลือกอีกครั้ง[WDi2 Win2] = นาที (WDI);% รางวัลที่ 1 ผู้ชนะsMap.codebook (Win1:) = sMap.codebook (Win1 :) + อัลฟา * ( dw (tt,) - sMap.codebook (Win1 :));% ลงโทษผู้ชนะ 2 (คู่แข่ง) sMap.codebook (Win2:) = sMap.codebook (Win2 :) - การทางพิเศษแห่งประเทศไทย * (DW (tt, ) - sMap.codebook (Win2 :));% ปรับปรุงเคาน์เตอร์ชัยชนะที่ 1 ผู้ชนะเคาน์เตอร์(Win1) = เคาน์เตอร์ (Win1) 1;% ปรับปรุงความถี่ญาติของชัยชนะของผู้ชนะความถี่ (Win1) = เคาน์เตอร์ (Win1) / ผลรวม (เคาน์เตอร์); ท้าย% ข้อผิดพลาดต่อควอนยุคการฝึกอบรม Qerr (t) = som_quality (SMAP, DW); ท้าย% แปลงต้นแบบและข้อมูลทั้งหมดคิดพล็อต(DW (: 1) Dw (:, 2) '+ R') ยึดมั่นในพล็อต(sMap.codebook (: 1) sMap.codebook (: 2) 'b *) ชื่อ (เวกเตอร์ต้นแบบในพื้นที่การป้อนข้อมูล') ถือปิด% วิวัฒนาการข้อผิดพลาดแปลงควอนต่อยุคการฝึกอบรมร่างพล็อต (Qerr) ชื่อ ('ข้อผิดพลาดวอนต่อการฝึกอบรม Epoch)% พล็อตบาร์ของจำนวนของชัยชนะต่อเซลล์ประสาทตลอด epochs คิด, บาร์ (1: Mx เคาน์เตอร์) ชื่อ (' ชัยชนะ ต่อเซลล์ประสาท)
การแปล กรุณารอสักครู่..

% MATLAB การลงโทษของคู่แข่งการแข่งขัน ( 2 ) แหล่งการเรียนรู้ :
%
% L . Xu , A . krzyzak และ E . oja 1993 " คู่แข่งลงโทษแข่งขัน
% การเรียนรู้สำหรับการวิเคราะห์ข้อมูล , RBF สุทธิและตรวจสอบเส้นโค้ง "
% ทรานส์ IEEE โครงข่ายประสาทเทียม , ปีที่ 4 , ฉบับที่ 4 , หน้าเธอ -- เธอ .
%
% หมายเหตุ : ตามไป 2 วิธี เมื่ออบรมเสร็จ
% ต้นแบบตั้งอยู่ห่างไกลจากข้อมูลกลุ่มควร
% ตกรอบ
%
% เขียนรหัส : กิลเ ร์เม . barreto
% วันที่ : 18 ตุลาคม 2548
ชัดเจน ; clc ; ใกล้ชิด ;
% โหลด dataset1.dat โหลดข้อมูล
;
dw = dataset1 ; ชัดเจน dataset1
รับขนาดของข้อมูลเมทริกซ์ ( 1 อินพุตเวกเตอร์ต่อแถว )
[ len_data dim_input ] = ขนาด ( DW ) ;
สร้างสมโครงสร้าง %
MX = 16 ; % จำนวนเซลล์ประสาท
map_size MX = [ 1 ] ; % ขนาดของแผนที่ซึ่งใช้แผนที่ภายในเสมอ )
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% สร้าง CL โครงสร้างเครือข่าย %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SMAP = som_map_struct ( dim_input 'msize map_size 'rect , ' , ' , 'sheet ' ) ;
% ที่แตกต่างกันน้ำหนักเริ่มต้นวิธีการ %
% SMAP = som_randinit ( DW , SMAP ) ; % สุ่มน้ำหนักเริ่มต้น
% SMAP = som_lininit ( DW , SMAP )% เส้นน้ำหนักเริ่มต้น
= randperm ( len_data ) ; SMAP . ชุด = dw ( I ( 1 : MX ) , : ) ; เลือก MX * ของฉันข้อมูลเวกเตอร์สุ่ม
% รถไฟ 2 ขั้นตอนวิธี %
Ep = 200 % จำนวนการฝึกอบรม epochs
แอลฟา = 0.05 ; % การเรียนรู้ คะแนนจาก 1 ผู้ชนะ
อีตา = 0.001 ; % อัตราการเรียนรู้ของผู้ชนะที่ 2 ( คู่แข่ง )
นับ = 0 ( MX , 1 ) ; % เคาน์เตอร์สำหรับชัยชนะของความถี่ = 1
( MX , 1 ) ;% ความถี่สัมพัทธ์ของชัยชนะ
สำหรับ t = 1 : EP , % ห่วงสำหรับการฝึกอบรม epochs
epoca = T ,
% สับเปลี่ยนข้อมูลเวกเตอร์ในการฝึกอบรมแต่ละยุค
= randperm ( len_data ) ; % สลับแถวตลาด DW DW ( =
: )
สำหรับ TT = 1 len_data % ห่วงสำหรับซ้ำภายในยุค
% ธรรมดาใช้ระยะทางจากปัจจุบันนำเข้าทั้งหมดเซลล์ประสาท
ตี้ = SQRT ( som_eucdist2 ( SMAP , DW ( TT : ) ) )
การแปล กรุณารอสักครู่..
