Определение объяснённой и необъяснённой дисперсий

 

Объяснённой дисперсией называют процент общей дисперсии, который покрывается найденными главными компонентами, называют TRV. Необъяснённая - дисперсия остатков, называют ERV. Исходная матрица данных является 100% необъяснённой.

Один из вариантов вычисления дисперсий - по матрице остатков E. Матрица остатков - это исходная матрица Х за вычетом данных, объясняемых найденными на этом этапе главных компонент (шаг 8).

При нахождении объяснённой дисперсии сначала вычисляют дисперсию каждого примера:

, где j - число признаков. Здесь дисперсия имеет более короткий вид потому что данные центрированы и среднее равно нулю.

Вычисляют коэффициент v0, общий для всех признаков:

Объ.дисперсия k-той главной компоненты равна:

Необъяснённая дисперсия равна:

где TRV(0) - численное значение объяснённой дисперсии исходных данных, принимаемое за условные 100%.

 

Вычисление vi:

[r c] = size(X);

v = zeros(r,1);

for i = 1: r

for j = 1: c

   v(i) = v(i) + X(i,j)^2;

end

end

 

Вычисление v0:

v0 = sum(v)./r;

Вычисление объяснённой дисперсии

TRV(k) = v0/c;

Необъяснённая дисперсия

ERV(k) = 1 - TRV(k)/TRV0

Здесь TRV0 вычислена таким же образом, для исходных данных.

 

ЛДА

Описание

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

Затем анализируемые данные подставляют в ДФ и получают результат , называемый проекцией точки на ДФ, при этом классы в новом 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 - синим)

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: