pca

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

Синтаксис

coeff = pca(X)
coeff = pca(X,Name,Value)
[coeff,score,latent] = pca(___)
[coeff,score,latent,tsquared] = pca(___)
[coeff,score,latent,tsquared,explained,mu] = 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-squared для каждого наблюдения в 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: колесная база, длина, ширина, высота, собственный вес, объем двигателя, скука, штрих, коэффициент сжатия, лошадиная сила, пиковый об/мин, город-mpg и магистраль-mpg. Переменные перенесли, и штрих пропускают четыре значения в строках 56 - 59, и лошадиная сила переменных и пиковый об/мин пропускают два значения в строках 131 и 132.

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

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

По умолчанию pca выполняет действие, заданное аргументом пары "имя-значение" 'Rows','complete'. Эта опция удаляет наблюдения со значениями NaN перед вычислением. Строки NaN s повторно вставляются в 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 = 5.1543e-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 возвращает сообщение об ошибке.

Найдите угол между коэффициентами найденным для полных данных и данных с отсутствующими значениями с помощью listwise удаление (когда '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'});

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

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

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

Найдите статистические значения Хотеллинга T-squared.

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

load hald

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

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

[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-squared на уменьшаемом пробеле требуемых основных компонентов.

[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-squared на полном пробеле, с помощью всех четырех компонентов.

Значение T-squared на уменьшаемом пробеле соответствует расстоянию Mahalanobis на уменьшаемом пробеле.

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-squared на отброшенном пробеле путем взятия различия значений T-squared на полном пробеле и расстояния Mahalanobis на уменьшаемом пробеле.

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: колесная база, длина, ширина, высота, собственный вес, объем двигателя, скука, штрих, коэффициент сжатия, лошадиная сила, пиковый об/мин, город-mpg и магистраль-mpg.

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

[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')

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

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

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

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

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

Генерация кода C/C++ требует MATLAB® Coder™.

Примените 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' 

Первый столбец является ID каждого наблюдения, и последний столбец является оценкой. Задайте второе к седьмым столбцам как данные о предикторе и задайте последний столбец (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%-ю изменчивость при помощи цикла while.

sum_explained = 0;
idx = 0;
while sum_explained < 95
    idx = idx + 1;
    sum_explained = sum_explained + explained(idx);
end
idx
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++ требует MATLAB® Coder™.

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

saveCompactModel(mdl,'myMdl');

Задайте функцию с именем точки входа myPCAPredict, который принимает, тестовые данные устанавливают (XTest) и информация PCA (coeff и mu), и возвращает оценки тестовых данных.

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

type myPCAPredict % Display contents of myPCAPredict.m
function label = myPCAPredict(XTest,coeff,mu) %#codegen
% Transform data using PCA
scoreTest = bsxfun(@minus,XTest,mu)*coeff;

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

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

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

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

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

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

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

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

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

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

Входные параметры

свернуть все

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

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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-by-k оставленный факторную матрицу, L, и p - по-справедливости-k факторная матрица, R, где k является количеством основных компонентов. Факторизация использует итерационный метод начиная со случайных начальных значений.

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

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

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

ЗначениеОписание
true

Значение по умолчанию. pca сосредотачивает X путем вычитания средних значений столбца прежде, чем вычислить разложение собственного значения или сингулярное разложение. Если X содержит отсутствующие значения NaN, nanmean используется, чтобы найти среднее значение с любыми доступными данными. Можно восстановить данные в центре с помощью score*coeff'.

false

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

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

Типы данных: логический

Индикатор для размера экономики вывел, когда степени свободы, 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

Типы данных: логический

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

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

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

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

ЗначениеОписание
'complete'

Значение по умолчанию. Наблюдения со значениями NaN удалены перед вычислением. Строки NaN s повторно вставляются в 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-by-k матрица, где p является количеством переменных и k, является количеством основных компонентов, которые требуют.

Примечание

Можно использовать эту пару "имя-значение" только, когда 'algorithm' является 'als'.

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

Начальное значение для матрицы очков score, заданный как пара, разделенная запятой, состоящая из 'Score0' и n-by-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, которая является суммой квадратов стандартизированной музыки к каждому наблюдению, возвратилась как вектор-столбец.

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

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

Больше о

свернуть все

Статистическая величина Хотеллинга T-Squared

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

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

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

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

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

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

  • n является количеством строк без любого NaN s, если вы используете 'Rows','complete'.

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

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

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

Ссылки

[1] Jolliffe, я. T. Анализ главных компонентов. 2-й редактор, Спрингер, 2002.

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

[3] Seber, G. A. F. Многомерные наблюдения. Вайли, 1984.

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

[5] Roweis, S. “Алгоритмы EM для PCA и SPCA”. В Продолжениях 1 997 Конференций по Усовершенствованиям в Нейронных Системах обработки информации. Vol.10 (NIPS 1997), Кембридж, MA, США: Нажатие MIT, 1998, стр 626–632.

[6] Ilin, A. и Т. Райко. “Практические Подходы к Анализу главных компонентов в присутствии Отсутствующих значений”. Дж. Мах. Учиться. Res.. Издание 11, август 2010, стр 1957–2000.

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

Представленный в R2012b