www.gusucode.com > nnet 案例源码 matlab代码程序 > nnet/cluster_iris_demo.m
%% Iris Clustering % This example illustrates how a self-organizing map neural network can % cluster iris flowers into classes topologically, providing insight % into the types of flowers and a useful tool for further analysis. % Copyright 2010-2012 The MathWorks, Inc. %% The Problem: Cluster Iris Flowers % In this example we attempt to build a neural network that clusters iris % flowers into natural classes, such that similar classes are grouped % together. Each iris is described by four features: % % * Sepal length in cm % * Sepal width in cm % * Petal length in cm % * Petal width in cm % % This is an example of a clustering problem, where we would like to group % samples into classes based on the similarity between samples. We would % like to create a neural network which not only creates class definitions % for the known inputs, but will let us classify unknown inputs % accordingly. % %% Why Self-Organizing Map Neural Networks? % Self-organizing maps (SOMs) are very good at creating classifications. % Further, the classifications retain topological information about which % classes are most similar to others. Self-organizing maps can be created % with any desired level of detail. They are particularly well suited for % clustering data in many dimensions and with complexly shaped and % connected feature spaces. They are well suited to cluster iris flowers. % % The four flower attributes will act as inputs to the SOM, which will % map them onto a 2-dimensional layer of neurons. % %% Preparing the Data % Data for clustering problems are set up for a SOM by organizing the data % into an input matrix X. % % Each ith column of the input matrix will have four elements % representing the four measurements taken on a single flower. % % Here such a dataset is loaded. x = iris_dataset; %% % We can view the size of inputs X. % % Note that X has 150 columns. These represent 150 sets of iris flower % attributes. It has four rows, for the four measurements. size(x) %% Clustering with a Neural Network % The next step is to create a neural network that will learn to cluster. % % *selforgmap* creates self-organizing maps for classify samples with as % as much detailed as desired by selecting the number of neurons in each % dimension of the layer. % % We will try a 2-dimension layer of 64 neurons arranged in an 8x8 % hexagonal grid for this example. In general, greater detail is achieved % with more neurons, and more dimensions allows for the modelling the % topology of more complex feature spaces. % % The input size is 0 because the network has not yet been configured % to match our input data. This will happen when the network % is trained. net = selforgmap([8 8]); view(net) %% % Now the network is ready to be optimized with *train*. % % The NN Training Tool shows the network being trained and the algorithms % used to train it. It also displays the training state during training % and the criteria which stopped training will be highlighted in green. % % The buttons at the bottom open useful plots which can be opened during % and after training. Links next to the algorithm names and plot buttons % open documentation on those subjects. [net,tr] = train(net,x); nntraintool %% % Here the self-organizing map is used to compute the class vectors of % each of the training inputs. These classfications cover the feature % space populated by the known flowers, and can now be used to classify % new flowers accordingly. The network output will be a 64x150 matrix, % where each ith column represents the jth cluster for each ith input % vector with a 1 in its jth element. % % The function *vec2ind* returns the index of the neuron with an output % of 1, for each vector. The indices will range between 1 and 64 for % the 64 clusters represented by the 64 neurons. y = net(x); cluster_index = vec2ind(y); %% % *plotsomtop* plots the self-organizing maps topology of 64 neurons % positioned in an 8x8 hexagonal grid. Each neuron has learned to % represent a different class of flower, with adjecent neurons typically % representing similar classes. plotsomtop(net) %% % *plotsomhits* calculates the classes for each flower and shows the number % of flowers in each class. Areas of neurons with large numbers of hits % indicate classes representing similar highly populated regions of the % feature space. Wheras areas with few hits indicate sparsely populated % regions of the feature space. plotsomhits(net,x) %% % *plotsomnc* shows the neuron neighbor connections. Neighbors typically % classify similar samples. plotsomnc(net) %% % *plotsomnd* shows how distant (in terms of Euclidian distance) each % neuron's class is from its neighbors. Connections which are bright % indicate highly connected areas of the input space. While dark % connections indicate classes representing regions of the feature space % which are far apart, with few or no flowers between them. % % Long borders of dark connections separating large regions of the input % space indicate that the classes on either side of the border represent % flowers with very different features. plotsomnd(net) %% % *plotsomplanes* shows a weight plane for each of the four input features. % They are visualizations of the weights that connect each input to each % of the 64 neurons in the 8x8 hexagonal grid. Darker colors represent % larger weights. If two inputs have similar weight planes (their color % gradients may be the same or in reverse) it indicates they are highly % correlated. plotsomplanes(net) %% % This example illustrated how to design a neural network that clusters % iris flowers based on four of their characteristics. % % Explore other examples and the documentation for more insight into neural % networks and their applications.