Анализ основных компонентов необработанных данных
возвращает коэффициенты основного компонента, также известные как загрузки, для матрицы данных n -by p coeff
= pca(X
)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
.
Загрузите набор выборочных данных.
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 = 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'});
Все четыре переменные представлены в этом биплоте вектором, и направление и длина вектора указывают, как каждая переменная способствует двум основным компонентам на графике. Например, первый главный компонент, который находится на горизонтальной оси, имеет положительные коэффициенты для третьей и четвертой переменных. Поэтому векторы и направлены в правую половину графика. Самый большой коэффициент в первом главном компоненте является четвертым, соответствующим переменной .
Второй главный компонент, который находится на вертикальной оси, имеет отрицательные коэффициенты для переменных , , и , и положительный коэффициент для переменной .
Этот 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')
Данные показывают наибольшую изменчивость вдоль первой основной оси компонента. Это самое большое возможное отклонение среди всех возможных элементов для выбора первой оси. Изменчивость вдоль второй основной оси компонента является самой большой среди всех возможных остальных вариантов второй оси. Третья ось главного компонента имеет третью самую большую изменчивость, которая значительно меньше, чем изменчивость вдоль второй оси главного компонента. Четвертый-тринадцатый основные оси компонентов не стоит проверять, потому что они объясняют только 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++, который предсказывает метки для новых данных на основе обученной модели.
X
- Входные данныеВходные данные, для которых можно вычислить основные компоненты, заданные как n -by - p матрица. Строки X
соответствуют наблюдениям и столбцам - переменным.
Типы данных: single
| double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'Algorithm','eig','Centered',false,'Rows','all','NumComponents',3
задает, что pca
использует алгоритм разложения собственных значений, а не центрирует данные, использует все наблюдения и возвращает только первые три главных компонента.'Algorithm'
- Алгоритм основного компонента'svd'
(по умолчанию) | 'eig'
| 'als'
Алгоритм основного компонента, который pca
используется для выполнения анализа основного компонента, заданного как разделенная разделенными запятой парами, состоящая из 'Algorithm'
и одно из следующих.
Значение | Описание |
---|---|
'svd' | По умолчанию. Сингулярное разложение (SVD) X . |
'eig' | Разложение собственных значений (EIG) ковариационной матрицы. Алгоритм EIG быстрее SVD, когда количество наблюдений, n, превышает количество переменных, p, но менее точно, потому что число обусловленности ковариации является квадратом числа обусловленности X . |
'als' |
Альтернативный алгоритм наименьших квадратов (ALS). Этот алгоритм находит лучшее приближение k рангу путем факторинга Система ALS предназначена для улучшения обработки отсутствующих значений. Предпочтительно парное удаление ( |
Пример: 'Algorithm','eig'
'Centered'
- Индикатор для центрирующих столбцовtrue
(по умолчанию) | false
Индикатор для центрирования столбцов, заданный как разделенная разделенными запятой парами, состоящая из 'Centered'
и одно из этих логических выражений.
Значение | Описание |
---|---|
true | По умолчанию. |
false | В этом случае |
Пример: 'Centered',false
Типы данных: logical
'Economy'
- Показатель для производства по размеру экономикиtrue
(по умолчанию) | false
Индикатор для выхода экономического размера, когда степени свободы, d, меньше, чем количество переменных, p, заданные как разделенная разделенными запятой парами, состоящая из 'Economy'
и одно из этих логических выражений.
Значение | Описание |
---|---|
true | По умолчанию. Эта опция может быть значительно быстрее, когда количество p переменных намного больше d. |
false |
|
Обратите внимание, что при d < p, score(:,d+1:p)
и latent(d+1:p)
обязательно равны нулю, и столбцы coeff(:,d+1:p)
задайте направления, которые ортогональны X
.
Пример: 'Economy',false
Типы данных: logical
'NumComponents'
- Количество запрошенных компонентовКоличество запрошенных компонентов, заданное как разделенная разделенными запятой парами, состоящая из 'NumComponents'
и скалярное целое число k удовлетворение 0 <<reservedrangesplaceholder3> ≤ <reservedrangesplaceholder2>, где p количество оригинальных переменных в X
. Когда задано, pca
возвращает первые k столбцы coeff
и score
.
Пример: 'NumComponents',3
Типы данных: single
| double
'Rows'
- Действия, которые необходимо предпринять для NaN
значения'complete'
(по умолчанию) | 'pairwise'
| 'all'
Действия, которые необходимо предпринять для NaN
значения в матрице данных X
, заданная как разделенная разделенными запятой парами, состоящая из 'Rows'
и одно из следующих.
Значение | Описание |
---|---|
'complete' | По умолчанию. Наблюдения с |
'pairwise' | Эта опция применяется только, когда алгоритм Когда вы задаете Обратите внимание, что полученная ковариационная матрица может не быть положительно определенной. В этом случае |
'all' |
|
Пример: 'Rows','pairwise'
'Weights'
- Веса наблюденийВеса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из 'Weights'
и вектор длины n содержащий все положительные элементы.
Типы данных: single
| double
'VariableWeights'
- Переменные веса'variance'
Веса переменных, заданные как разделенная разделенными запятой парами, состоящая из 'VariableWeights'
и одно из следующих.
Значение | Описание |
---|---|
Вектор-строка | Вектор длины p содержащий все положительные элементы. |
'variance' | Веса переменных являются обратным отклонением выборки. Если вы также присваиваете веса наблюдениям с помощью Если |
Пример: 'VariableWeights','variance'
Типы данных: single
| double
| char
| string
'Coeff0'
- Начальное значение для коэффициентовНачальное значение для матрицы коэффициентов coeff
, заданная как разделенная разделенными запятой парами, состоящая из 'Coeff0'
и p -by - k матрица, где p - количество переменных, а k - количество запрашиваемых главных компонентов.
Примечание
Использовать эту пару "имя-значение" можно только при 'algorithm'
является 'als'
.
Типы данных: single
| double
'Score0'
- Начальное значение для счетовНачальное значение для матрицы счетов score
, заданная как разделенная разделенными запятой парами, состоящая из 'Score0'
и n -by - k матрица, где n - количество наблюдений, а k - количество запрашиваемых главных компонентов.
Примечание
Использовать эту пару "имя-значение" можно только при 'algorithm'
является 'als'
.
Типы данных: single
| double
'Options'
- Опции для итерацийОпции для итераций, заданные как разделенная разделенными запятой парами, состоящая из '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
coeff
- Коэффициенты основных компонентовКоэффициенты основного компонента, возвращенные как p -by - p матрица. Каждый столбец coeff
содержит коэффициенты для одного основного компонента. Столбцы указаны в порядке убывания отклонения компонента, latent
.
score
- Оценки основных компонентовОсновной компонент счетов, возвращенный как матрица. Строки score
соответствуют наблюдениям, а столбцы - компонентам.
latent
- Отклонения основных компонентовГлавные отклонения компонента, то есть собственные значения матрицы ковариации X
, возвращается как вектор-столбец.
tsquared
- T-квадратная статистика ХотеллингаT-Квадратная Статистика Хотеллинга, которая является суммой квадратов стандартизированных счетов для каждого наблюдения, возвращается как вектор-столбец.
explained
- Процентная доля объяснённого общего отклоненияПроцент от общего объема отклонения объясняемого каждым основным компонентом, возвращаемый как вектор-столбец.
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 - количество строк без каких-либо NaN
s, если вы используете 'Rows','complete'
.
n - количество строк без каких-либо NaN
s в паре столбцов, которое имеет максимальное количество строк без NaN
s, если вы используете '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.
Эта функция поддерживает длинные массивы для данной , которой не помещаютси в память, с некоторыми ограничениями.
pca
работает непосредственно с длинные массивы путем вычисления ковариационной матрицы и использования in-memory pcacov
функция для вычисления основных компонентов.
Поддерживаемые синтаксисы:
coeff = pca(X)
[coeff,score,latent] = pca(X)
[coeff,score,latent,explained] = pca(X)
[coeff,score,latent,tsquared] = pca(X)
[coeff,score,latent,tsquared,explained] = pca(X)
Аргументы пары "имя-значение" не поддерживаются.
Для получения дополнительной информации см. Раздел «Длинные массивы для данных , которых не помещаютсь в память,».
Указания и ограничения по применению:
Когда 'Algorithm'
является 'als'
, а 'Display'
значение для 'Options'
игнорируется.
Значения для 'Weights'
и 'VariableWeights'
аргументы пары "имя-значение" должны быть вещественными.
Значение для 'Economy'
аргумент пары "имя-значение" должен быть константой времени компиляции. Например, чтобы использовать 'Economy',false
Аргумент пары "имя-значение" в сгенерированный код включите {coder.Constant('Economy'),coder.Constant(false)}
в -args
значение codegen
(MATLAB Coder).
Имена в аргументах пары "имя-значение" должны быть константами во время компиляции.
Сгенерированный код всегда возвращает пятый выход explained
как вектор-столбец.
Сгенерированный код всегда возвращает шестой выход mu
как вектор-строка.
Если mu
пуст, pca
возвращает mu
как массив 1 на 0. pca
не преобразует mu
в пустой массив 0 на 0.
Сгенерированный код не обрабатывает матрицу входа X
который имеет все NaN
значения как особый случай. Размерности выхода соизмеримы с соответствующими конечными входами.
Чтобы сохранить память на устройстве, на которое вы развертываете сгенерированный код, можно разделить обучение (построение компонентов PCA из входных данных) и предсказание (выполнение преобразования PCA). Создайте компоненты PCA в MATLAB®. Затем задайте функцию точки входа, которая выполняет преобразование PCA с помощью коэффициентов основного компонента (coeff
) и оценочные средства (mu
), которые являются выходами pca
. Наконец, сгенерируйте код для функции точки входа. Например, смотрите Применить PCA к новым данным и Сгенерировать код C/C + +.
Для получения дополнительной информации о генерации кода смотрите Введение в генерацию кода и Рабочий процесс генерации общего кода.
Указания и ограничения по применению:
Вы не можете задать имя-значение аргумента 'Algorithm'
как 'als'
.
Алгоритм основного компонента по умолчанию является SVD (аргумент имя-значение 'Algorithm','svd'
). Алгоритм SVD редко быстрее при выполнении на графическом процессоре вместо центрального процессора. Задайте аргумент имя-значение 'Algorithm'
как 'eig'
для ускорения вычисления на графическом процессоре.
Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.