MATLAB自帶的自組織神經網路
今天我們介紹自組織映射(Self-Organizing Map,SOM)或自組織特徵映射(Self-Organizing Feature Map,SOFM),SOM神經網路是一種使用無監督式學習(Unsupervised Learning)來產生訓練樣本的輸入空間的一個低維(通常是二維)離散化的表示的人工神經網路(ANN)。自組織映射與其他人工神經網路的不同之處在於它使用一個鄰近函數來保持輸入控制項的拓撲性質。
自組織映射中學習的目標是使網路的不同部分對輸入模式有相似的響應。這部分的靈感是來自於人類大腦皮層的不同部分處理視覺、聽覺或其他感官信息的方式,借用維基百科中的介紹:
通俗來講,SOM網共有兩層,輸入層模擬感知外界輸入信息的視網膜,輸出層模擬做出響應的大腦皮層。想要深入了解的同學建議參考CSDN中的一個系列文章(https://blog.csdn.net/xbinworld/article/details/50818803)
下圖是1維和2維的兩個SOM網路示意圖。
我們直接給出代碼:
close all; clear all; clc;
%% Define 4 clusters of input data
% number of samples of each cluster
K = 200;
% offset of classes
q = 1.1;
% define 4 clusters of input data
P = [rand(1,K)-q rand(1,K)+q rand(1,K)+q rand(1,K)-q;
rand(1,K)+q rand(1,K)+q rand(1,K)-q rand(1,K)-q];
% plot clusters
plot(P(1,:),P(2,:),"g.")
hold on
grid on
%% Create and train 1D-SOM
% SOM parameters
dimensions = [100];
coverSteps = 100;
initNeighbor = 10;
topologyFcn = "gridtop";
distanceFcn = "linkdist";
% define net
net1 = selforgmap(dimensions,coverSteps,initNeighbor,topologyFcn,distanceFcn);
% train
[net1,Y] = train(net1,P);
%% plot 1D-SOM results
% plot input data and SOM weight positions
plotsompos(net1,P);
grid on
%% Create and train 2D-SOM
% SOM parameters
dimensions = [10 10];
coverSteps = 100;
initNeighbor = 4;
topologyFcn = "hextop";
distanceFcn = "linkdist";
% define net
net2 = selforgmap(dimensions,coverSteps,initNeighbor,topologyFcn,distanceFcn);
% train
[net2,Y] = train(net2,P);
%% plot 2D-SOM results
% plot input data and SOM weight positions
plotsompos(net2,P);
grid on
% plot SOM neighbor distances
plotsomnd(net2)
% plot for each SOM neuron the number of input vectors that it classifies
figure
plotsomhits(net2,P)
樣本如下:
訓練的SOM神經網路結構如下:
1-D結果如下:
2-D結果如下:
鄰居權值如下:
總結一下之前投票的結果:
看來大家還是對機器學習比較感興趣呀,這段時間事情比較多,就先按照目前的方式推送,過段時間事情少一點之後我再結合這個投票結果調整一下推送內容,說不得要弄一本機器學習的書,系統地梳理一遍,這些都是後話,有什麼想法的話還是歡迎大家留言。最後,祝大家兒童節快樂,每天都開心地像個孩子
以上就是今天推送的內容,歡迎討論。
※使用前向神經網路做線性回歸
※使用徑向基神經網路做非線性回歸
TAG:蟹先森愛學習 |