www.gusucode.com > nnet 案例源码 matlab代码程序 > nnet/classify_crab_demo.m

    %% Crab Classification
% This example illustrates using a neural network as a classifier to identify
% the sex of crabs from physical dimensions of the crab.

%   Copyright 2010-2012 The MathWorks, Inc.

%% The Problem: Classification of Crabs
% In this example we attempt to build a classifier that can identify the sex
% of a crab from its physical measurements. Six physical characterstics of
% a crab are considered: species, frontallip, rearwidth, length, width and
% depth. The problem on hand is to identify the sex of a crab given the
% observed values for each of these 6 physical characterstics.
%
%% Why Neural Networks?
% Neural networks have proven themselves as proficient classifiers and are
% particularly well suited for addressing non-linear problems. Given the
% non-linear nature of real world phenomena, like crab classification,
% neural networks is certainly a good candidate for solving the problem.
%
% The six physical characterstics will act as inputs to a neural network
% and the sex of the crab will be target. Given an input, which constitutes
% the six observed values for the physical characterstics of a crab, the
% neural network is expected to identify if the crab is male or female.
%
% This is achieved by presenting previously recorded inputs to a neural
% network and then tuning it to produce the desired target outputs. This
% process is called neural network training.
%
%% Preparing the Data
% Data for classification problems are set up for a neural network by
% organizing the data into two matrices, the input matrix X and the target
% matrix T.
%
% Each ith column of the input matrix will have six elements
% representing a crabs species, fontallip, rearwidth, length, width
% and depth.
% 
% Each corresponding column of the target matrix will have two elements.
% Female crabs are reprented with a one in the first element, male crabs
% with a one in the second element. (All other elements are zero).
%
% Here such the dataset is loaded.

[x,t] = crab_dataset;
size(x)
size(t)

%% Building the Neural Network Classifier
% The next step is to create a neural network that will learn to identify
% the sex of the crabs.
%
% Since the neural network starts with random initial weights, the results
% of this example will differ slightly every time it is run. The random seed
% is set to avoid this randomness. However this is not necessary for your
% own applications.

setdemorandstream(491218382)

%%
% Two-layer (i.e. one-hidden-layer) feed forward neural networks can learn
% any input-output relationship given enough neurons in the hidden layer.
% Layers which are not output layers are called hidden layers.
%
% We will try a single hidden layer of 10 neurons for this example. In
% general, more difficult problems require more neurons, and perhaps more
% layers.  Simpler problems require fewer neurons.
%
% The input and output have sizes of 0 because the network has not yet
% been configured to match our input and target data.  This will happen
% when the network is trained.

net = patternnet(10);
view(net)

%%
% Now the network is ready to be trained. The samples are automatically
% divided into training, validation and test sets. The training set is
% used to teach the network. Training continues as long as the network
% continues improving on the validation set. The test set provides a
% completely independent measure of network accuracy.

[net,tr] = train(net,x,t);
nntraintool

%%
% To see how the network's performance improved during training, either
% click the "Performance" button in the training tool, or call PLOTPERFORM.
%
% Performance is measured in terms of mean squared error, and shown in
% log scale.  It rapidly decreased as the network was trained.
%
% Performance is shown for each of the training, validation and test sets.
% The version of the network that did best on the validation set is
% was after training.

plotperform(tr)

%% Testing the Classifier
% The trained neural network can now be tested with the testing samples
% This will give us a sense of how well the network will do when applied
% to data from the real world.
%
% The network outputs will be in the range 0 to 1, so we can use *vec2ind*
% function to get the class indices as the position of the highest element
% in each output vector.

testX = x(:,tr.testInd);
testT = t(:,tr.testInd);

testY = net(testX);
testIndices = vec2ind(testY)

%%
% One measure of how well the neural network has fit the data is the
% confusion plot.  Here the confusion matrix is plotted across all samples.
%
% The confusion matrix shows the percentages of correct and incorrect
% classifications.  Correct classifications are the green squares on the
% matrices diagonal.  Incorrect classifications form the red squares.
%
% If the network has learned to classify properly, the percentages in the
% red squares should be very small, indicating few misclassifications.
%
% If this is not the case then further training, or training a network
% with more hidden neurons, would be advisable.

plotconfusion(testT,testY)

%%
% Here are the overall percentages of correct and incorrect classification.

[c,cm] = confusion(testT,testY)

fprintf('Percentage Correct Classification   : %f%%\n', 100*(1-c));
fprintf('Percentage Incorrect Classification : %f%%\n', 100*c);

%%
% Another measure of how well the neural network has fit data is the
% receiver operating characteristic plot.  This shows how the false
% positive and true positive rates relate as the thresholding of outputs
% is varied from 0 to 1.
%
% The farther left and up the line is, the fewer false positives need to
% be accepted in order to get a high true positive rate.  The best
% classifiers will have a line going from the bottom left corner, to the
% top left corner, to the top right corner, or close to that.

plotroc(testT,testY)

%%
% This example illustrated using a neural network to classify crabs.
%
% Explore other examples and the documentation for more insight into neural
% networks and its applications.