Матрица |
f2 |
|
|
|
|
3.174 |
0.17 |
0.63; |
3.662 |
0.24 |
0.83; |
2.686 |
0.19 |
0.71; |
3.662 |
0.22 |
0.85; |
3.174 |
0.10 |
0.42; |
3.906 |
0.22 |
0.81; |
2.686 |
0.19 |
0.73; |
3.906 |
0.22 |
0.85; |
2.686 |
0.21 |
0.77; |
3.906 |
0.24 |
0.88; |
2.441 |
0.22 |
0.87; |
3.906 |
0.24 |
0.84; |
2.930 |
0.23 |
0.83; |
3.906 |
0.22 |
0.86; |
2.930 |
0.23 |
0.85; |
3.906 |
0.23 |
0.85; |
3.418 |
0.22 |
0.84; |
3.906 |
0.23 |
0.81; |
3.174 |
0.20 |
0.84; |
4.150 |
0.22 |
0.87; |
3.418 |
0.22 |
0.80; |
3.906 |
0.11 |
0.61 |
Содержание отчета
1.Название, цель и задачи работы.
2.Тексты программ и изображения графических окон, которые требовалось сохранять в ходе выполнения работы.
3.Объяснение полученных результатов и выводы.
5.МЕТОД ЛИНЕЙНОЙ ДИСКРИМИНАНТНОЙ ФУНКЦИИ ФИШЕРА (ПРИВЕДЕНИЕ ДАННЫХ К ОДНОМЕРНОМУ ВИДУ)
Цели работы: знакомство с методом линейной дискриминантной функции Фишера (приведение данных к одномерному виду) в случае двух классов; получение навыков работы с этим методом в системе MATLAB.
Основные положения
Для двух классовой задачи линейная дискриминантная функция (ЛДФ) или разделяющая гиперплоскость, которая определяет алгоритм распознавания, имеет вид:
D(x) = WтX − a = 0 или WтX = a ,
где W – весовой вектор единичной длины; a – скалярная пороговая величина. Алгоритм распознавания в этом случае имеет вид:
если WтX < a , то ω1 (1-й класс),
если WтX ³ a , то ω2 (2-й класс).
Чтобы определить ЛДФ, надо найти W и a. Один из возможных путей решения этой задачи заключается в выполнении следующего алгоритма.
1. Найти W как наилучшее положение этого вектора в n-мерном пространстве, для которого проекции точек классов на направление W разделены наилучшим образом.
21
2. Спроектировать точки обоих классов на прямую, определяемую поло-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
жением W (рис. 5.1). |
|
|
||
x2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3. Решить одномерную задачу по |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
поиску наилучшей величины а, например |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ω |
|
||||||
|
|
|
|
|
ω1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
по критерию минимума ошибок класси- |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
фикации. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x(1) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Решение 1-го шага определяется вы- |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
m1 − m2 |
|
|
|
m |
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
1 |
|
y1(1) |
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
ражением |
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
W |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
W = S−1(M − M |
|
) , |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x |
1 |
|
|
2 |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
W 1 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 5.1 |
|
|
|
|
|
|
|
|
|
где M1 и M2 |
– векторы средних значений |
||||||||||
матрица разброса для двух классов; |
двух классов; |
SW = S1 + S2 |
– усредненная |
|||||||||||||||||||||||||||||||||
|
|
|
|
|||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
n j |
(Xi( j) − M j )(Xi( j) − M j )т |
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
S j = ∑ |
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=1 |
|
|
|
|
|
|
|
|
||
– матрица разброса для j-го класса (аналог корреляционной матрицы). Определенный таким образом весовой вектор дает максимум критерия Фишера
J (W) = (m1 − m2)2 ,
s12 + s22
где s12 и s22 – выборочный разброс классов, т. е. максимальное отношение разброса между классами к «среднему» разбросу внутри классов. Для W, найденного по данному критерию, классы, спроектированные на направление W, максимально удалены друг от друга.
В практических расчетах вместо матрицы SW можно использовать усредненную ковариационную матрицу Σ = Σ1 + Σ2 .
Анализ данных с помощью ЛДФ Фишера в системе MATLAB
Пример 5.1
Пусть даны 2 массива данных (f1 и f2 из работы 4).
По этим данным надо найти оптимальный весовой вектор по критерию максимума расстояния Фишера (найти ЛДФ Фишера), спроектировать классы на этот весовой вектор, построить гистограммы для обоих классов и эмпирически найти оптимальный порог по критерию минимума ошибок классификации. Эту задачу можно решить с помощью следующей программы.
load ('f1.txt') % загрузка матрицы 1-го класса load ('f2.txt') % загрузка матрицы 2-го класса
A1=f1
22
A2=f2 |
|
|
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
n1=length(A1) % число членов |
10 |
|
|
|
|
|
|
||
% 1-го класса |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
||
n2=length(A2) % число членов |
8 |
|
|
|
|
|
|
||
% 2-го класса |
|
|
|
|
|
|
|
|
|
m1= mean(A1) |
|
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
m2= mean(A2) |
|
4 |
|
|
|
|
|
|
|
E1=n1*cov(A1) |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
||
E2=n2*cov(A2) |
|
2 |
|
|
|
|
|
|
|
E=E1+E2 |
|
|
|
|
|
|
|
|
|
W=inv(E)*(m1-m2)' |
0 |
2 |
3 |
4 |
5 |
6 |
7 |
||
w=W/norm(W) |
% нормализация |
1 |
|||||||
|
|
|
Рис. 5.2 |
|
|
|
|||
% весового вектора |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|||
X1=A1*w |
% множество проекций |
|
|
|
|
|
|
|
|
%векторов 1-го класса на w |
|
|
|
|
|
|
|
||
X2=A2*w |
% множество проекций векторов 2-го класса на w |
|
|
||||||
t=-0.3:0.05:0 |
|
|
|
|
|
|
|
|
|
x1=hist(X1,t) |
|
|
|
|
|
|
|
|
|
x2=hist(X2,t) |
|
|
|
|
|
|
|
|
|
plot(x1) |
|
|
|
|
|
|
|
|
|
hold on |
|
|
|
|
|
|
|
|
|
plot(x2)% минимальное число ошибок равно 3=1+2 |
|
|
|
||||||
Результат расчетов представлен на рис. 5.2.
Задание
1.Провести анализ данных по ирисам Фишера с использованием ЛДФ Фишера.
2.Используя все 4 признака, найти оптимальный весовой вектор при рассмотрении только двух классов: setosa и virginica.
3.Сформулировать алгоритм классификации и оценить получаемые ошибки.
Порядок выполнения работы
1.С использованием всех признаков найти оптимальный весовой вектор по критерию максимума расстояния Фишера.
2.Спроектировать классы на этот весовой вектор, построить гистограммы и эмпирически найти оптимальный порог по критерию минимума ошибок классификации.
3.Сформулировать полученный алгоритм классификации. Привести полученные ошибки.
23
Содержание отчета
1.Название, цель и задачи работы.
2.Тексты программ и изображения графических окон, которые требовалось сохранять в ходе выполнения работы.
3.Объяснение полученных результатов и выводы.
6. АВТОМАТИЧЕСКАЯ КЛАССИФИКАЦИЯ
Цели работы: исследование методов автоматической классификации, основанных на теории статистических решений; получение навыков работы с линейными и квадратичными решающими правилами в системе MATLAB.
Основные положения
Для целей распознавания классов (классификации) в n-мерном пространстве каждому классу сопоставляется своя дискриминантная функция, которая может быть линейной или нелинейной, например, квадратичной. Линейная дискриминантная функция ЛДФ имеет вид
n
D (X) = WтX + a = ∑ wk xk + wn+1, k =1
где X – входной вектор; W – весовой вектор; a – пороговая величина. Для области объектов данного класса его дискриминантная функция наибольшая. Поверхность, разделяющая две смежные области, определяется равенством двух соответствующих ЛДФ, т. е.
n
Di(X) − D j (X) = ∑ wk xk + wn+1 = 0, k =1
где wk = wik − w jk , wn+1 = wi(n+1) − w j(n+1) .
Полученное уравнение – это уравнение гиперплоскости в n-мерном признаковом пространстве. Рассмотрим методы определения коэффициентов уравнений, основанные на теории статистических решений. Предполагается, что классы взяты из генеральной совокупности, распределенной по нормальному закону, поэтому определяющими параметрами для классов являются векторы средних значений и ковариационные матрицы. В простейшем случае ковариационные матрицы считаются равными. Оценку такой матрицы можно получить, усредняя все ковариационные матрицы классов.
Реализация автоматической классификации в системе MATLAB
Автоматическая классификация в системе МАТЛАБ осуществляется с помощью функции classify в виде
24
class = classify(sample,training,group) class = classify(sample,training,group,type)
class = classify(sample,training,group) классифицирует каждую
строку данных в выборочной матрице sample на одну из групп, представленных в обучающей матрице training. sample и training должны быть матрицами с одинаковым числом столбцов. group это группирующая переменная для матрицы training. Ее однозначно определяемые значения определяют группы, каждый элемент определяет ту группу, к которой принадлежит соответствующая строка матрицы training. group может быть категориальной переменной (переменной, определенной на шкале наименований), числовым вектором, строковым массивом или строковой матрицей. Матрицы training и group должны иметь одинаковое число строк. Выход class указывает группу, к которой приписывается каждая строка матрицы sample и имеет тот же тип, что и group.
class = classify(sample,training,group,type) позволяет опреде-
лить желаемый вид дискриминантной функции. type может быть одним из следующих:
'linear' – Подгоняет многомерную нормальную плотность к каждой группе с оценкой объединенной ковариационной матрицы. Этот тип используется по умолчанию.
'quadratic' – Подгоняет многомерные нормальные плотности с оценками ковариаций отдельно по каждой группе.
Пример 6.1 (рис. 6.1)
% Используем массив a из примера 1.1.
Проведем линейную классификацию для 3 классов по первому призна-
ку матрицы a.
linclass = classify(a(:,1),a(:,1),g) bad = ~strcmp(linclass,g)
numobs = size(a,1) sum(bad) / numobs
ans =
0.3600
Проведем линейную классификацию для классов A, B, C по 1-му и 2-му признакам:
linclass = classify(a(:,1:2),a(:,1:2),g) % линейная
%классификация
bad = ~strcmp(linclass,g) % формирование вектора ошибок
25