СУГЕНО С ПОМОЩЬЮ ANFIS-РЕДАКТОРА
Лабораторная работа № 3 по дисциплине: Прикладные нечёткие системы на тему: ЭКСТРАКЦИЯ ИЗ ДАННЫХ НЕЧЁТКОЙ СИСТЕМЫ СУГЕНО С ПОМОЩЬЮ ANFIS-РЕДАКТОРА
Выполнил: студент группы ВТМ-11 Соколов И.П. Проверил: доцент Боцула Л.Н.
2012 г. Задание: Построить нечёткую систему типа Сугено из экспериментальных данных на примере моделирования зависимости ширины лепестка ириса от длины чашелистика и длины лепестка. Экспериментальные данные записаны в файле iris.dat, который содержит результаты измерения 150 ирисов. Ширина лепестка записана в четвёртом столбце, длина чашелистика – в первом столбце, а длина лепестка – в третьем. Выполнение: 1) В обучающую выборку включим 120 ирисов, а в тестовую – 30. Для этого выполним следующие команды, по которым в рабочей области формируется обучающая выборка (tr_set) и тестовая выборка (test_set): >> ir=load('iris.dat'); >> iris_number=length(ir); >> test_index=[6:10:iris_number 7:10:iris_number]; >> tr_index=setdiff(1:iris_number, test_index); >> tr_set=ir(tr_index, [1 3 4]); >> test_set=ir(test_index, [1 3 4]). Результаты:
2) Командой anfisedit загрузим ANFIS-редактор (рис.1), в котором сгенерируем и обучим нечёткую систему типа Сугено. Для загрузки обучающей выборки в окне ANFIS-редактора в поле Load data выберем опцию Training (меню Type) и worksp. (меню From) и нажмём кнопку Load data... рис.1 3) В результате появится окно (рис.2), в котором напечатаем идентификатор tr_set и нажмём ОК. рис.2 Результат (рис.3): рис.3 4) Для загрузки тестовой выборки установим опцию Testing в меню Type, нажмём Load data… и в появившемся окне напечатать test_set. После этих действий ANFIS-редактор будет выглядеть как на рис. 4. Данные обучающей выборки показаны окружностями, а тестовой выборки – точками. рис.4 5) Создадим систему нечёткого вывода, нажав кнопку Generate FIS… (рис.5). По умолчанию используется простой метод решётчатого разбиения (Grid partition), согласно которому функции принадлежности нечётких термов равномерно распределяются внутри диапазона изменения данных. рис.5 6) Теперь с нечёткой логикой можно работать, используя GUI-модули пакета Fuzzy Logic Toolbox. Вызов этих модулей происходит через меню Edit и View. Для изображения синтезированной системы в виде нейро-нечёткой сети (рис.6) необходимо нажать кнопку Structure в поле ANFIS Info. рис.6 7) Проведём обучение нечёткой системы на 25 итераций. Для этого в поле Epochs: меню Train FIS напечатаем «25» и нажмём кнопку Train now. Динамика обучения выводится в основном окне ANFIS-редактора (рис. 7): ось абсцисс соответствует итерациям алгоритма обучения, а ось ординат – значениям очередной квадратичной оценки. После настройки ошибка обучения составляет примерно 1,8. рис.7 8) Для проверки модели на тестовой выборке установим в поле Test FIS опцию Testing data и нажмём Test Now. Результаты тестирования выводятся в основном окне ANFIS-редактора (рис. 8). Экспериментальные данные показаны точками, а результаты моделирования – звёздочками. Ошибка тестовой выборки составляет примерно 1,9. рис.8 9) Сохраним на диске нечёткую систему: File -> Export -> To disk (рис.9) рис.9 10) Сравним результаты нечёткой идентификации с линейной и квадратичной регрессиями. Идентификацию параметров линейной модели x4=a0+a1x1+a2x3 осуществим следующими командами: >> N=length(tr_set); >> NN=length(test_set); >> disp('Lineinaya model:') Lineinaya model: >> X=[ones(N,1) tr_set(:,1) tr_set(:,2)]; >> A=X\tr_set(:,3) A = 0.3730 -0.0975 0.4578 >> %Raschet nevyazki na obuchauschey viborke >> Out_model=X*A; >> rmg_tr=norm(tr_set(:,3)-Out_model)/sqrt(N) rmg_tr = 2.0158 >> %Raschet nevyazki na testovoy viborke >> X_test=[ones(NN,1) test_set(:,1) test_set(:,2)]; >> Out_model=X_test*A; >> rmg_ch=norm(test_set(:,3)-Out_model)/sqrt(NN) rmg_ch = 2.0783 В результате получаем модель: x4=0,373-0,098x1+0,458x3, ошибки которой на обучающей и тестовой выборке составляют 2,02 и 2,08 соответственно. 11) Для идентификации параметров нелинейной модели x4=a0+a1x1+a2x3+a3x1^2+a4x3^2+a5x1x3 выполним следующие команды: >> disp('Kvadratichnaya model:') Kvadratichnaya model: >> X=[ones(N,1) tr_set(:,1) tr_set(:,2) tr_set(:,1).^2 tr_set(:,2).^2 tr_set(:,1).*tr_set(:,2)]; >> A=X\tr_set(:,3) A = -25.5640 0.8696 0.3142 -0.0078 0.0035 -0.0017 >> Out_model=X*A; >> rmg_tr=norm(tr_set(:,3)-Out_model)/sqrt(N) rmg_tr = 1.9414 >> X_test=[ones(NN,1) test_set(:,1) test_set(:,2) test_set(:,1).^2 test_set(:,2).^2 test_set(:,1).*test_set(:,2)]; >> Out_model=X_test*A; >> rmg_ch=norm(test_set(:,3)-Out_model)/sqrt(NN) rmg_ch = 1.9923 В результате получаем модель: x4 = -25,564+0,87x1+0,314x3-0,008x1^2+0,004x3^2-0,002x1x3, ошибки которой на обучающей и тестовой выборках составляют 1,94 и 1,99 соответственно. Таким образом, нечёткая модель точнее линейной и квадратичной регрессий описывает зависимость ширины лепестка от длины чашелистика и длины лепестка.
|