Слайд 1Системы нечеткого вывода и Дерево решений
Слайд 2Деревья решений
Деревья решений – это способ представления правил в иерархической,
последовательной структуре, где каждому объекту соответствует единственный узел, дающий решение.
Под
правилом понимается логическая конструкция, представленная в виде "если ... то ...".
Слайд 3Деревья решений отлично справляются с задачами классификации, т.е. отнесения объектов
к одному из заранее известных классов.
Целевая переменная должна иметь
дискретные значения.
Слайд 4Как построить дерево решений?
Задано некоторое обучающее множество T,
содержащее объекты (примеры), каждый из которых характеризуется m признаками, причем
один из них указывает на принадлежность объекта к определенному классу.
Слайд 5Пусть через {C1, C2, ... Ck} обозначены классы, тогда существуют
3 ситуации:
множество T содержит один или более примеров, относящихся к
одному классу Ck. Тогда дерево решений для Т – это лист, определяющий класс Ck;
множество T не содержит ни одного примера, т.е. пустое множество. Тогда это снова лист, и класс, ассоциированный с листом, выбирается из другого множества отличного от T, скажем, из множества, ассоциированного с родителем;
множество T содержит примеры, относящиеся к разным классам. В этом случае следует разбить множество T на некоторые подмножества. Для этого выбирается один из признаков, имеющий два и более отличных друг от друга значений O1, O2, ... On. T разбивается на подмножества T1, T2, ... Tn, где каждое подмножество Ti содержит все примеры, имеющие значение Oi для выбранного признака. Это процедура будет рекурсивно продолжаться до тех пор, пока конечное множество не будет состоять из примеров, относящихся к одному и тому же классу.
Слайд 6Поскольку все объекты были заранее отнесены к известным нам классам,
такой процесс построения дерева решений называется обучением с учителем (supervised_learning).
На сегодняшний день существует значительное число алгоритмов, реализующих деревья решений, но наибольшее распространение и популярность получил следующий:
CART (Classification and Regression Tree) – это алгоритм построения бинарного дерева решений – дихотомической классификационной модели. Каждый узел дерева при разбиении имеет только двух потомков.
Большинство из известных алгоритмов являются "жадными алгоритмами". Если один раз был выбран признак, и по нему было произведено разбиение на подмножества, то алгоритм не может вернуться назад и выбрать другой признак, который дал бы лучшее разбиение. И поэтому на этапе построения нельзя сказать даст ли выбранный признак, в конечном итоге, оптимальное разбиение.
Слайд 7Этапы построения деревьев решений
При построении деревьев решений особое внимание уделяется
следующим вопросам: выбору критерия признака, по которому пойдет разбиение и
остановки обучения.
Слайд 8Правило разбиения. Каким образом следует выбрать признак?
Для построения дерева на
каждом внутреннем узле необходимо найти такое условие, которое бы разбивало
множество, ассоциированное с этим узлом, на подмножества. В качестве такой проверки должен быть выбран один из признаков.
Общее правило для выбора атрибута можно сформулировать следующим образом: выбранный признак должен разбить множество так, чтобы получаемые в итоге подмножества состояли из объектов, принадлежащих к одному классу, или были максимально приближены к этому, т.е. количество объектов из других классов ("примесей") в каждом из этих множеств было как можно меньше.
Слайд 9Статистический критерий
Алгоритм CART использует так называемый индекс Gini (в честь
итальянского экономиста Corrado Gini), который оценивает "расстояние" между распределениями классов.
где c – текущий узел, а pj – вероятность класса j в узле c.
Слайд 10Функции MatLab для работы с деревом решений.
Расчет бинарного дерева классификации
наблюдений
T = treefit(X,y)
функция предназначена для расчета
структуры Т, определяющей параметры бинарного дерева классификации наблюдений для матрицы независимых переменных Х и вектора значений зависимой переменной y.
Размерность матрицы Х - n×m, где n - число наблюдений, m - количество независимых переменных. Строки Х соответствуют наблюдениям, столбцы Х - независимым переменным. Число элементов вектора y должно быть равно n. Вектор y может быть задан как вектор строк. Выходная переменная T определяет бинарное дерево решений, в котором промежуточные узлы делятся ветвями на 2 возможных решения.
T = treefit(X,y,'param1',val1,'param2',val2,...)
дополнительные параметры 'param1', 'param2',… задаются в виде пары "название параметра, значение"
Слайд 11Графическое представление бинарного дерева классификации наблюдений
treedisp(T)
функция позволяет получить графическое представление бинарного дерева для классификации наблюдений
на основе входного аргумента T. Параметр Т определяет вид дерева решений и задается как структура. Т является выходным аргументом функции treefit. Промежуточные узлы дерева решений отмечены метками с условиями выбора относительно значения какой либо независимой переменной. Каждый из конечных узлов дерева решений имеет метку со значением зависимой переменной.
правило: левая ветвь соответствует выполнению условия относительно независимой переменной, правая - невыполнению этого условия. Определение значения зависимой переменной начинается с первого промежуточного узла, далее, следуя заданному условию, выбирается правая или левая исходящая ветвь.
treedisp(T,'param1',val1,'param2',val2,...)
дополнительные параметры 'param1', 'param2',: задаются в виде пары "название параметра, значение"
Слайд 12Пример:
Задача классификации для 4 независимых переменных meas, заданных на числовой
шкале, и зависимой переменной species, элементы вектора которой заданы как
3 значения по категориальной шкале.
>> load fisheriris
>> t = treefit(meas,species);
>> treedisp(t);
Слайд 13Расчет погрешности классификации на основе дерева решений
cost = treetest(T,'resubstitution')
функция позволяет рассчитать погрешность классификации,
определяемой бинарным деревом решений Т методом обратной подстановки исходных значений зависимой и независимых переменных. Входной аргумент Т формируется с помощью функции treefit.
Поскольку расчет вектора ошибок основан на исходной выборке, по которой была рассчитана структура Т, то элементы вектора cost будут представлять нижнюю границу доверительного интервала погрешности при использовании новой выборки.
cost = treetest(T,'test',X,y)
функция предназначена для расчета вектора погрешностей cost классификации, определяемой структурой Т по тестовой выборке X, y.
Х - матица значений независимых переменных. Столбцы Х соответствуют независимым переменным, строки - наблюдениям.
y - вектор значений зависимой переменой.
Тестовая выборка и исходная выборка, использованная в treefit при расчете Т, должны быть различны. Количество и порядок независимых переменных, столбцов матриц Х в исходной и тестовой выборках, должно быть одинаковым.
Слайд 14 [cost,secost,ntnodes,bestsize] = treetest(...)
функция позволяет рассчитать:
1. cost -
вектор погрешностей классификации;
2. secost - вектор стандартных ошибок для
элементов вектора cost;
3. ntnodes - вектор чисел конечных узлов последовательности сокращенных бинарных деревьев решений;
4. bestsize - скаляр, определяющий оптимальный уровень сокращения полного дерева решений Т.
Если bestsize=0, то оптимальным будет полное бинарное дерево решений Т. Величина bestsize должна соответствовать наименьшему бинарному дереву решений, обеспечивающему погрешность классификации, равной минимальной погрешности плюс ее стандартная ошибка.
Слайд 15Пример:
Рассматривается задача классификации. Зависимая переменная задана на категориальной шкале при
помощи вектора строк. Погрешность классификации рассчитывается методом обратной подстановки.
load fisheriris
t = treefit(meas,species);
treedisp(t);
cost = treetest(t,'resubstitution')
Слайд 16Расчет зависимой переменной по дереву классификации
YFIT = treeval(T,X)
функция
позволяет определить значения зависимой переменной YFIT по дереву классификации, параметры
которого задаются структурой T, для значений независимых переменных Х.
Структура Т формируется как выходной аргумент функции treefit. Х задается как матрица с размерностью n×m, где n - число наблюдений, m - количество независимых переменных. Строки Х соответствуют наблюдениям, столбцы Х - независимым переменным. Выходная переменная YFIT является вектором значений с числом элементов равным n. Значение YFIT(j) рассчитывается согласно строкам X(j,:). YFIT(j) является номером класса, к которому принадлежит точка с координатами X(j,:) в пространстве независимых переменных. Для определения названия класса соответствующего номеру YFIT(j) используется третий выходной аргумент cname.
Слайд 17[YFIT,NODE] = treeval(...)
кроме значений зависимой переменной функция возвращает массив
номеров узлов NODE соотнесенных c каждой строкой матрицы независимых переменных
Х(j,:). Размерность YFIT и NODE будет совпадать. С помощью функции treedisp в интерактивном режиме можно определить номер каждого выделенного в графическом окне узла в бинарном дереве решений.
Пример:
Задача классификации для 4 независимых переменных meas, заданных на числовой шкале, и зависимой переменной species, элементы вектора которой заданы по 3-м классам на категориальной шкале. Определение классов по зависимой переменной определяется для матрицы new_meas.
load fisheriris
t = treefit(meas,species);
new_meas=[5 3.1 1.35 0.32; 4 5.1 2.35 1.32; 2 0.1 3.35 0.22;]
YFIT = treeval(t, new_meas)
Слайд 18Пример совместного использования функций работы с деревом решений:
load fisheriris;
t1
= treefit(meas,species, 'names',{'SL' 'SW' 'PL' 'PW'});
treedisp(t1)
pr=t1(meas(55,:))
Слайд 19Расчет параметров бинарного дерева решений
T2 = treeprune(T1,'level',level)
функция предназначена для
получения сокращенной до уровня 'level' иерархической регрессионной модели T2 из
начального бинарного дерева решений T1.
T1 является выходной переменной функции treefit.
Значение параметра 'level' - level должно быть целым положительным числом. Если level=0, то T2 будет получено без сокращения T1.
Исходное бинарное дерево решений T1 сокращается по оптимальной схеме, т.е. в первую очередь удаляются промежуточные узлы соответствующие наименьшему уменьшению погрешности иерархической регрессионной модели.
Слайд 20Функции Fuzzy Logic Toolbox для работы с FIS
plotfis ( fis
)
Функция plotfis выводит в графическом окне структуру системы нечеткого логического
вывода fis.
Входные переменные системы изображаются в левой части графического окна, выходные переменные – в правой части, в центре – база знаний.
В графическом окне выводится наименование и тип системы нечеткого логического вывода, количество термов для каждой переменной и количество правил. Также изображаются графики функций принадлежности всех термов.
Пример:
a=readfis(‘tipper’);
plotfis(a)
Слайд 21fis = newfis(fis_name, fis_type)
Создает в рабочей области новую систему нечеткого
логического вывода. Функция newfis может иметь до семи входных аргументов:
fis_name
- наименование системы нечеткого логического вывода;
fis_type - тип системы нечеткого логического вывода. Допустимые значения:'mamdani' - система типа Мамдани (значение по умолчанию);'Sugeno' - система типа Сугэно.
Пример:
a=newfis('new_fuzzy_system')
Слайд 22FIS_name= addvar (FIS_name, varType, varName, varBound)
Добавляет переменную в систему нечеткого
логического вывода. Переменную можно добавить только к существующей в рабочей
области MatLab системе нечеткого логического вывода. Функция addrvar имеет четыре входных аргумента:
FIS_name – идентификатор системы нечеткого логического вывода в рабочей области MatLab;
varType – тип добавляемой переменной. Допустимые значения - ‘input’ - входная переменная и ‘output’ – выходная переменная;
varName – наименование добавляемой переменной. Задается в виде строки символов;
varBound – вектор, задающий диапазон изменения добавляемой переменной.
Порядковый номер переменной в системе нечеткого логического вывода соответствует порядку добавления с помощью функции addvar, т.е. первая добавленная переменная будет иметь порядковый номер 1. Входные и выходные переменные нумеруются независимо.
Слайд 23FIS_name=addmf(FIS_name, varType, varIndex, mfName, mfType, mfParams)
Функцию принадлежности можно добавить только
к существующей в рабочей области MatLab системе нечеткого логического вывода.
Другими словами система нечеткого логического вывода должна быть каким-то образом загружена в рабочую область или создана с помощью функции newfis. Функция addmf имеет шесть входных аргументов:
FIS_name – идентификатор системы нечеткого логического вывода в рабочей области MatLab;
varType – тип переменной, к которой добавляется функция принадлежности. Допустимые значения - ‘input’ - входная переменная и ‘output’ – выходная переменная;
varIndex – порядковый номер переменной, к которой добавляется функция принадлежности;
mfName – наименование добавляемой функции принадлежности (терм). Задается в виде строки символов;
mfType – тип (модель) добавляемой функции принадлежности. Задается в виде строки символов;
mfParams – вектор параметров добавляемой функции принадлежности.
Порядковый номер функции принадлежности в системе нечеткого логического вывода соответствует порядку добавления с помощью функции addmf, т.е. первая добавленная функция принадлежности всегда будет иметь порядковый номер 1. С помощью функции addmf невозможно добавить функцию принадлежности к несуществующей переменной. В этом случае необходимо вначале добавить переменную к системе нечеткого логического вывода с помощью функции addvar.
Слайд 24Пример:
FIS_name=addmf(FIS_name, ‘input’, 1, ‘низкий’, ‘trapmf’, [150, 155, 165, 170])
Строка добавляет
в терм-множество первой входной переменной нечеткой системы FIS_name терм ‘низкий’
с трапециевидной функцией принадлежности с параметрами [150, 155, 165, 170].
FIS_name= addrule (FIS_name, ruleList)
Правила можно добавить только к существующей в рабочей области MatLab системе нечеткого логического вывода. Функция addrule имеет два входных аргумента:
FIS_name – идентификатор системы нечеткого логического вывода в рабочей области MatLab;
ruleList – матрица добавляемых правил
Слайд 25Матрица правил должна быть задана в формате indexed. Количество строк
матрицы ruleList равно количеству добавляемых правил, т.е. каждая строка матрицы
соответствует одному правилу. Количество столбцов матрицы равно m+n+2, где m (n) – количество входных (выходных) переменных системы нечеткого логического вывода.
Первые m столбцов соответствуют входным переменным, т.е. задают ЕСЛИ-часть правил. Элементы этих столбцов содержат порядковые номера термов, используемых для лингвистической оценки соответствующих входных переменных. Значение 0 указывает, что соответствующая переменная в правиле не задана, т.е. ее значение равно none.
Следующие n столбцов соответствуют выходным переменным, т.е. задают ТО-часть правил. Элементы этих столбцов содержат порядковые номера термов, используемых для лингвистической оценки соответствующих выходных переменных.
Предпоследний столбец матрицы содержит весовые коэффициенты правил. Значения весовых коэффициентов должны быть в диапазоне [0, 1].
Последний столбец матрицы задает логические связки между переменными внутри правил. Значение 1 соответствует логической операции И, а значение 2 – логической операции ИЛИ.
Слайд 26Пример:
FIS_name=addrule(FIS_name, [1 1 1 1 1; 1 2 2 0.5
1])
Строка добавляет в базу знаний системы FIS_name два правила, которые
интерпретируются следующим образом:
Если вход1=MF1 и вход2=MF1, то выход1=MF1 с весом 1,
Если вход1=MF1 и вход2=MF2, то выход1=MF2 с весом 0.5,
где MF1 (MF2) – терм с порядковым номером 1 (2).
Слайд 27Пример совместного использования дерева решений и нечеткого вывода
В качестве примера
возьмем выборку ирисов Фишера, в которой хранится 150 объектов, имеющих
по 4 признака и принадлежащих к 3 сортам (setoza, versicolor,virginica)
Слайд 28load fisheriris %Загрузка файла
P_train1=meas(1:25,:);%Формирование обучающей
P_train2=meas(51:75,:);% последовательности
P_train3=meas(101:125,:);
P_train=[P_train1;P_train2;P_train3];
T_train(1:25,1)='1';%Формирование группировочных данных
T_train(26:50,1)='2';%для обучающей
последовательности
T_train(51:75,1)='3';
t = treefit(P_train,T_train);%Построение дерева
[c,s,n,best] = treetest(t,'cross',P_train,T_train,'treesize','se');
%Подсчет ошибки
tmin = treeprune(t,'level',best);
%Построение дерева
минимальной стоимости
treedisp(tmin,'names',{'SL' 'SW' 'PL' 'PW'});
% Вывод дерева минимальной стоимости
X_train=treeval(t,P_train);
%Вычисление значений группировочного признака по дереву
%для обучающей выборки
Слайд 29P_ch1=meas(26:50,:);
%Формирование контролирующей выборки
P_ch2=meas(76:100,:);
P_ch3=meas(126:150,:);
P_ch=[P_ch1;P_ch2;P_ch3];
X_ch=treeval(tmin,P_ch);
fis = newfis('spect.fis','sugeno');
%Создание системы нечеткого вывода
fis = addvar(fis,
'input', 'PL', [1 6.9]);
%Добавление входных и выходных переменных, их термов
и правил
fis = addmf(fis,'input',1,'low','trimf',[1 1.8 2.6]);
fis = addmf(fis,'input',1,'high','trimf',[2.6 4.75 6.9]);
fis = addvar(fis, 'input', 'PW', [0.1 2.5]);
fis = addmf(fis,'input',2,'low','trimf',[0.1 0.87 1.65]);
fis = addmf(fis,'input',2,'high','trimf',[1.65 2.37 2.5]);
fis = addvar(fis, 'output', 'out', [ 1 3]);
Слайд 30fis = addmf(fis,'output',1,'klass1','constant',1);
fis = addmf(fis,'output',1,'klass2','constant',2);
fis = addmf(fis,'output',1,'klass3','constant',3);
ruleList=[
1
0 1 1 1;
2 1 2 1
1;
2 2 3 1 1;
];
fis = addrule(fis, ruleList);
%Вывод системы нечеткого вывода
plotfis(fis);
showfis(fis);
writefis(fis,'spect.fis');
%Запись системы нечеткого вывода в файл
%Формирование признаков, участвующих в системе нечеткого вывода
P_train34=P_train(:,3:4);
P_ch34=P_ch(:,3:4);
%Вычисление выходной величины по системе нечеткого вывода
Y_train=evalfis(P_train34,fis);
Y_ch=evalfis(P_ch34,fis);
Слайд 31Подсчет количества совпадений
TR_TRAIN1=size(find(X_train(1:25)==1),1)
TR_TRAIN2=size(find(X_train(26:50)==2),1)
TR_TRAIN3=size(find(X_train(51:75)==3),1)
FS_TRAIN1=size(find(Y_train(1:25)==1),1)
FS_TRAIN2=size(find(Y_train(26:50)==2),1)
FS_TRAIN3=size(find(Y_train(51:75)==3),1)
TR_CH1=size(find(X_ch(1:25)==1),1)
TR_CH2=size(find(X_ch(26:50)==2),1)
TR_CH3=size(find(X_ch(51:75)==3),1)
FS_CH1=size(find(Y_ch(1:25)==1),1)
FS_TRAIN2=size(find(Y_ch(26:50)==2),1)
FS_TRAIN3=size(find(Y_ch(51:75)==3),1)
Слайд 32Дерево минимальной стоимости
Система нечеткого вывода