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

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

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

load hald

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

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

[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
      ⋮

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

[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-квадрат в полном пространстве, используя все четыре компонента.

Т-квадрат значения в редуцированном пространстве соответствует расстоянию Махаланобиса в редуцированном пространстве.

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: основание колеса, длина, ширина, высота, снаряженный вес, размер двигателя, отверстие, штрих, коэффициент сжатия, мощность, пиковая частота вращения, город-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')

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

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

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

[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) и информацию PCA (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 Coder). Поскольку C и C++ являются статически типизированными языками, вы должны определить свойства всех переменных в функции точки входа во время компиляции. Чтобы задать тип данных и точный размер входного массива, передайте выражение MATLAB ®, которое представляет множество значений с определенным типом данных и размером массива при помощи -args опция. Если количество наблюдений неизвестно во время компиляции, можно также задать вход как переменный размер при помощи coder.typeof (MATLAB Coder). Для получения дополнительной информации смотрите Задать аргументы переменного размера для генерации кода.

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 функция возвращает те же рейтинги.

Для получения дополнительной информации о генерации кода посмотрите Введение, чтобы Закодировать Генерацию кода 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 -by 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 <<reservedrangesplaceholder3> ≤ <reservedrangesplaceholder2>, где 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-Квадратная Статистика Хотеллинга, которая является суммой квадратов стандартизированных счетов для каждого наблюдения, возвращается как вектор-столбец.

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

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

Подробнее о

свернуть все

Статистика Hotelling T-квадратов

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

Даже когда вы запрашиваете меньше компонентов, чем количество переменных, pca использует все основные компоненты, чтобы вычислить 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] Jolliffe, I.T. Основной анализ компонентов. 2-е изд., Спрингер, 2002.

[2] Кржановски, У. Дж. Принципы многомерного анализа. Oxford University Press, 1988.

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

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

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

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

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

.
Введенный в R2012b