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 значения перед вычислением. Строки 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 = 4.8688e-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 при помощи saveLearnerForCoder.

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

Примечание

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

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

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

Примечание

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

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

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

Имя поляОписание
'Display'Level of 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 является количеством строк без любого NaNs, если вы используете 'Rows','complete'.

  • n является количеством строк без любого NaNs в паре столбца, которая имеет максимальное количество строк без NaNs, если вы используете '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