Идентификация нелинейных зависимостей нечёткими базами знаний
Краткие сведения из теории
Идентификация нелинейных зависимостей, т. е. построение их моделей по результатам наблюдений, является важной задачей в технике, экономике, политике, медицине, спорте и в других областях. Работы по нечеткой идентификации нелинейных зависимостей интенсивно проводятся за рубежом с 1990-х годов. На первом этапе выполняется структурная идентификация. Она представляет собой формирование нечеткой базы знаний, которая грубо отражает нелинейную взаимосвязь «входы-выход» с помощью лингвистических правил <Если-то>. Эти правила генерируются экспертом либо получаются в результате экстракции нечетких знаний из экспериментальных данных. На втором этапе происходит параметрическая идентификацияисследуемой зависимости путем нахождения таких параметров нечеткой базы знаний, которые минимизируют отклонение результатов нечеткого моделирования от экспериментальных данных. Настраиваемыми параметрами являются веса правил и параметры функций принадлежности нечетких термов.
Методические указания
Результаты наблюдений зависимости у=f(x1,x2) представлены трех-
мерным графиком
n = 15
x1 = linspace(-7,3,n); x2 = linspace(-4.4,1.7,n);
y = zeros(n, n);
for j = 1:n
y(j,:) = x1.^2*sin(x2(j)-1);
end
surf(x1, x2, y)
xlabel('x_1'); ylabel('x_2'); zlabel('y');
title('Искомая зависимость')

и обучающей выборкой из 20 пар «входы-выход».
-3,00 | -2,00 | -1,27 |
-2,00 | -3,00 | 3,03 |
-7,00 | -4,00 | 46,99 |
-3,79 | 0,98 | -0,32 |
1,91 | 1,27 | 0,97 |
-4,91 | -3,35 | 22,52 |
-5,38 | -1,06 | -25,53 |
-0,39 | -1,28 | -0,12 |
-6,35 | -2,74 | 22,69 |
-1,90 | -3,71 | 3,61 |
-3,42 | 0,30 | -7,55 |
-0,24 | 0,82 | -0,01 |
-3,81 | -3,82 | 14,46 |
-6,29 | -2,40 | 10,26 |
-3,39 | -3,04 | 8,96 |
-3,88 | -1,12 | -12,87 |
-6,25 | -1,32 | -28,66 |
-2,39 | 0,24 | -3,92 |
-5,62 | -1,33 | -22,98 |
-5,77 | -0,38 | -32,67 |
Необходимо идентифицировать зависимость нечеткой базой знаний и сравнитьполученную модель с эталонной зависимостью
в области
,
. Адекватность нечеткой модели необходимо проверить на тестовой выборке из 50 случайно сгенерированных пар «входы-выход».
-2,16 | -4,35 | 3,76 |
-4,97 | 0,02 | -20,49 |
2,69 | -3,13 | 6,02 |
-6,67 | -0,49 | -44,31 |
-0,69 | -3,55 | 0,47 |
0,93 | -1,52 | -0,50 |
-3,09 | 1,64 | 5,69 |
-2,33 | 1,11 | 0,57 |
1,47 | -1,75 | -0,82 |
-1,22 | -2,36 | 0,32 |
-1,08 | -3,44 | 1,13 |
0,24 | -3,43 | 0,06 |
0,73 | -1,65 | -0,25 |
-5,31 | -3,41 | 26,87 |
-5,51 | -3,03 | 23,59 |
-0,29 | -0,02 | -0,07 |
-6,92 | -4,32 | 39,21 |
-1,66 | 1,52 | 1,37 |
-6,00 | -1,85 | -10,29 |
1,20 | 1,16 | 0,23 |
1,70 | 0,96 | -0,12 |
-3,53 | 0,20 | -8,92 |
-1,75 | -2,66 | 1,52 |
-3,48 | -4,38 | 9,49 |
0,82 | -3,87 | 0,66 |
-4,06 | -0,09 | -14,60 |
1,33 | -4,19 | 1,57 |
-3,62 | -4,32 | 10,75 |
-3,28 | -2,47 | 3,45 |
-3,98 | -0,77 | -15,50 |
2,30 | -2,38 | 1,28 |
2,57 | -2,55 | 2,64 |
-6,94 | -0,96 | -44,62 |
-2,86 | 0,53 | -3,71 |
-0,66 | -1,86 | -0,12 |
1,45 | 0,53 | -0,94 |
-4,82 | -0,36 | -22,72 |
-2,00 | -2,74 | 2,26 |
-6,42 | 0,72 | -11,44 |
1,59 | -3,78 | 2,53 |
1,27 | 0,59 | -0,65 |
-0,28 | -0,86 | -0,08 |
-1,99 | -3,95 | 3,86 |
-3,01 | -1,75 | -3,46 |
-6,35 | -0,70 | -40,02 |
1,96 | -0,01 | -3,26 |
2,48 | 0,57 | -2,56 |
-3,84 | -2,41 | 3,85 |
-1,20 | -1,20 | -1,17 |
-1,37 | -0,10 | -1,68 |
Командой anfiseditзагрузим ANFIS-редактор, в котором сгенерируем и обучим нечеткую систему типа Сугено.

ДлязагрузкиобучающейвыборкивокнеANFIS-редактора (рис. 3.15) полеLoaddataвыберемопцииTraining(менюТуре:) иworksp. (менюFrom:) и нажмем кнопку LoadData.... В результате появится окно, в котором напечатаем идентификатор обучающей выборки tr_setи нажмем ОК. Для загрузки тестовой выборки установим опцию Testingв меню Type, нажмем LoadData... и в появившемся окне напечатаем test_set. После этих действий ANFIS-редактор будет выглядеть так, как показано на рисунке. Данные обучающей выборки показаны окружностями, а тестовой выборки - точками.

Создадим исходную систему нечеткого вывода, нажав кнопку GenerateFIS....По умолчанию используется простой метод решетчатого разбиения (Gridpartition),согласно которому функции принадлежности нечетких термов равномерно распределяются внутри диапазона изменения данных.

Для термов входных лингвистических переменных выберем гауссовские функции принадлежности, а зависимость выходной переменной от входных пусть будет линейной. База знаний содержит все возможные варианты правил. Коэффициенты в заключениях правил принимаются равными нулю.
Теперь с нечеткой системой можно работать, используя GUI-модули пакета FuzzyLogicToolbox. Вызов этих модулей происходит через меню Editи View. Для изображения синтезированной системы в виде нейро-нечеткой сети необходимо нажать кнопку Structureв поле ANFISInfo.

Проведем обучение нечеткой системы на протяжении 25 итераций. Для этого в поле Epochs: меню TrainFISнапечатаем 25 и нажмем кнопку TrainNow. Динамика обучения выводится в основном окне ANFIS-редактора: ось абсцисс соответствует итерациям алгоритма обучения, а ось ординат - значениям средней квадратичной ошибки.

После настройки ошибка обучения составляет приблизительно 4*10^-3. Для проверки модели на тестовой выборке установим в полеTestFISопцию Testingdataи нажмем TestNow. Результаты тестирования выводятся в основном окне ANFIS-редактора.

Экспериментальные данные показаны ромбами, а результаты моделирования — звездочками. Сохранить на диске нечеткую систему можночерез меню File, задав ей имя, например, sugeno.
Трёхмерную поверхность смоделированной системы можно построить, воспользовавшись меню View — Surface.

Проверить точность получаемых прогностических результатов можно в режиме командной строки. Вычислим значение выходной переменной при значении входных -3 и -2.
input = [-3 -2]
fis=readfis('sugeno')
evalfis(input, fis)
Задание
Задача — прогнозирование климатических условий в г. Тамбов на основе предыдущих наблюдений. Статистику метеорологических наблюдений с 2005 года можно найти по адресу: http://goo. gl/wezkDE


