It_Kompyuterny_Praktikum
.Pdfn_t=length(r_test);
X=[ones(n,1) r_set(:,1) r_set(:,2) r_set2(:,1) r_set2(:,2)]; A=X\r_set(:,3);
%Несоответствие на обучающей выборке
Out_m=X*A;
r_tr=norm(r_set(:,3)-Out_m)/sqrt(n);%ошибка
%Несоответствие на тестовой выборке
X_test=[ones(n_t,1) r_test(:,1) r_test(:,2) r_test2(:,1) r_test2(:,2)]; A=X_test\r_test(:,3);
Out_m=X_test*A;
r_check=norm(r_test(:,3)-Out_m)/sqrt(n_t); %ошибка,
где r_set2 и r_test2 – это матрицы, все элементы которых равны квадратам элементов матриц r_set и r_test соответственно. Для приведенного примера ошибки обучающей и тестовой выборок составили 5.9873 и 3.4317 соответственно.
Заметим, что приведенной код вычисления ошибок регрессии не является универсальным и может быть заменен другим, например, с использованием имеющихся функций среды MATLAB.
Таким образом, нечеткая модель точнее линейной и нелинейной моделей регрессии описывает рассматриваемую зависимость.
Вывод (пример):
В ходе выполнения лабораторной работы я научился работать с ANFISредактором для построения нечетких нейронных сетей.
Контрольные вопросы:
1.Что представляют собой нечеткие нейронные сети?
2.Какая нечеткая система лежит в основе систем ANFIS?
3.Как можно просмотреть базу знаний синтезированной системы ANFIS?
4.Какие методы генерации ANFIS-систем предусмотрены в ANFISредакторе?
5.Какие опции необходимо ввести при выборе метода субтрактивной кластеризации для генерации нечеткой системы?
Приложение 1. Функции пакета «Fuzzy Logic Toolbox» системы MATLAB для работы с системами нечеткой логики
Ниже перечислены основные из них:
101
addmf – добавление функции принадлежности в FIS (Fuzzy Inference System – Нечеткая система вывода);
addrule – добавление правила в FIS;
addvar – добавление переменной в FIS;
anfis – обучение FIS типа Сугено (Sugeno type);
convertfis – преобразование FIS-матрицы (Fuzzy Logic Toolbox v.1) в FIS-структуру (Fuzzy Logic Toolbox v.2);
defuzz – дефаззификация нечеткого множества;
discfis – дискретизация функций принадлежности всех термов, входящих в FIS;
dsigmf – функция принадлежности в виде разности между двумя сигмоидными функциями;
evalfis – выполнение нечеткого логического вывода;
evalmf – вычисление значений произвольной функции принадлежности;
evalmmf – расчет степеней принадлежностей для нескольких функций принадлежностей;
fcm – поиск кластеров по алгоритму fuzzy c-means;
findrow – нахождение строки в матрице, совпадающей с входной строкой;
fstrvcat – конкатенация матриц различного размера;
fuzarith – нечеткий калькулятор;
gauss2mf – двухсторонняя гауссовская функция принадлежности;
gaussmf – гауссовская функция принадлежности;
gbellmf – обобщенная колокообразная функция принадлежности;
genfis1 – генерирование из данных исходной FIS типа Сугено без использования кластеризации;
genfis2 – генерирование из данных исходной FIS типа Сугено с использованием субтрактивной (вычитающей) кластеризации;
genparam – генерирование исходных параметров функций принадлежности для обучения ANFIS (Adaptive-Network-based Fuzzy Inference System – Адаптивная сеть основанная на нечеткой системе вывода);
gensurf – генерирование поверхности «входы-выход», соответствующей FIS;
getfis – получение свойств FIS;
mam2sug – преобразование FIS типа Мамдани в FIS типа Сугено;
mf2mf – пересчет параметров встроенных функций принадлежности различных типов;
newfis – создание новой FIS;
parsrule – вставка в FIS правил, заданных в виде предложений на естественном языке;
pimf – -подобная функция принадлежности;
102
plotfis – вывод основных параметров FIS в виде графической схемы;
plotmf – вывод графиков функций принадлежности термов одной переменной;
probor – вероятностная реализация логической операции ИЛИ;
psigmf – произведение двух сигмоидных функций принадлежности;
readfis – загрузка FIS из файла;
rmmf – удаление функции принадлежности терма из FIS;
rmvar – удаление переменной из FIS;
setfis – назначение свойств FIS;
showfis – вывод на экран в текстовом формате данных, составляющих FIS-структуру;
showrule – вывод базы знаний FIS;
sigmf – сигмоидная функция принадлежности;
smf – s-подобная функция принадлежности;
subclust – оценка количества кластеров в субтрактивной (вычитающей) кластеризации;
sugmax – нахождения диапазона изменения выходной переменной в FIS типа Сугено;
trapmf – трапециевидная функция принадлежности;
trimf – треугольная функция принадлежности;
writefis – сохранение FIS на диске;
zmf – z-подобная функция принадлежности;
distfcm – расчет расстояния по Эвклиду;
initfcm – генерирование исходной матрицы степеней принадлежности для нечеткой c-means кластеризации;
isfis – проверка структуры данных системы нечеткого логического вывода.
103
Приложение 2. Функции пакета «Neural Network Toolbox» системы MATLAB для работы с нейронными сетями
Функции создания новой сети
network – создание нейронной сети пользователя Запись:
net=network
net=network(numInputs, numLayers, biasConnect, inputConnect, layerConnect, outputConnect, targetConnect) – функция возвращает созданную нейронную сеть с именем net и со следующими характеристиками (в скобках даны значения по умолчанию):
numInputs – количество входов (0), numLayers – количество слоев (0),
biasConnect – булевский вектор с числом элементов, равным количеству слоев (нули),
inputConnect – булевская матрица с числом строк, равным количеству слоев и числом столбцов, равным количеству входов (нули),
layerConnect – булевская матрица с числом строк и столбцов, равным количеству слоев (нули),
outputConnect – булевский вектор-строка с числом элементов, равным количеству слоев (нули),
targetConnect – вектор-строка, такая же, как предыдущая (нули).
newc – создание конкурентного слоя
net=newc(PR, S, KLR, CLR) – функция создания слоя Кохонена. Аргументы функции:
PR – R 2 матрица минимальных и максимальных значений для R входных элементов,
S – число нейронов,
KLR – коэффициент обучения Кохонена (по умолчанию 0.01), CLR – коэффициент «справедливости» (по умолчанию 0.001).
newcf – создание каскадной направленной сети
net=newcf(PR, [S1 S2…SNI], {TF1 TF2…TFNI}, BTF, BLF, PF) –
функция создания разновидности многослойной нейронной сети с обратным распространением ошибки – так называемой каскадной нейронной сети. Такая сеть содержит скрытых N1 слоев, использует входные функции типа dotprod и netsum, инициализация сети осуществляется функцией initnw.
Аргументы функции:
PR – R 2 матрица минимальных и максимальных значений для R входных элементов,
Si – размер i-го скрытого слоя, для N1 слоев,
TFi – функция активации нейронов i-го слоя, по умолчанию 'tansig',
104
BTF – функция обучения сети, по умолчанию 'traingd',
BLF – функция настройки весов и смещений, по умолчанию 'learngdm', PF – функция ошибки, по умолчанию 'mse'.
newelm – создание сети обратного распространения Элмана (Elman) net=newelm(PR, [S1 S2…SNI], {TF1 TF2…TFNI}, BTF, BLF, PF) –
функция создания сети Элмана. Аргументы такие же, как и у предыдущей функции.
newff – создание однонаправленной сети
net=newff(PR, [S1 S2…SNI], {TF1 TF2…TFNI}, BTF, BLF, PF) –
функция создания «классической» многослойной нейронной сети с обучением по методу обратного распространения ошибки.
newfftd – создание однонаправленной сети с входными задержками net=newfftd(PR, ID, [S1 S2…SNI], {TF1 TF2…TFNI}, BTF, BLF, PF) – то же, что и предыдущая функция, но с наличием задержек по входам. Дополнительный аргумент ID – вектор входных задержек.
newgrnn – создание обобщенной регрессионной нейронной сети net=newgrnn(P, T, spread) – функция создания обобщенно-регрессионной сети.
Аргументы:
P – R Q матрица Q входных векторов,
T – S Q матрица Q целевых векторов, spread – отклонение (по умолчанию 1.0).
newhop – создание рекуррентной сети Хопфилда
net=newhop(T) – функция создания сети Хопфилда. Использует только один аргумент
T – R Q матрица Q целевых векторов (значения элементов должны быть
+1 или -1).
newlin – создание линейного слоя
net=newlin(PR, S, ID, LR) – функция создания слоя линейных нейронов. Аргументы:
PR – R 2 матрица минимальных и максимальных значений для R входных элементов,
S – число элементов в выходном векторе,
ID – вектор входной задержки (по умолчанию [0]),
LR – коэффициент обучения (по умолчанию 0.01). Возвращается новый линейный слой.
При записи в форме net=newlin(PR, S, 0, P) используется аргумент P – матрица входных векторов,
105
возвращается линейный слой с максимально возможным коэффициентом обучения при заданной P.
newlind – конструирование линейного слоя
net=newlind(P, T) – функция проектирования нового линейного слоя. Данная функция по матрицам входных и выходных векторов методом наименьших квадратов определяет веса и смещения линейной нейронной сети.
newlvq – создание квантованной сети
net=newlvq(PR, S1, PC, LR, LF) – функция создания сети встречного распространения.
Аргументы:
PR – R 2 матрица минимальных и максимальных значений для R входных элементов,
S1 – число скрытых нейронов,
PC – S2 элементов вектора, задающих доли принадлежности к различным классам,
LR – коэффициент обучения, по умолчанию 0.01, LF – функция обучения, по умолчанию 'learnlv2'.
newp – создание перцептрона
net=newp(PR, S, TF, LF) – функция создания персептрона. Аргументы:
PR – R 2 матрица минимальных и максимальных значений для R входных элементов,
S – число нейронов,
TF – функция активации, по умолчанию 'hardlim', LF – функция обучения, по умолчанию 'learnp'.
newpnn – конструирование вероятностной нейронной сети net=newpnn(P, T, spread) – функция создания вероятностной нейронной сети. Аргументы – как у функции newgrnn.
newrb – конструирование сети с радиальным базисом
net=newrb(P, T, goal, spread) – функция создания сети с радиальными базисными элементами. Аргументы P, T, spread – такие же, как у функции newgrnn; аргумент goal – заданная среднеквадратическая ошибка.
newrbe – конструирование точной сети с радиальными базисными функциями
net=newrbe (P, T, spread) – функция создания сети с радиальными базисными элементами с нулевой ошибкой на обучающей выборке.
106
newsom – создание самоорганизующейся карты
net=newsom(PR, [D1, D2,…], TFCN, DFCN, OLR, OSTEPS, TLR, TND)
– функция создания самоорганизующейся карты с аргументами: PR – R 2 матрица минимальных и максимальных значений для R входных элементов,
I – размеры i-го слоя, по умолчанию [5 8],
TFCN – топологическая функция, по умолчанию 'hextop', DFCN – функция расстояния, по умолчанию 'linkdist',
OLR – коэффициент обучения фазы упорядочивания, по умолчанию 0.9, OSTEPS – число шагов фазы упорядочивания, по умолчанию 1000, TLR – коэффициент обучения фазы настройки, по умолчанию 0.02, TND – расстояние для фазы настройки, по умолчанию 1.
Функции обучения
[net, tr]=trainbfg(net, Pd, Tl, Ai, Q, TS, VV, TV) – функция обучения,
реализующая разновидность квазиньютоновского алгоритма обратного распространения ошибки (BFGS). Аргументы функции:
net – имя обучаемой нейронной сети,
Pd – наименование массива задержанных входов обучающей выборки, Tl – массив целевых значений выходов,
Ai – матрица начальных условий входных задержек,
Q – количество обучающих пар в одном цикле обучения (размер «пачки»), TS – вектор временных интервалов,
VV – пустой ([]) массив или массив проверочных данных, TV – пустой ([]) массив или массив тестовых данных.
Функция возвращает обученную нейронную net сеть и набор записей tr для каждого цикла обучения (tr.epoch – номер цикла, tr.perf – текущая ошибка обучения, tr.vperf – текущая ошибка для проверочной выборки, tr.tperf – текущая ошибка для тестовой выборки).
Процесс обучения происходит в соответствии со значениями следующих параметров (в скобках приведены значения по умолчанию): net.trainParam.epochs (100) – заданное количество циклов обучения, net.trainParam.show (25) – количество циклов для показа промежуточных
результатов,
net.trainParam.goal (0) – целевая ошибка обучения, net.trainParam.time (∞) – максимальное время обучения в секундах, net.trainParam.min_grad (10-6) – целевое значение градиента,
net.trainParam.max_fail (5) – максимально допустимая кратность превышения ошибки проверочной выборки по сравнению с достигнутым минимальным значением,
net.trainParam.searchFcn ('srchcha') – имя используемого одномерного алгоритма оптимизации.
Структуры и размеры массивов:
107
Pd – No Ni Ts – клеточный массив, каждый элемент которого P{i, j, ts} есть матрица Dij Q,
Tl – N1 TS – клеточный массив, каждый элемент которого P{i, ts} есть матрица Vi Q,
Ai – N1 LD – клеточный массив, каждый элемент которого Ai{i, k} есть матрица Si Q,
где
Ni=net.numInputs (количество входов сети), N1=net.numLayers (количество ее слоев), LD=net.numLayerDelays (количество слоев задержки),
Ri=net.inputs{i}.size (размер i–го входа), Si=net.layers{i}.size (размер i–го слоя),
Vi=net.targets{i}.size (размер целевого вектора), Dij=Ri*length(net.inputWeights{i, j}.delays).
Если массив VV – непустой, то он должен иметь структуру, определяемую следующими компонентами:
VV.PD – задержанные значения входов проверочной выборки, VV.Tl – целевые значения,
VV.Ai – начальные входные условия,
VV.Q – количество проверочных пар в одном цикле обучения, VV.TS – временные интервалы проверочной выборки.
Эти параметры используются для задания останова процесса обучения в случаях, когда ошибка для проверочной выборки не уменьшается или начинает возрастать.
Структуру, аналогичную структуре массива VV, имеет массив TV. Рассматриваемая функция, заданная в форме trainbfg(code), возвращает для значений аргумента, соответственно, 'phames' и 'pdefaults', имена параметров обучения и их значения по умолчанию.
Для использования функции в нейронных сетях, определяемых пользователем, необходимо:
2)установить параметр net.trainFcn='trainbfg' (при этом параметры алгоритма будут заданы по умолчанию);
3)установить требуемые значения параметров (net.trainParam).
Процесс обучения останавливается в случае выполнения любого из следующих условий:
превышено заданное количество циклов обучения
(net.trainParam.epochs),
превышено заданное время обучения
(net.trainParam.time),
ошибка обучения стала меньше заданной
(net.trainParam.goal),
градиент стал меньше заданного
(net.trainParam.min_grad),
108
возрастание ошибки проверочной выборки по сравнению с достигнутым минимальным превысило заданное значение
(net.trainParam.max_fail).
[net, tr]=trainbr(net, Pd, Tl, Ai, Q, TS, VV) – функция, реализующая так называемый Байесовский метод обучения, сущность которого заключается в подстройке весов и смещений сети на основе алгоритма Левенберга-Марквардта. Данный алгоритм минимизирует комбинацию квадратов ошибок и весов с выбором наилучшей такой (для получения наилучших обобщающих свойств сети). Эта процедура известна как Байесовская регуляризация, откуда следует название метода.
Аргументы, параметры, возвращаемые величины и использование – такие же, как у предыдущей функции. Сказанное остается в силе для всех остальных функций данной группы.
[net, tr]=traincgb(net, Pd, Tl, Ai, Q, TS, VV) – функция обучения нейронной сети, реализующая разновидность алгоритма сопряженных градиентов (так называемый метод Powell-Beale).
[net, tr]=traincgf(net, Pd, Tl, Ai, Q, TS, VV) – функция обучения нейронной сети, реализующая разновидность алгоритма обратного распространения ошибки в сочетании с методом оптимизации ФлетчераПоуэлла.
[net, tr]=traincgp(net, Pd, Tl, Ai, Q, TS, VV) – то же, что и в предыдущем случае, но с использованием метода Polak-Ribiere.
[net, tr]=traingd(net, Pd, Tl, Ai, Q, TS, VV) – функция, реализующая
«классический » алгоритм обратного распространения ошибки.
[net, tr]=traingda(net, Pd, Tl, Ai, Q, TS, VV) – то же, что и в предыдущем случае, но с адаптацией коэффициента скорости обучения.
[net, tr]=traingdm(net, Pd, Tl, Ai, Q, TS, VV) – функция, реализующая модифицированный алгоритм обратного распространения ошибки с введенной «инерционностью» коррекции весов и смещений.
[net, tr]=traingdx(net, Pd, Tl, Ai, Q, TS, VV) – функция, реализующая комбинированный алгоритм обучения, объединяющий особенности двух вышеприведенных.
[net, tr]=trainlm(net, Pd, Tl, Ai, Q, TS, VV) – данная функция возвращает веса и смещения нейронной сети, используя алгоритм оптимизации Левенберга-Марквардта.
[net, tr]=trainoss(net, Pd, Tl, Ai, Q, TS, VV) – функция, реализующая разновидность алгоритма обратного распространения ошибки с использованием метода секущих.
[net, tr]=trainrp(net, Pd, Tl, Ai, Q, TS, VV) – функция, реализующая разновидность алгоритма обратного распространения ошибки, так называемый упругий алгоритм обратного распространения (resilient backpropagation algorithm, RPROP).
109
[net, tr]=trainscg(net, Pd, Tl, Ai, Q, TS, VV) – данная функция возвращает веса и смещения нейронной сети, используя алгоритм масштабируемых сопряженных градиентов.
[net, tr]=trainwb(net, Pd, Tl, Ai, Q, TS, VV) – данная функция корректирует веса и смещения нейронной сети в соответствии с заданной функцией обучения нейронов.
[net, tr]=trainb1(net, Pd, Tl, Ai, Q, TS, VV) – то же, что и предыдущая функция, но одновременно на вход сети предъявляется только один вектор входа.
[net, Ac, El]=adaptwb(net, Pd, Tl, Ai, Q, TS) – функция адаптации весов и смещений нейронной сети. Используется совместно с функциями newp и newlin. Возвращает массив выходов слоев Ac и массив ошибок слоев El.
Функции использования сети
sim – моделирование нейронной сети
[Y, Pf, Af]=sim(net, P, Pi, Ai) – функция, моделирующая работу сети. Аргументы функции:
net – имя сети, P – ее входы, Pi – массив начальных условий входных задержек (по умолчанию они нулевые), Ai – массив начальных условий задержек слоя нейронов (по умолчанию они нулевые). Функция возвращает значения выходов Y и массивы конечных условий задержек.
Аргументы Pi, Ai, Pf, Af используются только в случаях, когда сеть имеет задержки по входам или по слоям нейронов.
Структура данных аргументов:
P – массив размера Ni TS, каждый элемент которого P{i, ts} является матрицей размера Ri Q.
Pi – массив размера Ni ID, каждый элемент которого Pi{i, k} (i-й вход в момент ts=k-ID) является матрицей размера Ri Q (по умолчанию – нуль). Ai – массив размера Nl LD, каждый элемент которого Ai{i, k} (выход i-го слоя в момент ts=k-LD) является матрицей размера Si Q (по умолчанию – нуль).
Y – массив размера NO TS, каждый элемент которого Y{i, ts} является матрицей размера Ui Q.
Pf – массив размера Ni ID, каждый элемент которого Pf{i, k} (i-й вход в момент ts=TS+k-ID) является матрицей размера Ri Q.
Af – массив размера Nl LD, каждый элемент которого Af{i, k} (выход i- го слоя в момент ts=TS+k-LD) является матрицей размера Si Q,
при этом
Ni=net.numInputs (количество входов сети), Nl=net.numLayers (количество ее слоев), No=net.numOutputs (количество выходов сети),
ID=net.numInputDelays (входные задержки), LD=net.numLayerDelays (задержки слоя),
TS=Number of time steps (число временных интервалов),
110
