www.gusucode.com > nnet 案例源码 matlab代码程序 > nnet/fit_house_demo.m
%% House Price Estimation % This example illustrates how a function fitting neural network can estimate % median house prices for a neighborhood based on neighborhood demographics. % Copyright 2010-2012 The MathWorks, Inc. %% The Problem: Estimate House Values % In this example we attempt to build a neural network that can estimate % the median price of a home in a neighborhood described by thirteen % demographic attributes: % % * Per capita crime rate per town % * Proportion of residential land zoned for lots over 25,000 sq. ft. % * Proportion of non-retail business acres per town % * 1 if tract bounds Charles river, 0 otherwise % * Nitric oxides concentration (parts per 10 million) % * Average number of rooms per dwelling % * Proportion of owner-occupied units built prior to 1940 % * Weighted distances to five Boston employment centres % * Index of accessibility to radial highways % * Full-value property-tax rate per $10,000 % * Pupil-teacher ratio by town % * 1000(Bk - 0.63)^2 % * Percent lower status of the population % % This is an example of a fitting problem, where inputs are matched up to % associated target outputs, and we would like to create a neural network % which not only estimates the known targets given known inputs, but can % generalize to accurately estimate outputs for inputs that were not % used to design the solution. % %% Why Neural Networks? % Neural networks are very good at function fit problems. A neural network % with enough elements (called neurons) can fit any data with arbitrary % accuracy. They are particularly well suited for addressing non-linear % problems. Given the non-linear nature of real world phenomena, like % house valuation, neural networks are a good candidate for solving % the problem. % % The thirteeen neighborhood attributes will act as inputs to a neural % network, and the median home price will be the target. % % The network will be designed by using the attributes of neighborhoods % whose median house value is already known to train it to produce % the target valuations. % %% Preparing the Data % Data for function fitting 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 thirteen elements % representing a neighborhood whose median house value is already known. % % Each corresponding column of the target matrix will have one element, % representing the median house price in 1000's of dollars. % % Here such a dataset is loaded. [x,t] = house_dataset; %% % We can view the sizes of inputs X and targets T. % % Note that both X and T have 506 columns. These represent 506 neighborhood % attributes (inputs) and associated median house values (targets). % % Input matrix X has thirteen rows, for the thirteen attributes. Target % matrix T has only one row, as for each example we only have one desired % output, the median house value. size(x) size(t) %% Fitting a Function with a Neural Network % The next step is to create a neural network that will learn to estimate % median house values. % % 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 fit % 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 = fitnet(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. % % 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,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 Neural Network % The mean squared error of the trained neural network can now be measured % with respect to the testing samples. This will give us a sense of how % well the network will do when applied to data from the real world. testX = x(:,tr.testInd); testT = t(:,tr.testInd); testY = net(testX); perf = mse(net,testT,testY) %% % Another measure of how well the neural network has fit the data is the % regression plot. Here the regression is plotted across all samples. % % The regression plot shows the actual network outputs plotted in terms of % the associated target values. If the network has learned to fit the % data well, the linear fit to this output-target relationship should % closely intersect the bottom-left and top-right corners of the plot. % % If this is not the case then further training, or training a network % with more hidden neurons, would be advisable. y = net(x); plotregression(t,y) %% % Another third measure of how well the neural network has fit data is the % error histogram. This shows how the error sizes are distributed. % Typically most errors are near zero, with very few errors far from that. e = t - y; ploterrhist(e) %% % This example illustrated how to design a neural network that estimates % the median house value from neighborhood characteristics. % % Explore other examples and the documentation for more insight into neural % networks and their applications.