exponenta event banner

pca

Анализ основных компонентов необработанных данных

Описание

пример

coeff = pca(X) возвращает коэффициенты главной компоненты, также известные как нагрузки, для матрицы данных n-by-p X. Ряды X соответствуют наблюдениям, а столбцы - переменным. Матрица коэффициентов представляет собой p-by-p. Каждый столбец coeff содержит коэффициенты для одного главного компонента, и столбцы находятся в порядке убывания дисперсии компонента. По умолчанию pca центрирует данные и использует алгоритм разложения сингулярных значений (SVD).

пример

coeff = pca(X,Name,Value) возвращает любой из выходных аргументов в предыдущих синтаксисах с использованием дополнительных опций для вычисления и обработки специальных типов данных, заданных одним или несколькими Name,Value аргументы пары.

Например, можно указать количество главных компонентов pca возвращает или алгоритм, отличный от SVD для использования.

пример

[coeff,score,latent] = pca(___) также возвращает баллы основного компонента в score и отклонения основного компонента в latent. Можно использовать любой из входных аргументов в предыдущих синтаксисах.

Баллы основного компонента являются представлениями X в пространстве главного компонента. Ряды score соответствуют наблюдениям, а столбцы - компонентам.

Отклонения главных компонентов являются собственными значениями ковариационной матрицы X.

пример

[coeff,score,latent,tsquared] = pca(___) также возвращает T-квадратичную статистику Hotelling для каждого наблюдения в X.

пример

[coeff,score,latent,tsquared,explained,mu] = pca(___) также возвращает explained, процент от общей разницы, объясняемой каждым основным компонентом и mu, оценочное среднее каждой переменной в X.

Примеры

свернуть все

Загрузите набор данных образца.

load hald

Данные ингредиентов имеют 13 наблюдений для 4 переменных.

Найдите основные компоненты для данных ингредиентов.

 coeff = pca(ingredients)
coeff = 4×4

   -0.0678   -0.6460    0.5673    0.5062
   -0.6785   -0.0200   -0.5440    0.4933
    0.0290    0.7553    0.4036    0.5156
    0.7309   -0.1085   -0.4684    0.4844

Строки coeff содержат коэффициенты для четырех переменных ингредиентов, а его столбцы соответствуют четырем основным компонентам.

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

Загрузите набор данных образца.

load imports-85

Матрица данных X имеет 13 непрерывных переменных в столбцах от 3 до 15: колесная база, длина, ширина, высота, бордюрный вес, размер двигателя, диаметр, ход, степень сжатия, лошадиная сила, пик-об/мин, город-мпг и шоссе-мпг. У переменных канала и хода отсутствуют четыре значения в рядах 56-59, а у переменных лошадиная сила и пиковая скорость вращения отсутствуют два значения в рядах 131 и 132.

Выполните анализ основного компонента.

coeff = pca(X(:,3:15));

По умолчанию pca выполняет действие, указанное 'Rows','complete' аргумент пары имя-значение. Эта опция удаляет наблюдения с помощью NaN значения перед расчетом. Ряды NaNs повторно вставляются в score и tsquared в соответствующих местах, а именно в рядах 56-59, 131 и 132.

Использовать 'pairwise' для выполнения анализа главного компонента.

coeff = pca(X(:,3:15),'Rows','pairwise');

В этом случае pca вычисляет (i, j) элемент ковариационной матрицы, используя строки без NaN значения в столбцах i или j X. Обратите внимание, что результирующая ковариационная матрица может не быть положительной определенной. Эта опция применяется, когда алгоритм pca использует разложение собственных значений. Если алгоритм не указан, как в этом примере, pca устанавливает для него значение 'eig'. Если требуется 'svd' в качестве алгоритма, с 'pairwise' вариант, затем pca возвращает предупреждающее сообщение, устанавливает алгоритм на 'eig' и продолжается.

Если вы используете 'Rows','all' аргумент пары имя-значение, pca завершается, поскольку этот параметр предполагает отсутствие отсутствующих значений в наборе данных.

coeff = pca(X(:,3:15),'Rows','all');
Error using pca (line 180)
Raw data contains NaN missing value while 'Rows' option is set to 'all'. Consider using 'complete' or pairwise' option instead.

Используйте отклонения обратной переменной в качестве весов при выполнении анализа основных компонентов.

Загрузите набор данных образца.

load hald

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

 [wcoeff,~,latent,~,explained] = pca(ingredients,...
'VariableWeights','variance')
wcoeff = 4×4

   -2.7998    2.9940   -3.9736    1.4180
   -8.7743   -6.4411    4.8927    9.9863
    2.5240   -3.8749   -4.0845    1.7196
    9.1714    7.5529    3.2710   11.3273

latent = 4×1

    2.2357
    1.5761
    0.1866
    0.0016

explained = 4×1

   55.8926
   39.4017
    4.6652
    0.0406

Обратите внимание, что матрица коэффициентов, wcoeff, не является ортонормированным.

Вычислите матрицу ортонормированных коэффициентов.

coefforth = inv(diag(std(ingredients)))* wcoeff
coefforth = 4×4

   -0.4760    0.5090   -0.6755    0.2411
   -0.5639   -0.4139    0.3144    0.6418
    0.3941   -0.6050   -0.6377    0.2685
    0.5479    0.4512    0.1954    0.6767

Проверьте ортонормативность новой матрицы коэффициентов, coefforth.

 coefforth*coefforth'
ans = 4×4

    1.0000    0.0000   -0.0000    0.0000
    0.0000    1.0000   -0.0000   -0.0000
   -0.0000   -0.0000    1.0000    0.0000
    0.0000   -0.0000    0.0000    1.0000

Если в данных отсутствуют значения, найдите основные компоненты с помощью алгоритма наименьших квадратов (ALS).

Загрузите образцы данных.

load hald

Данные ингредиентов имеют 13 наблюдений для 4 переменных.

Выполните анализ основных компонентов с использованием алгоритма ALS и просмотрите коэффициенты компонентов.

[coeff,score,latent,tsquared,explained] = pca(ingredients);
coeff
coeff = 4×4

   -0.0678   -0.6460    0.5673    0.5062
   -0.6785   -0.0200   -0.5440    0.4933
    0.0290    0.7553    0.4036    0.5156
    0.7309   -0.1085   -0.4684    0.4844

Ввести отсутствующие значения случайным образом.

y = ingredients;
rng('default'); % for reproducibility
ix = random('unif',0,1,size(y))<0.30; 
y(ix) = NaN
y = 13×4

     7    26     6   NaN
     1    29    15    52
   NaN   NaN     8    20
    11    31   NaN    47
     7    52     6    33
   NaN    55   NaN   NaN
   NaN    71   NaN     6
     1    31   NaN    44
     2   NaN   NaN    22
    21    47     4    26
      ⋮

Приблизительно 30% данных имеют пропущенные значения, указанные NaN.

Выполните анализ основных компонентов с использованием алгоритма ALS и просмотрите коэффициенты компонентов.

[coeff1,score1,latent,tsquared,explained,mu1] = pca(y,...
'algorithm','als');
coeff1
coeff1 = 4×4

   -0.0362    0.8215   -0.5252    0.2190
   -0.6831   -0.0998    0.1828    0.6999
    0.0169    0.5575    0.8215   -0.1185
    0.7292   -0.0657    0.1261    0.6694

Отображение расчетного среднего значения.

mu1
mu1 = 1×4

    8.9956   47.9088    9.0451   28.5515

Реконструируйте наблюдаемые данные.

t = score1*coeff1' + repmat(mu1,13,1)
t = 13×4

    7.0000   26.0000    6.0000   51.5250
    1.0000   29.0000   15.0000   52.0000
   10.7819   53.0230    8.0000   20.0000
   11.0000   31.0000   13.5500   47.0000
    7.0000   52.0000    6.0000   33.0000
   10.4818   55.0000    7.8328   17.9362
    3.0982   71.0000   11.9491    6.0000
    1.0000   31.0000   -0.5161   44.0000
    2.0000   53.7914    5.7710   22.0000
   21.0000   47.0000    4.0000   26.0000
      ⋮

Алгоритм ALS оценивает недостающие значения в данных.

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

subspace(coeff,coeff1)
ans = 9.1336e-16

Это небольшое значение. Это означает, что результаты при использовании pca с 'Rows','complete' аргумент пары «имя-значение» при отсутствии отсутствующих данных и при использовании pca с 'algorithm','als' аргумент пары имя-значение, если отсутствуют данные, близки друг к другу.

Выполнить анализ основного компонента с помощью 'Rows','complete' аргумент пары имя-значение и отображение коэффициентов компонента.

[coeff2,score2,latent,tsquared,explained,mu2] = pca(y,...
'Rows','complete');
coeff2
coeff2 = 4×3

   -0.2054    0.8587    0.0492
   -0.6694   -0.3720    0.5510
    0.1474   -0.3513   -0.5187
    0.6986   -0.0298    0.6518

В этом случае pca удаляет строки с отсутствующими значениями и y имеет только четыре строки без отсутствующих значений. pca возвращает только три главных компонента. Вы не можете использовать 'Rows','pairwise' опция, поскольку ковариационная матрица не является положительной полуопределенной и pca возвращает сообщение об ошибке.

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

subspace(coeff(:,1:3),coeff2)
ans = 0.3576

Угол между двумя промежутками существенно больше. Это указывает на то, что эти два результата различны.

Отображение расчетного среднего значения.

mu2
mu2 = 1×4

    7.8889   46.9091    9.8750   29.6000

В этом случае среднее является только выборочным средним y.

Реконструируйте наблюдаемые данные.

score2*coeff2'
ans = 13×4

       NaN       NaN       NaN       NaN
   -7.5162  -18.3545    4.0968   22.0056
       NaN       NaN       NaN       NaN
       NaN       NaN       NaN       NaN
   -0.5644    5.3213   -3.3432    3.6040
       NaN       NaN       NaN       NaN
       NaN       NaN       NaN       NaN
       NaN       NaN       NaN       NaN
       NaN       NaN       NaN       NaN
   12.8315   -0.1076   -6.3333   -3.7758
      ⋮

Это показывает, что удаление строк, содержащих NaN значения работают не так хорошо, как алгоритм ALS. Использование ALS лучше, если в данных слишком много отсутствующих значений.

Найдите коэффициенты, оценки и отклонения главных компонентов.

Загрузите набор данных образца.

load hald

Данные ингредиентов имеют 13 наблюдений для 4 переменных.

Найдите коэффициенты основного компонента, оценки и отклонения компонентов для данных ингредиентов.

[coeff,score,latent] = pca(ingredients)
coeff = 4×4

   -0.0678   -0.6460    0.5673    0.5062
   -0.6785   -0.0200   -0.5440    0.4933
    0.0290    0.7553    0.4036    0.5156
    0.7309   -0.1085   -0.4684    0.4844

score = 13×4

   36.8218   -6.8709   -4.5909    0.3967
   29.6073    4.6109   -2.2476   -0.3958
  -12.9818   -4.2049    0.9022   -1.1261
   23.7147   -6.6341    1.8547   -0.3786
   -0.5532   -4.4617   -6.0874    0.1424
  -10.8125   -3.6466    0.9130   -0.1350
  -32.5882    8.9798   -1.6063    0.0818
   22.6064   10.7259    3.2365    0.3243
   -9.2626    8.9854   -0.0169   -0.5437
   -3.2840  -14.1573    7.0465    0.3405
      ⋮

latent = 4×1

  517.7969
   67.4964
   12.4054
    0.2372

Каждый столбец score соответствует одному основному компоненту. Вектор, latentхранит отклонения четырех основных компонентов.

Реконструируйте данные по центрированным ингредиентам.

Xcentered = score*coeff'
Xcentered = 13×4

   -0.4615  -22.1538   -5.7692   30.0000
   -6.4615  -19.1538    3.2308   22.0000
    3.5385    7.8462   -3.7692  -10.0000
    3.5385  -17.1538   -3.7692   17.0000
   -0.4615    3.8462   -5.7692    3.0000
    3.5385    6.8462   -2.7692   -8.0000
   -4.4615   22.8462    5.2308  -24.0000
   -6.4615  -17.1538   10.2308   14.0000
   -5.4615    5.8462    6.2308   -8.0000
   13.5385   -1.1538   -7.7692   -4.0000
      ⋮

Новые данные в Xcentered - исходные данные ингредиентов, центрированные путем вычитания средства столбца из соответствующих столбцов.

Визуализируйте как ортонормированные коэффициенты главной компоненты для каждой переменной, так и оценки главной компоненты для каждого наблюдения на одном графике.

biplot(coeff(:,1:2),'scores',score(:,1:2),'varlabels',{'v_1','v_2','v_3','v_4'});

Figure contains an axes. The axes contains 26 objects of type line, text.

Все четыре переменные представлены в этом биплоте вектором, и направление и длина вектора указывают, как каждая переменная вносит вклад в два главных компонента на графике. Например, первый главный компонент, который находится на горизонтальной оси, имеет положительные коэффициенты для третьей и четвертой переменных. Поэтому векторы v3 и v4 направлены в правую половину графика. Наибольший коэффициент в первом главном компоненте является четвертым, соответствующим переменной v4.

Второй главный компонент, находящийся на вертикальной оси, имеет отрицательные коэффициенты для переменных v1, v2 и v4 и положительный коэффициент для переменной v3.

Этот 2-D биплот также включает точку для каждого из 13 наблюдений с координатами, указывающими оценку каждого наблюдения для двух главных компонентов на графике. Например, точки вблизи левого края графика имеют самые низкие оценки для первого главного компонента. Точки масштабируются относительно максимального значения оценки и максимальной длины коэффициента, так что из графика можно определить только их относительные местоположения.

Найдите статистические значения T-квадрата Hotelling.

Загрузите набор данных образца.

load hald

Данные ингредиентов имеют 13 наблюдений для 4 переменных.

Выполните анализ главного компонента и запросите значения T-квадрата.

[coeff,score,latent,tsquared] = pca(ingredients);
tsquared
tsquared = 13×1

    5.6803
    3.0758
    6.0002
    2.6198
    3.3681
    0.5668
    3.4818
    3.9794
    2.6086
    7.4818
      ⋮

Запрашивают только первые два главных компонента и вычисляют T-квадратные значения в уменьшенном пространстве запрашиваемых главных компонентов.

[coeff,score,latent,tsquared] = pca(ingredients,'NumComponents',2);
tsquared
tsquared = 13×1

    5.6803
    3.0758
    6.0002
    2.6198
    3.3681
    0.5668
    3.4818
    3.9794
    2.6086
    7.4818
      ⋮

Обратите внимание, что даже при указании уменьшенного пространства компонента pca вычисляет значения T-квадрата в полном пространстве, используя все четыре компонента.

Значение T-квадрата в уменьшенном пространстве соответствует расстоянию Махаланобиса в уменьшенном пространстве.

tsqreduced = mahal(score,score)
tsqreduced = 13×1

    3.3179
    2.0079
    0.5874
    1.7382
    0.2955
    0.4228
    3.2457
    2.6914
    1.3619
    2.9903
      ⋮

Вычислите значения T-квадрата в отброшенном пространстве, взяв разность значений T-квадрата в полном пространстве и расстояние Махаланобиса в уменьшенном пространстве.

tsqdiscarded = tsquared - tsqreduced
tsqdiscarded = 13×1

    2.3624
    1.0679
    5.4128
    0.8816
    3.0726
    0.1440
    0.2362
    1.2880
    1.2467
    4.4915
      ⋮

Найдите процент изменчивости, объясняемый основными компонентами. Отображение представления данных в пространстве главных компонентов.

Загрузите набор данных образца.

load imports-85

Матрица данных X имеет 13 непрерывных переменных в столбцах от 3 до 15: колесная база, длина, ширина, высота, бордюрный вес, размер двигателя, диаметр, ход, степень сжатия, лошадиная сила, пик-об/мин, город-мпг и шоссе-мпг.

Найдите процент изменчивости, объясняемый основными компонентами этих переменных.

[coeff,score,latent,tsquared,explained] = pca(X(:,3:15));

explained
explained = 13×1

   64.3429
   35.4484
    0.1550
    0.0379
    0.0078
    0.0048
    0.0013
    0.0011
    0.0005
    0.0002
      ⋮

Первые три компонента объясняют 99,95% всей изменчивости.

Визуализация представления данных в пространстве первых трех главных компонентов.

scatter3(score(:,1),score(:,2),score(:,3))
axis equal
xlabel('1st Principal Component')
ylabel('2nd Principal Component')
zlabel('3rd Principal Component')

Figure contains an axes. The axes contains an object of type scatter.

Данные показывают наибольшую изменчивость вдоль первой главной оси компонента. Это самая большая возможная дисперсия среди всех возможных вариантов первой оси. Изменчивость вдоль второй главной оси компонента является наибольшей среди всех возможных остальных вариантов второй оси. Третья главная ось компонента имеет третью наибольшую изменчивость, которая значительно меньше, чем изменчивость вдоль второй главной оси компонента. Оси с четвертой по тринадцатую основные компоненты не стоит проверять, потому что они объясняют только 0,05% всей изменчивости данных.

Чтобы пропустить любой из выходов, можно использовать ~ вместо этого в соответствующем элементе. Например, если вы не хотите получать значения T-квадрата, укажите

[coeff,score,latent,~,explained] = pca(X(:,3:15));

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

В этом примере также описывается создание кода C/C + +. Посколькуpca поддерживает генерацию кода, вы можете генерировать код, который выполняет PCA с помощью набора обучающих данных и применяет PCA к набору тестовых данных. Затем выполните развертывание кода на устройстве. В этом потоке операций необходимо передать данные обучения, которые могут иметь значительный размер. Чтобы сохранить память на устройстве, можно разделить обучение и прогнозирование. Использовать pca в MATLAB ® и применить PCA к новым данным в сгенерированном коде на устройстве.

Для создания кода C/C + + требуется Coder™ MATLAB ®.

Применение PCA к новым данным

Загрузка набора данных в таблицу с помощью readtable. Набор данных находится в файле CreditRating_Historical.dat, который содержит исторические данные кредитного рейтинга.

creditrating = readtable('CreditRating_Historical.dat');
creditrating(1:5,:)
ans=5×8 table
     ID      WC_TA    RE_TA    EBIT_TA    MVE_BVTD    S_TA     Industry    Rating 
    _____    _____    _____    _______    ________    _____    ________    _______

    62394    0.013    0.104     0.036      0.447      0.142        3       {'BB' }
    48608    0.232    0.335     0.062      1.969      0.281        8       {'A'  }
    42444    0.311    0.367     0.074      1.935      0.366        1       {'A'  }
    48631    0.194    0.263     0.062      1.017      0.228        4       {'BBB'}
    43768    0.121    0.413     0.057      3.647      0.466       12       {'AAA'}

Первый столбец является идентификатором каждого наблюдения, а последний столбец - рейтингом. Укажите второй-седьмой столбцы в качестве данных предиктора и укажите последний столбец (Rating) в качестве ответа.

X = table2array(creditrating(:,2:7));
Y = creditrating.Rating;

Первые 100 наблюдений используются в качестве тестовых данных, а остальные - в качестве учебных данных.

XTest = X(1:100,:);
XTrain = X(101:end,:);
YTest = Y(1:100);
YTrain = Y(101:end);

Поиск основных компонентов набора данных обучения XTrain.

[coeff,scoreTrain,~,~,explained,mu] = pca(XTrain);

Этот код возвращает четыре выхода: coeff, scoreTrain, explained, и mu. Использовать explained (процент от общей дисперсии объяснен), чтобы найти количество компонентов, необходимых для объяснения, по крайней мере, 95% изменчивости. Использовать coeff (коэффициенты основных компонентов) и mu (расчетные средства XTrain) для применения PCA к набору тестовых данных. Использовать scoreTrain (баллы основного компонента) вместо XTrain при обучении модели.

Просмотрите процент изменчивости, объясняемый основными компонентами.

explained
explained = 6×1

   58.2614
   41.2606
    0.3875
    0.0632
    0.0269
    0.0005

Первые два компонента объясняют более 95% всей изменчивости. Найдите количество компонентов, необходимых для объяснения вариабельности не менее 95%.

idx = find(cumsum(explained)>95,1)
idx = 2

Выполните обучение дерева классификации с использованием первых двух компонентов.

scoreTrain95 = scoreTrain(:,1:idx);
mdl = fitctree(scoreTrain95,YTrain);

mdl является ClassificationTree модель.

Для использования обученной модели для тестового набора необходимо преобразовать набор тестовых данных с помощью PCA, полученного из набора обучающих данных. Получение оценок основных компонентов набора тестовых данных путем вычитания mu от XTest и умножение на coeff. Необходимы только баллы для первых двух компонентов, поэтому используйте первые два коэффициента. coeff(:,1:idx).

scoreTest95 = (XTest-mu)*coeff(:,1:idx);

Сдать обучаемую модель mdl и преобразованный набор тестовых данных scoreTest в predict функция прогнозирования оценок для тестового набора.

YTest_predicted = predict(mdl,scoreTest95);

Создать код

Создайте код, который применяет PCA к данным и прогнозирует оценки с использованием обученной модели. Следует отметить, что для создания кода C/C + + требуется Coder™ MATLAB ®.

Сохранение классификационной модели в файл myMdl.mat с помощью saveLearnerForCoder.

saveLearnerForCoder(mdl,'myMdl');

Определение функции точки входа с именем myPCAPredict который принимает набор тестовых данных (XTest) и информация РСА (coeff и mu) и возвращает оценки тестовых данных.

Добавить %#codegen директива компилятора (или прагматика) для функции начального уровня после сигнатуры функции, указывающая, что предполагается создать код для алгоритма MATLAB. Добавление этой директивы дает команду анализатору кода MATLAB помочь в диагностике и устранении нарушений, которые могут привести к ошибкам при создании кода.

function label = myPCAPredict(XTest,coeff,mu) %#codegen
% Transform data using PCA
scoreTest = bsxfun(@minus,XTest,mu)*coeff;

% Load trained classification model
mdl = loadLearnerForCoder('myMdl');
% Predict ratings using the loaded model  
label = predict(mdl,scoreTest);

myPCAPredict применяет PCA к новым данным с помощью coeff и mu, а затем прогнозирует оценки с использованием преобразованных данных. Таким образом, вы не сдаете обучающие данные, которые могут быть значительного размера.

Примечание.Если нажать кнопку, расположенную в правом верхнем разделе этой страницы, и открыть этот пример в MATLAB ®, то MATLAB ® откроет папку примеров. Эта папка содержит файл функции начального уровня.

Создание кода с помощью codegen (Кодер MATLAB). Поскольку C и C++ являются статически типизированными языками, необходимо определить свойства всех переменных в функции точки входа во время компиляции. Чтобы указать тип данных и точный размер входного массива, передайте выражение MATLAB ®, которое представляет набор значений с определенным типом данных и размером массива, используя -args вариант. Если количество наблюдений неизвестно во время компиляции, можно также указать входные данные как переменные размеры, используя coder.typeof (Кодер MATLAB). Дополнительные сведения см. в разделе Определение аргументов переменного размера для создания кода.

codegen myPCAPredict -args {coder.typeof(XTest,[Inf,6],[1,0]),coeff(:,1:idx),mu}
Code generation successful.

codegen генерирует функцию MEX myPCAPredict_mex с расширением, зависящим от платформы.

Проверьте созданный код.

YTest_predicted_mex = myPCAPredict_mex(XTest,coeff(:,1:idx),mu);
isequal(YTest_predicted,YTest_predicted_mex)
ans = logical
   1

isequal возвращает логический 1 (true), что означает, что все входы равны. Сравнение подтверждает, что predict функция mdl и myPCAPredict_mex функция возвращает те же оценки.

Дополнительные сведения о создании кода см. в разделе Введение в генерацию кода и приложение для учащихся-классификаторов. В последнем описывается, как выполнять PCA и обучать модель с помощью приложения Classification Learner, а также как создавать код C/C + +, который предсказывает метки для новых данных на основе обученной модели.

Входные аргументы

свернуть все

Входные данные, для которых вычисляются основные компоненты, определенные как матрица n-by-p. Ряды X соответствуют наблюдениям и столбцам переменных.

Типы данных: single | double

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'Algorithm','eig','Centered',false,'Rows','all','NumComponents',3 указывает, что pca использует алгоритм разложения собственных значений, а не центрирование данных, использует все наблюдения и возвращает только первые три главных компонента.

Алгоритм основного компонента, который pca используется для выполнения анализа основного компонента, указанного как разделенная запятыми пара, состоящая из 'Algorithm' и одно из следующих.

СтоимостьОписание
'svd'По умолчанию. Разложение сингулярных значений (SVD) X.
'eig'Разложение собственных значений (EIG) ковариационной матрицы. Алгоритм EIG быстрее SVD, когда число наблюдений, n, превышает число переменных, p, но менее точен, поскольку число условий ковариации является квадратом числа условий X.
'als'

Алгоритм чередования наименьших квадратов (ALS). Этот алгоритм находит наилучшее приближение ранга-k посредством факторинга X в матрицу n-на-k левого фактора, L, и матрицу p-на-k правого фактора, R, где k - число главных компонентов. Факторизация использует итеративный метод, начинающийся со случайных начальных значений.

ALS предназначен для лучшей обработки отсутствующих значений. Предпочтительно парное удаление ('Rows','pairwise') и имеет дело с отсутствующими значениями без удаления списка ('Rows','complete'). Он может хорошо работать для наборов данных с небольшим процентом отсутствующих данных случайным образом, но может плохо работать с разреженными наборами данных.

Пример: 'Algorithm','eig'

Индикатор центрирования столбцов, указанный как разделенная запятыми пара, состоящая из 'Centered' и одно из этих логических выражений.

СтоимостьОписание
true

По умолчанию. pca центры X вычитанием средства столбца перед вычислением разложения сингулярного значения или разложения собственного значения. Если X содержит NaN отсутствующие значения, mean(X,'omitnan') используется для поиска среднего значения с любыми доступными данными. Можно реконструировать центрированные данные с помощью score*coeff'.

false

В этом случае pca не центрирует данные. Можно реконструировать исходные данные с помощью score*coeff'.

Пример: 'Centered',false

Типы данных: logical

Индикатор выхода размера экономики, когда степени свободы d меньше числа переменных p, указанных как пара, разделенная запятыми, состоящая из 'Economy' и одно из этих логических выражений.

СтоимостьОписание
true

По умолчанию. pca возвращает только первые d элементов latent и соответствующие столбцы coeff и score.

Эта опция может быть значительно быстрее, когда число переменных p намного больше, чем d.

false

pca возвращает все элементы latent. Столбцы coeff и score соответствующие нулевым элементам в latent являются нулями.

Обратите внимание, что при d < p, score(:,d+1:p) и latent(d+1:p) обязательно равны нулю, а столбцы coeff(:,d+1:p) определить направления, ортогональные X.

Пример: 'Economy',false

Типы данных: logical

Количество запрошенных компонентов, указанных как разделенная запятыми пара, состоящая из 'NumComponents' и скалярное целое число k, удовлетворяющее 0 < kp, где p - число исходных переменных в X. Если указано, pca возвращает первые k столбцов coeff и score.

Пример: 'NumComponents',3

Типы данных: single | double

Действие, которое необходимо предпринять для NaN значения в матрице данных X, указанная как пара, разделенная запятыми, состоящая из 'Rows' и одно из следующих.

СтоимостьОписание
'complete'

По умолчанию. Наблюдения с NaN значения удаляются перед расчетом. Ряды NaNs повторно вставляются в score и tsquared в соответствующих местах.

'pairwise'

Эта опция применяется только в том случае, если алгоритм 'eig'. Если не указать алгоритм вместе с 'pairwise', то pca устанавливает для него значение 'eig'. При указании 'svd' в качестве алгоритма вместе с опцией 'Rows','pairwise', то pca возвращает предупреждающее сообщение, устанавливает алгоритм на 'eig' и продолжается.

При указании 'Rows','pairwise' опция, pca вычисляет (i, j) элемент ковариационной матрицы, используя строки без NaN значения в столбцах i или j X.

Обратите внимание, что результирующая ковариационная матрица может не быть положительной определенной. В этом случае pca завершается сообщением об ошибке.

'all'

X ожидается, что отсутствуют отсутствующие значения. pca использует все данные и прекращает, если таковые имеются NaN значение найдено.

Пример: 'Rows','pairwise'

Веса наблюдения, указанные как разделенная запятыми пара, состоящая из 'Weights' и вектор длиной n, содержащий все положительные элементы.

Типы данных: single | double

Переменные веса, указанные как пара, разделенная запятыми, состоящая из 'VariableWeights' и одно из следующих.

СтоимостьОписание

вектор строки

Вектор длины p, содержащий все положительные элементы.

'variance'

Переменные веса являются обратной дисперсией выборки. При назначении весов наблюдениям с помощью 'Weights', то переменные веса становятся обратной взвешенной дисперсии выборки.

Если 'Centered' имеет значение true в то же время матрица данных X центрирован и стандартизирован. В этом случае pca возвращает основные компоненты на основе корреляционной матрицы.

Пример: 'VariableWeights','variance'

Типы данных: single | double | char | string

Начальное значение для матрицы коэффициентов coeff, указанная как пара, разделенная запятыми, состоящая из 'Coeff0' и матрицу p-на-k, где p - количество переменных, а k - количество запрашиваемых главных компонентов.

Примечание

Эту пару «имя-значение» можно использовать только в том случае, если 'algorithm' является 'als'.

Типы данных: single | double

Начальное значение для матрицы баллов score, указанная как пара, разделенная запятыми, состоящая из 'Score0' и матрицу n-на-k, где n - количество наблюдений, а k - количество запрашиваемых главных компонентов.

Примечание

Эту пару «имя-значение» можно использовать только в том случае, если 'algorithm' является 'als'.

Типы данных: single | double

Опции итераций, заданные как пара, разделенная запятыми, состоящая из 'Options' и структура, созданная statset функция. pca использует следующие поля в структуре опций.

Имя поляОписание
'Display'Уровень вывода на дисплей. Варианты: 'off', 'final', и 'iter'.
'MaxIter'Максимально допустимое число шагов. Значение по умолчанию - 1000. В отличие от параметров оптимизации, достижение MaxIter значение рассматривается как сходимость.
'TolFun'Положительное число, определяющее допуск окончания для функции затрат. По умолчанию используется значение 1e-6.
'TolX'Положительное число, дающее порог сходимости для относительного изменения элементов матрицы левого и правого коэффициентов L и R в алгоритме ALS. По умолчанию используется значение 1e-6.

Примечание

Эту пару «имя-значение» можно использовать только в том случае, если 'algorithm' является 'als'.

Можно изменить значения этих полей и указать новую структуру в pca с использованием 'Options' аргумент пары имя-значение.

Пример: opt = statset('pca'); opt.MaxIter = 2000; coeff = pca(X,'Options',opt);

Типы данных: struct

Выходные аргументы

свернуть все

Коэффициенты главной компоненты, возвращаемые в виде матрицы p-by-p. Каждый столбец coeff содержит коэффициенты для одного главного компонента. Столбцы находятся в порядке отклонения нисходящего компонента, latent.

Баллы основного компонента, возвращенные в виде матрицы. Ряды score соответствуют наблюдениям, а столбцы - компонентам.

Отклонения главных компонентов, то есть собственные значения ковариационной матрицы X, возвращается в виде вектора столбца.

T-Squared Statistic Хотеллинга, которая является суммой квадратов стандартизированных баллов для каждого наблюдения, возвращалась в виде вектора-столбца.

Процент общей дисперсии, объясняемой каждым основным компонентом, возвращаемый в виде вектора столбца.

Оценочные средние значения переменных в X, возвращается как вектор строки, когда Centered имеет значение true. Когда Centered является false, программное обеспечение не вычисляет средства и возвращает вектор нулей.

Подробнее

свернуть все

T-квадратичная статистика Hotelling

T-квадратичная статистика Хотеллинга является статистической мерой многомерного расстояния каждого наблюдения от центра набора данных.

Даже при запросе меньшего количества компонентов, чем число переменных, pca использует все главные компоненты для вычисления T-квадрата статистики (вычисляет его в полном пространстве). Если требуется T-квадрат статистики в уменьшенном или отброшенном пространстве, выполните одно из следующих действий.

  • Для T-квадратичной статистики в уменьшенном пространстве используйте mahal(score,score).

  • Для T-квадратичной статистики в отброшенном пространстве сначала вычислите T-квадратичную статистику, используя [coeff,score,latent,tsquared] = pca(X,'NumComponents',k,...), вычислить T-квадрат статистики в уменьшенном пространстве, используя tsqreduced = mahal(score,score), а затем взять разницу: tsquared - tsqreduced.

Степени свободы

Степени свободы d равны n-1, если данные центрированы, а в противном случае n, где:

  • n - число строк без NaNs, если вы используете 'Rows','complete'.

  • n - число строк без NaNs в паре столбцов, которая имеет максимальное количество строк без NaNs, если вы используете 'Rows','pairwise'.

Переменные веса

Следует отметить, что при использовании переменных весов матрица коэффициентов не является ортонормированной. Предположим, что используемый вектор переменных весов называется varweiи вектор коэффициентов главной компоненты pca возвращено значение wcoeff. Затем можно вычислить ортонормированные коэффициенты с помощью преобразования diag(sqrt(varwei))*wcoeff.

Алгоритмы

pca функция накладывает условное обозначение знака, заставляя элемент с наибольшей величиной в каждом столбце coefs быть позитивным. Изменение знака вектора коэффициентов не меняет его значения.

Ссылки

[1] Джоллифф, И. Т. Анализ основных компонентов. 2-е изд., Спрингер, 2002.

[2] Кржановский, В. Дж. Принципы многомерного анализа. Издательство Оксфордского университета, 1988 год.

[3] Себер, Г. А. Ф. Многомерные наблюдения. Уайли, 1984.

[4] Джексон, Дж. Э. А. Руководство пользователя по основным компонентам. Уайли, 1988.

[5] Roweis, S. «Алгоритмы EM для PCA и SPCA». В материалах Конференции 1997 года по достижениям в области нейронных систем обработки информации. Vol.10 (NIPS 1997), Кембридж, Массачусетс, США: MIT Press, 1998, стр. 626-632.

[6] Илин, А. и Т. Райко. «Практические подходы к анализу основных компонентов при наличии отсутствующих значений». Дж. Мач. Рес.. Т. 11, август 2010, с. 1957-2000.

Расширенные возможности

.
Представлен в R2012b