Интерактивные модули с графическим пользовательским интерфейсом 2 страница
===================================================================
Построение графика треугольной функции принадлежности с параметрами [0 3 9] на интервале [0, 10].
В оглавление \ К следующему разделу \ К предыдущему разделу
| Вычисление степеней принадлежностей для нескольких функций принадлежностей |
Синтаксис:
y = evalmmf (x, params, types)
Описание:
Позволяет вычислить значения нескольких функции принадлежности нечетких множеств, заданных на одном и том же универсальном множестве. Функция evalmmf иметь три входных аргумента:
- x – вектор, для координат которого необходимо рассчитать степени принадлежности;
- params – матрица параметров функции принадлежности. Первая строка матрицы определяет параметры первой функции принадлежности, вторая строка – параметры второй функции принадлежности и т.д.;
- types – матрица типов функции принадлежности. Первая строка матрицы задает тип первой функции принадлежности, вторая строка – тип второй функции принадлежности и т.д. Значение типа функции принадлежности может быть задано в виде строчки символов или числом: 1 - 'trimf'; 2 - 'trapmf'; 3 - 'gaussmf'; 4 – ‘gauss2mf'; 5 - 'sigmf'; 6 - 'dsigmf'; 7 - 'psigmf'; 8 - 'gbellmf'; 9 - 'smf'; 10 - 'zmf'; 11 - 'pimf'. При задании другого типа функции принадлежности предполагается, что она определена пользователем и задана соответствующим m-файлом.
Функция evalmmf возвращает матрицу y, содержащую степени принадлежности координат вектора x. Первая строка матрицы содержит значения первой функции принадлежности, вторая строка – значения второй функции принадлежности и т.д.
Пример:
x = 0:0.2:10;para = [-1 2 3 4; 3 4 5 7; 5 7 8 0; 2 9 0 0];type = str2mat('pimf', 'trapmf', 'trimf', 'sigmf');mf = evalmmf(x, para, type);
plot(x', mf');
ylim([0 1.05])
legend('pimf', 'trapmf', 'trimf', 'sigmf');
===================================================================
Построение графиков пи-подобной, трапециевидной, треугольной и сигмоидной функций принадлежности на интервале [0, 10].
В оглавление \ К следующему разделу \ К предыдущему разделу
| Кластеризация на основе нечеткого c-means алгоритма |
Синтаксис:
[V, M, obj_fcn] = fcm(X, c)
[V, M, obj_fcn] = fcm(X, c, options)
Описание:
На основе нечеткого c-means алгоритма выполняет кластеризацию данных. Этот алгоритм кластеризации предложил Джеймс Бэздэк (James Bezdek) в 1981 году.
Задача нечеткой кластеризации ставится следующим образом.
Дано:
- – объекты, подлежащие кластеризации (n – количество объектов). Каждый объект представляет собой точку в p-мерном пространстве признаков ( );
- c – количество кластеров ( ).
Необходимо каждому элементу множества X поставить в соответствие степени принадлежности с классам.
Элементы одного кластера должны быть так близки каждый каждому, как это только возможно, и, одновременно, кластеры должны быть на наибольшем удалении друг от друга. Для обеспечения управляемости процесса кластеризации необходимо использовать меру близости, в качестве которой обычно определяют расстояние между двумя объектами (точками в p-мерном пространстве) и в виде вещественной функции , такой что:
;
;
.
Дополнительно, если функция удовлетворяет правилу треугольника, т. е. , тогда эта функция является метрикой, хотя выполнения этого свойства не всегда необходимо для задач кластеризации.
Любое разбиение множества на нечеткие подмножества ( ) может быть полностью описано функцией принадлежности .
Обозначим через - степень принадлежности объекта к подмножеству , т. е. , и через - множество всех действительных матриц размером . Тогда нечетким c-разбиением (или матрицей степеней принадлежности) называется матрица при выполнении следующих условий:
- , , ;
- , ;
- , .
В отличие от четкого, при нечетком c-разбиении любой объект одновременно принадлежит к различным кластерам, но с разной степенью. Условия (2) и (3) требуют только, чтобы сумма степеней принадлежности объекта ко всем кластерам была нормализована к 1, а также, чтобы количество кластеров, к которым принадлежит объект, не превышало .
Обозначим центры кластеров, т. е. точки в p-мерном пространстве, вокруг которых сконцентрированы соответствующие объекты, через , .
При использовании эвклидового расстояния задача нечеткой кластеризации состоит в нахождении такой матрицы степеней принадлежности и таких координат центров кластеров , которые обеспечивают минимум следующего критерия:
,
где - центр i-го кластера, ; - так называемый экспоненциальный вес ( ).
Значение экспоненциального веса устанавливается до начала кластеризации. Экспоненциальный вес влияет на матрицу степеней принадлежности. Чем больше , тем конечная матрица c-разбиения становится более “размазанной”, и при она примет вид , что является очень плохим решением, т. к. все объекты принадлежат ко всем кластерам с одной и той же степенью. Также, экспоненциальный вес позволяет при формировании координат центров кластеров усилить влияние объектов с большими значениями степеней принадлежности и уменьшить влияние объектов с малыми значениями степеней принадлежности. На сегодня не существует теоретически обоснованного правила выбора значения . Обычно устанавливают .
Аналитического решения задачи нахождения оптимальных координат центров кластеров и матрицы степеней принадлежности не существует, поэтому она решается численно. Один из итерационных алгоритмов решения этой задачи реализован в функции fcm.
Функция fcmможет иметь три входных аргумента:
- X – матрица, представляющая данные, подлежащие кластеризации. Каждая строка матрицы соответствует одному объекту (образу);
- c – количество кластеров, которое должно быть получено в результате выполнения функции fcm. Количество кластеров должно быть больше 1 и меньше числа образов, заданных матрицей X;
- options – необязательный аргумент, устанавливающий параметры алгоритма кластеризации:
options(1) – значения экспоненциального веса (значение по умолчанию – 2.0);
options(2) – максимальное количество итераций алгоритма кластеризации (значение по умолчанию – 100);
options(3) – минимально допустимое значение улучшения целевой функции за одну итерацию алгоритма (значение по умолчанию – 0.00001);
options(4) – вывод промежуточных результатов во время работы функции fcm (значение по умолчанию – 1).
Для использования значений по умолчанию можно вести NaN в качестве значения соответствующей координаты вектора options.
Алгоритм кластеризации останавливается когда выполнено максимальное количество итераций или когда улучшение значения целевой функции за одну итерацию меньше указанного минимально допустимого значения.
Функция fcmимеет три выходных аргумента:
- V – матрица координат центров кластеров, полученных в результате кластеризации. Каждая строка матрицы соответствует центру одного кластера;
- M – матрица степеней принадлежности образов к кластерам. Каждая строка матрицы соответствует функции принадлежности одного кластера.
- obj_fcn – вектор значений целевой функции на каждой итерации алгоритма кластеризации.
Примечание: при описании нечеткого c-means алгоритма использована книга Zimmermann H.-J. Fuzzy Set Theory - and Its Applications.3rd ed.- Kluwer Academic Publishers, 1996.- 435p.
Пример.
Проводится кластеризация объектов, образующих фигуру типа “бабочка”. Результаты кластеризации приведены ниже на рисунке. Центры кластеров указаны маркером ‘+’. Размер маркера ‘o’ пропорционален степени принадлежности объекта кластеру. Расположенный в центре объект имеет одинаковые степени принадлежности к красному и к синему кластерам. Это обеспечивает симметричное разбиение объектов по кластерам, что невозможно при четкой кластеризации.
X=[1 1; 1 4; 1 7; 3 2; 3 4; 3 6; 5 4; 7 4; 9 4; 11 2; 11 4; 11 6; 13 1; 13 4; 13 7];
[V M opt]=fcm(X, 2)
subplot(2,1,1);
plot(X(:,1), X(:,2), 'ko', 'markersize', 6)
text='Исходные данные';
title(text)
xlim([0 14])
ylim([0 8])
subplot(2,1,2);
plot(V(1,1), V(1,2), 'r+', 'markersize', 10)
hold on
plot(V(2,1), V(2,2), 'b+', 'markersize', 10)
for i=1:15
plot(X(i,1), X(i,2)+.05, 'ro', 'markersize', M(1,i)*8+2);
plot(X(i,1), X(i,2)-.05, 'bo', 'markersize', M(2,i)*8+2);
end
xlim([0 14])
ylim([0 8])
text='Результаты кластеризации';
title(text)
В оглавление \ К следующему разделу \ К предыдущему разделу
| Нахождение строки в матрице, совпадающей с входной строкой |
Синтаксис:
rownum = findrow (str, strmat)
Описание:
Функция findrowвозвращаетномер строки матрицы strmat, содержащую стринг, заданный аргументом str. Если таких строк несколько, то функция findrow возвратит номера всех строчек. Функция findrow не связана с нечеткими множествами и нечеткой логикой, она используются для выполнения алгоритмов обработки информации, необходимых для других функций Fuzzy Logic Toolbox.
Пример:
rownum = findrow('два ', ['один'; 'два '; 'три '])
===================================================================
Функция возвращает значения 2, которое означает, что стринг 'два ' содержится во второй строке матрицы ['один'; 'два '; 'три '].
В оглавление \ К следующему разделу \ К предыдущему разделу
| Конкатенация матриц различных размеров |
Синтаксис:
aout = fstrvcat(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
Описание:
Функция fstrvcat формирует матрицу aout, строки которой содержат вектора a1, a2, a3, …. Для того, чтобы сформировать корректную матрицу, к некоторым векторам добавляется необходимое количество нулевых символов. Количество входных аргументов не должно превышать 11. Входные аргументы функции fstrvcatмогут быть заданы как векторами, так и матрицами. Это позволяет формировать выходную матрицу aout пратически любого размера.
Функция fstrvcat не связана с нечеткими множествами и нечеткой логикой, она используются для выполнения алгоритмов обработки информации, необходимых для формирования fis-структуры.
Пример:
aout = fstrvcat ('hi', 'blue', [110 101 101 100 108 101])
===================================================================
Функция fstrvcatвозвращает следующую матрицу:
aout =
104 105 0 0 0 0
98 108 117 101 0 0
110 101 101 100 108 101,
строки которой содержат значения входных аргументов в формате ASCII.
В оглавление \ К следующему разделу \ К предыдущему разделу
| Выполнение нечетких арифметических операций |
Синтаксис:
c = fuzarith(x, a, b, operator)
Описание:
Выполняет арифметические операции сложения, вычитания, умножения и деления над нечеткими числами.
Функция fuzarithимеет четыре входных аргумента:
- x – универсальное множество, на котором заданны нечеткие числа;
- a – вектор, задающий первый операнд. Представляет собой вектор степеней принадлежности элементов универсального множества первому нечеткому множеству. Другими словами, аргументы x и a образует первое нечеткое число;
- b – вектор, задающий второй операнд. Представляет собой вектор степеней принадлежности элементов универсального множества второму нечеткому множеству, т.о. аргументы x и b образует второе нечеткое число;
- operator – арифметическая операция:
‘sum’ – сложение;
‘sub’ – вычитание;
‘prod’ – умножение;
‘div’ – деление.
Выходной переменной функции fuzarithявляется вектор степеней принадлежности элементов универсального множества x результату выполнения нечеткой арифметической операции. Размерности векторов x, a, b и c должны быть одинаковыми.
В функции fuzarithнечеткие арифметические выполняются по следующему алгоритму:
- преобразование нечетких чисел-операндов в -уровневые нечеткие множества;
- выполнения арифметической операции для каждого -уровня в соответствии с принципом обобщения;
- преобразование результирующего нечеткого числа из -уровнего представления к традиционному виду.
Функция fuzarithиспользует стандартные процедуры интерполяции для выполнения указанных выше преобразований. Количество -уровней равно 101.
Обратим внимание на то, что операция деления не может быть выполнена если универсальное множество содержит как отрицательные, так и положительные числа, что связано с делением на ноль.
При выполнении арифметически операций над нечеткими числами, как правило, носитель результирующего нечеткого числа отличен от носителей нечетких операндов. Функция fuzarithвыводит степени принадлежности результата только для универсального множества нечетких операндов, т.е. для множества x. Для вывода всего результирующего нечеткого числа необходима простая модификация функции fuzarith –вывод результата в виде нечеткого множества в -уровневом разложении. Результирующее нечеткое число в виде разложений по -уровням представлено в функции fuzarithпеременной intervalC.
Пример:
Рассчитывается нечеткое число c как произведение нечетких чисел a и b с гауссовскими функциями принадлежности, заданных на универсальном множестве {0, 0.01, …, 1}. Графики функций принадлежности показаны ниже на рисунке.
x=0:0.01:1;
a=gaussmf(x, [0.1 0.3]);
b=gaussmf(x, [0.2 0.6]);
c=fuzarith(x, a, b, 'prod');
plot(x, a, x, b, x, c)
legend('a', 'b', 'c=a*b')
В оглавление \ К следующему разделу \ К предыдущему разделу
| Двухсторонняя гауссовская функция принадлежности |
Синтаксис:
y = gauss2mf (x, params)
Описание:
Функция принадлежности в виде следующей комбинации двух гауссовских функций принадлежности:
если c1<c2, то ;
если c1>c2, то .
Если c1<c2, то параметры функции принадлежности геометрически интерпретируются следующим образом:
с1 (с2) – минимальное (максимальное) значение ядра нечеткого множества;
a1 (a2) – коэффициент концентрации левой (правой) части функции принадлежности.
Когда c1>c2, нечеткое множество получается субнормальным.
Функция gauss2mf применяется для задания гладних ассиметричных функций принадлежности. Функция gauss2mfимеет два входных аргумента:
- x – вектор, для координат которого необходимо рассчитать степени принадлежности;
- params – вектор параметров функции принадлежности. Порядок задания параметров – [a1 c1 a2 c2].
Функция gauss2mfвозвращает выходной аргумент y, содержащий степени принадлежности координат вектора x.
Пример:
x = 0: 0.1: 10;
y1 = gauss2mf (x, [2 1 1 3] );
y2 = gauss2mf (x, [2 4 1 5] );
y3 = gauss2mf (x, [2 6 1 6] );
plot (x, [y1; y2; y3])
title ('gauss2mf, a1=2, a2=1')
ylim([0 1.05])
legend(‘c1=1, c2=3’, ‘c1=4, c2=5’, ‘c1=6, c2=6’)
===================================================================
Построение графиков двухсторонних гауссовских функций принадлежности с различными параметрами на интервале [0, 10].
В оглавление \ К следующему разделу \ К предыдущему разделу
| Гауссовская функция принадлежности |
Синтаксис:
y = gaussmf (x, params)
Описание:
Функция gaussmf задает функцию принадлежности в виде симметричной гауссовской кривой. Эта функция задается формулой , параметры которой геометрически интерпретируются следующим образом:
b – координата максимума функции принадлежности;
c – коэффициент концентрации функции принадлежности.
Функция gaussmf применяется для задания гладних симетричных функций принадлежности. Функция gaussmfимеет два входных аргумента:
- x – вектор, для координат которого необходимо рассчитать степени принадлежности;
- params – вектор параметров функции принадлежности. Порядок задания параметров – [c b].
Функция gaussmfвозвращает выходной аргумент y, содержащий степени принадлежности координат вектора x.
Пример:
x = 0: 0.1: 10;
y1 = gaussmf(x, [0.5 5]);
y2 = gaussmf(x, [1 5]);
y3 = gaussmf(x, [2 5]);
y4 = gaussmf(x, [3 5]);
plot (x, [y1; y2; y3; y4])
title (' gaussmf, b=5, c=0.5…3')
legend(‘c=0.5’, ‘c=1’, ‘c=2’, ‘c=3’)
===================================================================
Построение графиков симметричных гауссовских функций принадлежности с различными коэффициентами концентрации.
В оглавление \ К следующему разделу \ К предыдущему разделу
| Обобщенная колокообразная функция принадлежности |
Синтаксис:
y = gbellmf (x, params)
Описание:
Функция gbellmf задает функцию принадлежности в виде симметричной кривой в форме колокола. Эта функция задается формулой , параметры которой геометрически интерпретируются следующим образом:
a - коэффициент концентрации функции принадлежности;
b – коэффициент крутизны функции принадлежности;
c – координата максимума функции принадлежности.
Функция gbellmf применяется для задания гладних симетричных функций принадлежности. Функция gbellmfимеет два входных аргумента:
- x – вектор, для координат которого необходимо рассчитать степени принадлежности;
- params – вектор параметров функции принадлежности. Порядок задания параметров – [a b c].
Функция gbellmfвозвращает выходной аргумент y, содержащий степени принадлежности координат вектора x.
Пример:
x = 0: 0.1: 10;
y1 = gbellmf (x, [3 1 5]);
y2 = gbellmf (x, [3 2 5]);
y3 = gbellmf (x, [3 3 5]);
plot (x, [y1; y2; y3])
title (' gbellmf, a=3, b=1,…,3, c=5')
legend(‘b=1’, ‘b=2’, ‘b=3’)
===================================================================
Построение графиков колокообразных функций принадлежности с различными коэффициентами крутизны.
В оглавление \ К следующему разделу \ К предыдущему разделу
| Генерирование исходной системы нечеткого логического вывода типа Сугэно из данных без использования кластеризации |
Синтаксис:
fis = genfis1(data, numMFs, inmftype, outmftype)
Описание:
Функция genfis1генерирует из данных систему нечеткого логического вывода типа Сугэно. Функции принадлежностей входных переменных выбираются таким образом, чтобы термы равномерно распределялись внутри диапазона изменения данных. Количество правил базы знаний определяется как произведение мощностей терм-множеств входных переменных, другими словами, функция genfis1генерирует все возможные правила. Коэффициенты линейного полинома, который связывает входные и выходную переменные в области действия правила, назначаются равными нулю. Это означает, что при любых значениях входных переменных на выходе системы будет нулевое значение. Полученная система нечеткого логического вывода не отражает представленные данными закономерности между входами и выходом. Она является исходной системой для обучения посредством технологии ANFIS, в результате которого закономерности, заложенные в данных, будут идентифицированы.
Функция genfis1может имеет до четырех входных аргументов:
- data – матрица исходных данных, каждая строчка которой является парой “входы – выход”;
- numMFs – необязательный аргумент, задающий количество термов для оценки входных переменных. Если количество термов одинаковое для всех переменных, тогда достаточно задать скалярное значение этого аргумента. Значение по умолчанию – 2;
- inmftype – необязательный аргумент, задающий типы функций принадлежности термов входных переменных. Значение этого аргумента в виде одной строки символов указывает на то, что все функции принадлежности одного типа. Массив стрингов задает тип функций принадлежностей для каждой входной переменной. По умолчанию используется обобщенная колокообразная функция принадлежности;
- outmftype – необязательный аргумент, задающий тип функций принадлежности термов выходных переменных (точнее тип зависимости, связывающей входные и выходную переменные в области действия правила). Допустимые значения: ‘linear’ – линейная и 'constant' – константа. По умолчанию используется линейная зависимость.
Функция genfis1возвращает выходной аргумент fis, содержащий систему нечеткого логического вывода типа Сугэно.
Пример:
data = [rand(10,1) 10*rand(10,1)-5 rand(10,1)];
fis = genfis1(data,[3 7],char('pimf','trimf'))
===================================================================
Генерирование системы нечеткого логического вывода из данных data. Система использует три терма с пи-подобными функция принадлежности для оценки первой входной переменной и семь термов с треугольными функциями принадлежности для оценки второй входной переменной.
В оглавление \ К следующему разделу \ К предыдущему разделу
| Генерирование системы нечеткого логического вывода типа Сугэно из данны с использованием субтрактивной кластеризации |
Синтаксис:
fis = genfis2(Xin, Xout, radii, xBounds, options)
Описание:
Функция genfis2генерирует систему нечеткого логического вывода типа Сугэно из данны с использованием субтрактивной кластеризации. При использовании данных только с одной выходной переменной, результат выполнения функции genfis2может рассматриваться как исходная система для обучения посредством технологии ANFIS.
Экстракция правил из данных в функции genfis2происходит в два этапа. Вначале используется функция subclustдля определения количества правил и мощностей терм-множеств выходных переменных. Затем с помощью метода наименьших квадратов определяется "то-"часть каждого правила. В результате этого получается система нечеткого логического вывода с базой правил, покрывающих все предметную область.
Функция genfis2 может иметь до пяти входных аргументов, первые три из которых обязательны: