Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Описание. Алгоритм. Применение




ЛДА

Описание

Суть метода в нахождении дискримнантных функций (ДФ) вида:

Затем анализируемые данные подставляют в ДФ и получают результат , называемый проекцией точки на ДФ, при этом классы в новом k-мерном пространстве имеют максимально возможное разделение. Размерность k равна числу ДФ и в общем случае равна числу классов минус один (G-1).

Данный метод является методом с учителем, что означает необходимость заранее предоставить репрезентативную выборку для всех анализируемых классов. В данном случае программа составляется для случая, когда в каждом классе одинаковое число точек. В противном случае необходима корректировка расчёта средних значений.

 

Алгоритм

В программе будут использоваться следующие переменные, которые, например, могут иметь следующие значения:

G = 2; % число классов

P = 38; % число признаков (сенсоров)

N = 50; % число примеров классе, для упрощения одинаково для всех классов

% Xj - массив размером N на P с точками j-го класса, j=1: 5

 

1. Исходные данные необходимо автошкалировать.

см. выше, уже было

2. Находятся средние значения

- внутригрупповые для каждого класса (по каждому признаку)

for i=1: P

Xsr(1, i) = mean(X1(:, i));    % среднее 1 класса

Xsr(2, i) = mean(X2(:, i));    % среднее 2 класса

end

 

- межгрупповое среднее (для определения первого центроида)

Xsr_mgr = mean(Xsr);    % межгрупповое среднее всех классов

 

3. Находятся матрицы отклонений

- межгруппового отклонения, матрица H

H = zeros(P); % объявление заранее, здесь нужно

for j = 1: 1

H = H(:,: ) + (Xsr(j,: ) - Xsr_mgr(1,: ))'*(Xsr(j,: ) - Xsr_mgr(1,: ));

end

 

- внутригрупповых отклонений - ковариации между всеми признаками по каждому классу

C1 = zeros(P); % объявление заранее

for i=1: P    % первый цикл по числу признаков

for j=1: P % второй цикл по числу признаков

   for k=1: N % цикл по числу примеров в классе

       sum_bufer = (X1(k, i)-Xsr(1, i))*(X1(k, j)-Xsr(1, j));

       C1(i, j) = C1(i, j) + sum_bufer;

   end

end

end

C1 = С1 / N;

Такие же вычисления проделать для всех классов.

 

4. Находится матрица M из матриц ковариаций, по формуле:

M = zeros(G); % Объявление заранее

M = M + N*C1;

M = M + N*C2;

M = M + N*C3;

 

5. Находятся собственные вектора исходя из формулы:

где M - вышеприведённая какая-то матрица, H - межгрупповое отклонение, - собственное значения, w - собственный вектор.

M1 = M\H;

    % \ - деление матрицы справа налево; почему-то

             % по-другому не поделилось

[w lambda] = eigs(M1); % вычисление главных значений

Здесь применена стандартная функция eigs(), которая возвращает матрицу собств. векторов (w) и диагональную матрицу собств. значений (lambda). Каюсь, ручное вычисление собственных векторов я ниасилил =(

Собств. вектора w, соответствующие собств. значениям , и порождают дискриминантные функции. Но перед использованием коэффициенты векторов нужно стандартизировать (в некоторых книгах не стандартизируют, но тогда эти результаты не будут сходиться с результатами других программ)

6. Стандартизация дискриминантных коэффициентов:

где n - общее число примеров по всем классам, g - число классов;

b0 = zeros(P, 1);

for i=1: K % Перебор по числу ДФ

for j=1: P % Перебор по числу классов

   b(i, j) = w(i, j)*(K^0. 5);

   b0(i) = b0(i) + b(i, j)*Xsr_mgr(j);

end

end

В итоге получится матрица b, и b0, где каждая строка - коэффициенты соответствующей ДФ.

Тогда, например, для j-го примера класса k размерностью в p признаков результат первой ДФ будет равен:

 

Применение

Пусть имеется 3 класса по 3 признака, и по 2 примера в каждом классе. График по первым двум признакам:

Здесь видно, что класс 1 (красный) пересекается с классом 2 (синий) по оси Y, и класс 2 пересекается с классом 3 по оси Х.

После вычисления ДФ имеет матрицу b0 2x1 и b размерностью 2х3. Здесь первая строка обоих матриц - одна ДФ, 1 столбец матрицы b - , второй - и т. д.

Для получения данных в новом пространстве ДФ необходимо умножить исходные матрицы таким образом, чтобы в каждом примере значение данных каждого признака было умножено на соответствующий признаку коэффициент ДФ; производится суммирование всех произведений для каждого примера, затем суммируется с соответствующим ДФ коэффициентом .

Например, пусть df1 - результирующая матрица для первого класса, где первый столбец соответствует первой ДФ, второй столбец - второй ДФ, а каждая строка - примеры данных. Тогда вычисление результирующих матриц для каждого класса будет иметь вид:

df1(:, 1) = b0(1) + X1s(:, 1). *b(1, 1) + X1s(:, 2). *b(1, 2) + X1s(:, 3). *b(1, 3);

df2(:, 1) = b0(1) + X2s(:, 1). *b(1, 1) + X2s(:, 2). *b(1, 2) + X2s(:, 3). *b(1, 3);

df3(:, 1) = b0(1) + X3s(:, 1). *b(1, 1) + X3s(:, 2). *b(1, 2) + X3s(:, 3). *b(1, 3);

 

df1(:, 2) = b0(2) + X1s(:, 1). *b(2, 1) + X1s(:, 2). *b(2, 2) + X1s(:, 3). *b(2, 3);

df2(:, 2) = b0(2) + X2s(:, 1). *b(2, 1) + X2s(:, 2). *b(2, 2) + X2s(:, 3). *b(2, 3);

df3(:, 2) = b0(2) + X3s(:, 1). *b(2, 1) + X3s(:, 2). *b(2, 2) + X3s(:, 3). *b(2, 3);

 

График имеет следующий вид (здесь df1 - красным, df2 - зелёным, df3 - синим)

Таким образом, видим более отчётливое разделение на классы. Помимо этого сокращается размерность (в этом случае с трёх до двух).

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...