Разработка гибридной системы типа NNDFR, основанной на нечетком и нейросетевом подходе, в среде MATLAB

Анализ особенностей системы Neural-Network-Driven Fuzzy Reasoning (NNDFR) и рассмотрение вариантов ее оптимизации. Разработка программного модуля для реализации алгоритма системы NNDFR. Применение системы для решения задач регрессионного прогнозирования.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 30.08.2016
Размер файла 2,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

for i=1:n

for j=1:ClusterNumber

y(i)= y(i)+mem(j,i)*sim(NN(j).net,Inputs1(:,i));

end

y(i)= y(i)/sum(mem(:,i));

end

Y{1,k} = y;

error(k) = sqrt(mean((y-Targets).^2));

err_test(k) = sqrt(mean((y(TestInd)-Targets(TestInd)).^2));

err_train(k) = sqrt(mean((y(TrainInd)-Targets(TrainInd)).^2));

end

error

err_test

err_train

for k=1:s

if err_test(k)==min(err_test(:))

F(k)

yfin = Y{1,k};

errfin = error(k)

errfin_test = err_test(k)

errfin_train = err_train(k)

res = [TestInputs',TestTargets',(y(TestInd))'];

end

end

end

3. Функция обучения нейронных сетей

function [ net,tr,performance] = NeuralNet( inputs,targets )

% Число нейронов в скрытых слоях

hiddenNeurons = [8 8];

net = fitnet(hiddenNeurons);

net.divideFcn = 'dividerand';

net.divideParam.trainRatio = 80/100; % Обучающая выборка

net.divideParam.testRatio = 20/100; % Тестирующая выборка

net.trainFcn = 'trainlm'; %функция обучения Левенберга-Марквардта

%Предварительная обработка входных и целевых значений

net.inputs{1}.processFcns = {'removeconstantrows','mapminmax'};

net.outputs{2}.processFcns = {'removeconstantrows','mapminmax'};

net.performFcn = 'mse'; % среднеквадратичная ошибка

% Графики

net.plotFcns = {'plotperform','plottrainstate','ploterrhist', ... 'plotregression', 'plotfit'};

%net.trainParam.epochs=200; % число эпох обучения

% Обучение сети

[net,tr] = train(net,inputs,targets);

% Тестирование

y = net(inputs);

performance = perform(net,targets,y);

% Ошибки обучения и тестирования

target_train = targets .* tr.trainMask{1};

target_val = targets .* tr.valMask{1};

target_test = targets .* tr.testMask{1};

perf_train = perform(net,trainTargets,y);

perf_val = perform(net,valTargets,y);

perf_test = perform(net,testTargets,y);

%view(net)

end

4. Функция настройки числа кластеров методом локтя

function [k]=elbow(X)

kmax = 10;

distortion=zeros(kmax,1);

for i=1:kmax

[~,~,sumdist]=kmeans(X,i,'emptyaction','drop');

distortion(i,1)=sum(sumdist);

end

r=distortion(1:end-1)-distortion(2:end);

distortion_ratio=cumsum(r)/(distortion(1)-distortion(end));

plot(distortion)

%plot(distortion_percent,'b')

[p,~]=find(distortion_ratio>0.9);

k=p(1,1)+1;

end

Приложение 2

Результаты применения системы для решения практических задач (тестовые выборки)

1. Прогнозирование расхода топлива в NNDFR с четкой кластеризацией

2. Прогнозирование расхода топлива в NNDFR с нечеткой кластеризацией

3. Прогнозирование коэффициента пористости в NNDFR с четкой кластеризацией

4. Прогнозирование коэффициента пористости в NNDFR с нечеткой кластеризацией

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.