Principio de red neuronal GRNN e implementación de matlab

1 Antecedentes del caso

1.1 Descripción general de la red neuronal GRNN

        Red neuronal de regresión generalizada (GRNN Red neuronal de regresión generalizada) fue propuesta por el académico estadounidense Don-ald F. Specht en 1991. Es una especie de red neuronal de base radial. GRNN tiene una fuerte capacidad de mapeo no lineal, estructura de red flexible, alta tolerancia a fallas y robustez, y es adecuado para resolver problemas no lineales. GRNN tiene mayores ventajas que la red RBF en términos de capacidad de aproximación y velocidad de aprendizaje.La red finalmente converge a la superficie de regresión optimizada con más acumulación de tamaño de muestra, y el efecto de predicción es mejor cuando los datos de muestra son menores. Además, la red también puede manejar datos inestables. Por lo tanto, GRNN ha sido ampliamente utilizado en el proceso de señales, análisis estructural, industria de la educación, energía, ciencia de los alimentos, sistema de decisión de control, diseño de medicamentos, campo financiero, bioingeniería y otros campos.

1.2 La estructura de red de GRNN

        (1) Capa de entrada
        El número de neuronas en la capa de entrada y la dimensionalidad del vector de entrada en la muestra de aprendizaje, cada neurona es una unidad de distribución simple, que transmite directamente la variable de entrada a la capa de patrón.
        (2) Capa de patrón
        El número de neuronas en la capa de patrón es igual al número de muestras de aprendizaje , cada neurona corresponde a una muestra diferente y la función de transferencia de las neuronas en la capa de patrón es
        (3) capa de suma
        Se utilizan dos tipos de neuronas en la capa de suma para la suma.

        (4) Capa de salida

1.3 Base teórica de GRNN

        La base teórica de la red neuronal de regresión generalizada es el análisis de regresión no lineal, y el análisis de regresión de la variable dependiente Y en relación con la variable independiente I es en realidad para calcular y con el mayor valor de probabilidad. Sea f(z, y) la función de densidad de probabilidad conjunta de la variable aleatoria x y la variable aleatoria y, y el valor observado de trabajador se conoce como X, entonces la regresión de y relativa a X, es decir, la media condicional es

1.4 Antecedentes del pronóstico del volumen de carga en el sistema de transporte

        Como subsistema del sistema socioeconómico, el sistema de transporte se ve influenciado y afectado por factores externos, pero también tiene cierta reacción al sistema económico externo, por lo que la demanda de transporte se ve afectada por factores tanto internos como externos del sistema de transporte. . Como base para la toma de decisiones de inversión en la construcción de infraestructura de transporte, la previsión de la demanda de transporte juega un papel muy importante en la planificación del desarrollo económico nacional y regional, una cuestión importante en el estudio de las relaciones de desarrollo. Por lo tanto, como un índice importante que refleja la demanda de transporte de carga, la investigación y el análisis de la previsión del volumen de carga tiene una gran importancia práctica y teórica.
        Los métodos de pronóstico de volumen de carga comúnmente utilizados incluyen métodos de series de tiempo, métodos de suavizado móvil, métodos de suavizado exponencial, métodos de series de tiempo aleatorio, correlación, métodos de análisis de regresión, métodos de pronóstico gris y métodos de pronóstico combinados que combinan múltiples métodos. La mayoría de estos métodos se centran en el análisis del modelo de regresión de causalidad y el modelo de serie temporal, y los modelos establecidos no pueden reflejar de forma completa, científica y esencial la estructura interna y las características complejas de los datos dinámicos predichos, y se pierde la cantidad de información. Como modelo de computación paralela, la red neuronal artificial tiene muchas ventajas que los métodos de modelado tradicionales no tienen: tiene una buena capacidad de mapeo no lineal, requiere poco conocimiento previo del objeto modelado y, en general, no necesita conocer la información relevante de antemano. Para el conocimiento de la estructura, parámetros y características dinámicas del objeto modelado, solo es necesario dar los datos de entrada y salida del objeto, y a través de la función de aprendizaje de la propia red, se puede lograr la concordancia completa entre entrada y salida. ser logrado.
        En este caso, algunos académicos nacionales han introducido redes neuronales en el pronóstico del volumen de carga. Sin embargo, cuando se usa la red neuronal BP para la aproximación de funciones, existen desventajas como una velocidad de convergencia lenta y un mínimo local, y el efecto no es ideal cuando se resuelve el problema del tamaño de muestra pequeño y el ruido grande. GRNN tiene fuertes ventajas en capacidad de aproximación, capacidad de clasificación y velocidad de aprendizaje.La red finalmente converge a la superficie de regresión óptima con la mayor acumulación de tamaño de muestra, y el efecto también es mejor cuando los datos son escasos. La red puede manejar datos inestables, por lo que este caso usa GRNN para establecer un modelo de pronóstico de volumen de carga y usa datos estadísticos históricos para predecir el volumen de carga.

2 modelo de edificio

        De acuerdo con el análisis de los factores que influyen en el volumen de carga, el producto interno bruto (PIB), el valor total de la producción industrial, la longitud de las líneas de transporte ferroviario, la proporción del kilometraje de doble vía, la longitud de las líneas de transporte por carretera, la proporción de carreteras niveladas, el número de vagones de carga ferroviarios y el número de camiones civiles se toman respectivamente8 GRNN se construye con tres factores de índice como la entrada de la red, el volumen total de carga, el volumen de carga ferroviaria y el volumen de carga por carretera como salida de la red. falta de datos de entrenamiento, la red neuronal GRNN se entrena mediante un método de validación cruzada y el modelo más óptimo se encuentra mediante un bucle.
        En este caso, hay dos conjuntos de datos p y t en data.mat, y cada uno contiene 13 conjuntos de datos, que representan el volumen de carga de 1996 a 2008 y los valores de varias variables relacionadas con él. Los primeros 12 conjuntos de datos de p y t se usan como datos de entrenamiento de la red, y el último conjunto de datos se usa como datos de predicción de la red, y la red neuronal GRNN se establece para predecir el volumen de carga.

3 Implementación de MATLAB

        La función relacionada de la red GRNN, su nombre de función es newgrnn () Esta función se puede utilizar para diseñar una red neuronal de regresión generalizada. La red neuronal de regresión generalizada es un tipo de red RBF, que generalmente se usa para la aproximación de funciones, y su formato de llamada es

net = newgrnn(P.T,SPREAD)

        Entre ellos, P es la matriz dimensional R*Q compuesta por Q grupos de vectores de entrada; T es la matriz dimensional S*Q compuesta por Q grupos de vectores de clasificación de destino; SPREAD es la velocidad de expansión de la función de base radial y el valor predeterminado el valor es 1
        De acuerdo con la entrada y salida de la red determinada anteriormente, utilice los datos históricos de un determinado lugar desde 1996 hasta 2007 como muestras de entrenamiento de la red, y los datos de 2008 como muestras de prueba de extrapolación de la red. el código se muestra a continuación:

%% Matlab神经网络43个案例分析


 
%% 清空环境变量
clc;
clear all
close all
nntwarn off;

%% 载入数据
load data;
% 载入数据并将数据分成训练和预测两类
p_train=p(1:12,:);
t_train=t(1:12,:);
p_test=p(13,:);
t_test=t(13,:);
%% 交叉验证
desired_spread=[];
mse_max=10e20;
desired_input=[];
desired_output=[];
result_perfp=[];
indices = crossvalind('Kfold',length(p_train),4);
h=waitbar(0,'正在寻找最优化参数....');
k=1;
for i = 1:4
    perfp=[];
    disp(['以下为第',num2str(i),'次交叉验证结果'])
    test = (indices == i); train = ~test;
    p_cv_train=p_train(train,:);
    t_cv_train=t_train(train,:);
    p_cv_test=p_train(test,:);
    t_cv_test=t_train(test,:);
    p_cv_train=p_cv_train';
    t_cv_train=t_cv_train';
    p_cv_test= p_cv_test';
    t_cv_test= t_cv_test';
    [p_cv_train,minp,maxp,t_cv_train,mint,maxt]=premnmx(p_cv_train,t_cv_train);
    p_cv_test=tramnmx(p_cv_test,minp,maxp);
    for spread=0.1:0.1:2;
        net=newgrnn(p_cv_train,t_cv_train,spread);
        waitbar(k/80,h);
        disp(['当前spread值为', num2str(spread)]);
        test_Out=sim(net,p_cv_test);
        test_Out=postmnmx(test_Out,mint,maxt);
        error=t_cv_test-test_Out;
        disp(['当前网络的mse为',num2str(mse(error))])
        perfp=[perfp mse(error)];
        if mse(error)<mse_max
            mse_max=mse(error);
            desired_spread=spread;
            desired_input=p_cv_train;
            desired_output=t_cv_train;
        end
        k=k+1;
    end
    result_perfp(i,:)=perfp;
end;
close(h)
disp(['最佳spread值为',num2str(desired_spread)])
disp(['此时最佳输入值为'])
desired_input
disp(['此时最佳输出值为'])
desired_output
%% 采用最佳方法建立GRNN网络
net=newgrnn(desired_input,desired_output,desired_spread);
p_test=p_test';
p_test=tramnmx(p_test,minp,maxp);
grnn_prediction_result=sim(net,p_test);
grnn_prediction_result=postmnmx(grnn_prediction_result,mint,maxt);
grnn_error=t_test-grnn_prediction_result';
disp(['GRNN神经网络三项流量预测的误差为',num2str(abs(grnn_error))])
save best desired_input desired_output p_test t_test grnn_error mint maxt

 El resultado de la operación es el siguiente:

最佳spread值为0.5
此时最佳输入值为

desired_input =

   -1.0000   -0.8993   -0.7948   -0.5023   -0.2955   -0.0574    0.1602    0.6652    1.0000
   -0.9998   -1.0000   -0.1291   -0.0072    0.2070    0.3417    0.5137    0.7838    1.0000
   -1.0000   -0.8616   -0.4969   -0.4969    0.1950    0.3333    0.4465    0.6604    1.0000
   -1.0000   -0.5385   -0.0769    0.5385    0.2308    0.3846    0.3846    0.6923    1.0000
   -1.0000   -0.9429   -0.9175   -0.7778   -0.5937   -0.3270   -0.0286    0.5619    1.0000
   -1.0000   -1.0000   -1.0000   -0.5000   -0.3000   -0.2000    0.0000    0.5000    1.0000
    0.0141   -1.0000    0.0187    0.0187    0.2477    0.3682    0.4944    0.7735    1.0000
   -1.0000   -0.9211   -0.8826   -0.9563   -0.7786   -0.6099   -0.3042    0.2843    1.0000

此时最佳输出值为

desired_output =

   -1.0000   -0.9839   -0.9838   -0.7127   -0.4503   -0.2463    0.0126    0.5394    1.0000
   -1.0000   -0.9040   -0.8604   -0.6403   -0.3950   -0.2293   -0.0769    0.4116    1.0000
   -1.0000   -0.8020   -0.8042   -0.5446   -0.2471   -0.0500    0.0416    0.4693    1.0000

GRNN神经网络三项流量预测的误差为9959.185       1777.8231       14498.027

        Se puede ver a partir de los resultados después de que se ejecuta el programa que cuando el valor SPREAD se establece en 0,5, la predicción de los datos de entrenamiento es mejor. Cuanto menor sea el valor de SPREAD, mayor será la aproximación de la red a la muestra; cuanto mayor sea el valor de SPREAD, más suave será el proceso de aproximación de la red a los datos de la muestra, pero el error también aumentará en consecuencia. En la aplicación práctica, para seleccionar el mejor valor de SPREAD, se adopta generalmente el método de entrenamiento de bucle en este caso, para lograr el mejor efecto de predicción.

Extensión de 4 casos

        Tanto la red neuronal GRNN como la red BP se pueden usar para predecir el volumen de carga, etc., pero para el entrenamiento específico de la red, GRNN necesita ajustar menos parámetros, solo un parámetro SPREAD, para que pueda predecir la red más rápido y tenga una mayor ventaja computacional. A continuación, se utilizará el modelo de red neuronal de BP para predecir los datos de tráfico para los datos de este caso. el código se muestra a continuación:

%% 以下程序为案例扩展里的GRNN和BP比较 需要load chapter8.1的相关数据
clear all
load best
n=13;
p=desired_input;
t=desired_output;
net_bp=newff(minmax(p),[n,3],{'tansig','purelin'},'trainlm');
% 训练网络
net.trainParam.show=50;
net.trainParam.epochs=2000;
net.trainParam.goal=1e-3;
%调用TRAINLM算法训练BP网络
net_bp=train(net_bp,p,t);
bp_prediction_result=sim(net_bp,p_test);
bp_prediction_result=postmnmx(bp_prediction_result,mint,maxt);
bp_error=t_test-bp_prediction_result';
disp(['BP神经网络三项流量预测的误差为',num2str(abs(bp_error))])

resultado de la operación:

BP神经网络三项流量预测的误差为6967.20678      11142.5527      4156.17376

Obtén el código completo:

https://download.csdn.net/download/weixin_44209907/88142535

Supongo que te gusta

Origin blog.csdn.net/weixin_44209907/article/details/132047725
Recomendado
Clasificación