Анализ главных компонентов необработанных данных
coeff = pca(X)
coeff = pca(X,Name,Value)
[coeff,score,latent]
= pca(___)
[coeff,score,latent,tsquared]
= pca(___)
[coeff,score,latent,tsquared,explained,mu]
= pca(___)
возвращает коэффициенты основного компонента, также известные как загрузки, для 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 = 5.1543e-16
Это - маленькое значение. Это указывает, что результаты, если вы используете pca
с аргументом пары "имя-значение" 'Rows','complete'
, когда нет никаких недостающих данных и если вы используете pca
с аргументом пары "имя-значение" 'algorithm','als'
, когда там пропускает данные, друг близко к другу.
Выполните анализ главных компонентов с помощью аргумента пары "имя-значение" 'Rows','complete'
и отобразите коэффициенты компонента.
[coeff2,score2,latent,tsquared,explained,mu2] = pca(y,... 'Rows','complete'); coeff2
coeff2 = 4×3
-0.2054 0.8587 0.0492
-0.6694 -0.3720 0.5510
0.1474 -0.3513 -0.5187
0.6986 -0.0298 0.6518
В этом случае pca
удаляет строки с отсутствующими значениями, и y
имеет только четыре строки без отсутствующих значений. pca
возвращает только три основных компонента. Вы не можете использовать опцию 'Rows','pairwise'
, потому что ковариационная матрица не положительна полуопределенный, и pca
возвращает сообщение об ошибке.
Найдите угол между коэффициентами найденным для полных данных и данных с отсутствующими значениями с помощью listwise удаление (когда 'Rows','complete'
).
subspace(coeff(:,1:3),coeff2)
ans = 0.3576
Угол между этими двумя пробелами существенно больше. Это указывает, что эти два результата отличаются.
Отобразите предполагаемое среднее значение.
mu2
mu2 = 1×4
7.8889 46.9091 9.8750 29.6000
В этом случае среднее значение является только демонстрационным средним значением y
.
Восстановите наблюдаемые данные.
score2*coeff2'
ans = 13×4
NaN NaN NaN NaN
-7.5162 -18.3545 4.0968 22.0056
NaN NaN NaN NaN
NaN NaN NaN NaN
-0.5644 5.3213 -3.3432 3.6040
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
12.8315 -0.1076 -6.3333 -3.7758
⋮
Это показывает, что удаление строк, содержащих значения NaN
, не работает, а также алгоритм ALS. Используя ALS лучше, когда данные имеют слишком много отсутствующих значений.
Найдите коэффициенты, очки и отклонения основных компонентов.
Загрузите набор выборочных данных.
load hald
Данные о компонентах имеют 13 наблюдений для 4 переменных.
Найдите коэффициенты основного компонента, очки и отклонения компонентов для данных о компонентах.
[coeff,score,latent] = pca(ingredients)
coeff = 4×4
-0.0678 -0.6460 0.5673 0.5062
-0.6785 -0.0200 -0.5440 0.4933
0.0290 0.7553 0.4036 0.5156
0.7309 -0.1085 -0.4684 0.4844
score = 13×4
36.8218 -6.8709 -4.5909 0.3967
29.6073 4.6109 -2.2476 -0.3958
-12.9818 -4.2049 0.9022 -1.1261
23.7147 -6.6341 1.8547 -0.3786
-0.5532 -4.4617 -6.0874 0.1424
-10.8125 -3.6466 0.9130 -0.1350
-32.5882 8.9798 -1.6063 0.0818
22.6064 10.7259 3.2365 0.3243
-9.2626 8.9854 -0.0169 -0.5437
-3.2840 -14.1573 7.0465 0.3405
⋮
latent = 4×1
517.7969
67.4964
12.4054
0.2372
Каждый столбец score
соответствует одному основному компоненту. Вектор, latent
, хранит отклонения этих четырех основных компонентов.
Восстановите данные о компонентах в центре.
Xcentered = score*coeff'
Xcentered = 13×4
-0.4615 -22.1538 -5.7692 30.0000
-6.4615 -19.1538 3.2308 22.0000
3.5385 7.8462 -3.7692 -10.0000
3.5385 -17.1538 -3.7692 17.0000
-0.4615 3.8462 -5.7692 3.0000
3.5385 6.8462 -2.7692 -8.0000
-4.4615 22.8462 5.2308 -24.0000
-6.4615 -17.1538 10.2308 14.0000
-5.4615 5.8462 6.2308 -8.0000
13.5385 -1.1538 -7.7692 -4.0000
⋮
Новые данные в Xcentered
являются исходными данными о компонентах, сосредоточенными путем вычитания средних значений столбца из соответствующих столбцов.
Визуализируйте и ортонормированные коэффициенты основного компонента для каждой переменной и музыку основного компонента к каждому наблюдению в одном графике.
biplot(coeff(:,1:2),'scores',score(:,1:2),'varlabels',{'v_1','v_2','v_3','v_4'});
Все четыре переменные представлены в этой побочной сюжетной линии вектором, и направление и длина вектора указывают, как каждая переменная способствует этим двум основным компонентам в графике. Например, первый основной компонент, который находится на горизонтальной оси, имеет положительные коэффициенты для третьих и четвертых переменных. Поэтому векторы и направлены в правильную половину графика. Самый большой коэффициент в первом основном компоненте является четвертым, соответствуя переменной .
Второй основной компонент, который находится на вертикальной оси, имеет отрицательные коэффициенты для переменных , , и , и положительный коэффициент для переменной .
Эта 2D побочная сюжетная линия также включает точку для каждого из этих 13 наблюдений с координатами, указывающими на счет каждого наблюдения для этих двух основных компонентов в графике. Например, точки около левого края графика имеют самую низкую музыку к первому основному компоненту. Точки масштабируются относительно максимального значения счета и максимальной содействующей длины, поэтому только их относительные местоположения могут быть определены из графика.
Найдите статистические значения Хотеллинга T-squared.
Загрузите набор выборочных данных.
load hald
Данные о компонентах имеют 13 наблюдений для 4 переменных.
Выполните анализ главных компонентов и запросите значения T-squared.
[coeff,score,latent,tsquared] = pca(ingredients); tsquared
tsquared = 13×1
5.6803
3.0758
6.0002
2.6198
3.3681
0.5668
3.4818
3.9794
2.6086
7.4818
⋮
Запросите только первые два основных компонента и вычислите значения T-squared на уменьшаемом пробеле требуемых основных компонентов.
[coeff,score,latent,tsquared] = pca(ingredients,'NumComponents',2);
tsquared
tsquared = 13×1
5.6803
3.0758
6.0002
2.6198
3.3681
0.5668
3.4818
3.9794
2.6086
7.4818
⋮
Обратите внимание на то, что, даже когда вы задаете уменьшаемый пробел компонента, pca
вычисляет значения T-squared на полном пробеле, с помощью всех четырех компонентов.
Значение T-squared на уменьшаемом пробеле соответствует расстоянию Mahalanobis на уменьшаемом пробеле.
tsqreduced = mahal(score,score)
tsqreduced = 13×1
3.3179
2.0079
0.5874
1.7382
0.2955
0.4228
3.2457
2.6914
1.3619
2.9903
⋮
Вычислите значения T-squared на отброшенном пробеле путем взятия различия значений T-squared на полном пробеле и расстояния Mahalanobis на уменьшаемом пробеле.
tsqdiscarded = tsquared - tsqreduced
tsqdiscarded = 13×1
2.3624
1.0679
5.4128
0.8816
3.0726
0.1440
0.2362
1.2880
1.2467
4.4915
⋮
Найдите изменчивость процента объясненной основными компонентами. Покажите представление данных на пробеле основных компонентов.
Загрузите набор выборочных данных.
load imports-85
Матрица данных X
имеет 13 непрерывных переменных в столбцах 3 - 15: колесная база, длина, ширина, высота, собственный вес, объем двигателя, скука, штрих, коэффициент сжатия, лошадиная сила, пиковый об/мин, город-mpg и магистраль-mpg.
Найдите изменчивость процента объясненной основными компонентами этих переменных.
[coeff,score,latent,tsquared,explained] = pca(X(:,3:15)); explained
explained = 13×1
64.3429
35.4484
0.1550
0.0379
0.0078
0.0048
0.0013
0.0011
0.0005
0.0002
⋮
Первые три компонента объясняют 99,95% всей изменчивости.
Визуализируйте представление данных в течение первых трех основных компонентов.
scatter3(score(:,1),score(:,2),score(:,3)) axis equal xlabel('1st Principal Component') ylabel('2nd Principal Component') zlabel('3rd Principal Component')
Данные показывают самую большую изменчивость вдоль первой оси основного компонента. Это - самое большое отклонение среди всего возможного выбора первой оси. Изменчивость вдоль второй оси основного компонента является самой большой среди всего возможного остающегося выбора второй оси. Третья ось основного компонента имеет третью по величине изменчивость, которая значительно меньше, чем изменчивость вдоль второй оси основного компонента. Четвертые через тринадцатые оси основного компонента не стоит осматривать, потому что они объясняют только 0,05% всей изменчивости в данных.
Чтобы пропустить любые из выходных параметров, можно использовать ~
вместо этого в соответствующем элементе. Например, если вы не хотите получать значения T-squared, задать
[coeff,score,latent,~,explained] = pca(X(:,3:15));
Этот пример использование:
Найдите основные компоненты для одного набора данных и примените PCA к другому набору данных. Эта процедура полезна, когда у вас есть обучающий набор данных и набор тестовых данных для модели машинного обучения. Например, можно предварительно обработать обучающий набор данных при помощи PCA и затем обучить модель. Чтобы протестировать обученную модель с помощью набора тестовых данных, необходимо применить преобразование PCA, полученное от данных тренировки до набора тестовых данных.
Этот пример также описывает, как сгенерировать код C/C++. Поскольку pca
поддерживает генерацию кода, можно сгенерировать код, который выполняет PCA использование обучающего набора данных, и примените PCA к набору тестовых данных. Затем разверните код на устройстве. В этом рабочем процессе необходимо передать данные тренировки, которые могут иметь значительный размер. Чтобы сохранить память на устройстве, можно разделить обучение и прогноз. Используйте pca
в MATLAB® и примените PCA к новым данным в сгенерированном коде на устройстве.
Генерация кода C/C++ требует MATLAB® Coder™.
Примените PCA к новым данным
Загрузите набор данных в таблицу при помощи readtable
. Набор данных находится в файле CreditRating_Historical.dat
, который содержит исторические данные о кредитном рейтинге.
creditrating = readtable('CreditRating_Historical.dat');
creditrating(1:5,:)
ans=5×8 table
ID WC_TA RE_TA EBIT_TA MVE_BVTD S_TA Industry Rating
_____ _____ _____ _______ ________ _____ ________ ______
62394 0.013 0.104 0.036 0.447 0.142 3 'BB'
48608 0.232 0.335 0.062 1.969 0.281 8 'A'
42444 0.311 0.367 0.074 1.935 0.366 1 'A'
48631 0.194 0.263 0.062 1.017 0.228 4 'BBB'
43768 0.121 0.413 0.057 3.647 0.466 12 'AAA'
Первый столбец является ID каждого наблюдения, и последний столбец является оценкой. Задайте второе к седьмым столбцам как данные о предикторе и задайте последний столбец (Rating
) как ответ.
X = table2array(creditrating(:,2:7)); Y = creditrating.Rating;
Используйте первые 100 наблюдений в качестве тестовых данных и остальных как данные тренировки.
XTest = X(1:100,:); XTrain = X(101:end,:); YTest = Y(1:100); YTrain = Y(101:end);
Найдите основные компоненты для обучающего набора данных XTrain
.
[coeff,scoreTrain,~,~,explained,mu] = pca(XTrain);
Этот код возвращает четыре выходных параметра: coeff
, scoreTrain
, explained
и mu
. Используйте explained
(процент общего объясненного отклонения), чтобы найти количество компонентов требуемым объяснить по крайней мере 95%-ю изменчивость. Используйте coeff
(коэффициенты основного компонента) и mu
(оцененные средние значения XTrain
), чтобы применить PCA к набору тестовых данных. Используйте scoreTrain
(очки основного компонента) вместо XTrain
, когда вы обучите модель.
Отобразите изменчивость процента, объясненную основными компонентами.
explained
explained = 6×1
58.2614
41.2606
0.3875
0.0632
0.0269
0.0005
Первые два компонента объясняют больше чем 95% всей изменчивости. Программно найдите количество компонентов требуемым объяснить по крайней мере 95%-ю изменчивость при помощи цикла while
.
sum_explained = 0; idx = 0; while sum_explained < 95 idx = idx + 1; sum_explained = sum_explained + explained(idx); end idx
idx = 2
Обучите дерево классификации использование первых двух компонентов.
scoreTrain95 = scoreTrain(:,1:idx); mdl = fitctree(scoreTrain95,YTrain);
mdl
является моделью ClassificationTree
.
Чтобы использовать обученную модель для набора тестов, необходимо преобразовать набор тестовых данных при помощи PCA, полученного из обучающего набора данных. Получите множество основного компонента тестовых данных, установленных путем вычитания mu
из XTest
и умножения coeff
. Только музыка к первым двум компонентам необходима, так используйте первые два коэффициента coeff(:,1:idx)
.
scoreTest95 = (XTest-mu)*coeff(:,1:idx);
Передайте обученную модель mdl
, и преобразованные тестовые данные устанавливают scoreTest
на функцию predict
предсказывать оценки для набора тестов.
YTest_predicted = predict(mdl,scoreTest95);
Сгенерируйте код
Сгенерируйте код, который применяет PCA к данным и предсказывает оценки с помощью обученной модели. Обратите внимание на то, что генерация кода C/C++ требует MATLAB® Coder™.
Сохраните модель классификации в файл myMdl.mat
при помощи saveCompactModel
.
saveCompactModel(mdl,'myMdl');
Задайте функцию с именем точки входа myPCAPredict
, который принимает, тестовые данные устанавливают (XTest
) и информация PCA (coeff
и mu
), и возвращает оценки тестовых данных.
Добавьте директиву компилятора %#codegen
(или прагма) к функции точки входа после функциональной подписи, чтобы указать, что вы намереваетесь сгенерировать код для алгоритма MATLAB. Добавление этой директивы дает Анализатору кода MATLAB команду помогать вам диагностировать и зафиксировать нарушения, которые вызвали бы ошибки во время генерации кода.
type myPCAPredict % Display contents of myPCAPredict.m
function label = myPCAPredict(XTest,coeff,mu) %#codegen % Transform data using PCA scoreTest = bsxfun(@minus,XTest,mu)*coeff; % Load trained classification model mdl = loadCompactModel('myMdl'); % Predict ratings using the loaded model label = predict(mdl,scoreTest);
myPCAPredict
применяет PCA к новым данным с помощью coeff
и mu
, и затем предсказывает оценки с помощью преобразованных данных. Таким образом вы не передаете данные тренировки, которые могут иметь значительный размер.
Примечание: Если вы нажимаете кнопку, расположенную в верхнем правом разделе этой страницы, и открываете этот пример в MATLAB®, затем MATLAB® открывает папку в качестве примера. Эта папка включает файл функции точки входа.
Сгенерируйте код при помощи codegen
. Поскольку C и C++ являются статически типизированными языками, необходимо определить свойства всех переменных в функции точки входа во время компиляции. Чтобы задать тип данных и точный размер входного массива, передайте выражение MATLAB®, которое представляет множество значений с определенным размером типа данных и массива при помощи опции -args
. Если количество наблюдений неизвестно во время компиляции, можно также задать вход как переменный размер при помощи coder.typeof
. Для получения дополнительной информации смотрите, Задают Аргументы Переменного Размера для Генерации кода.
codegen myPCAPredict -args {coder.typeof(XTest,[Inf,6],[1,0]),coeff(:,1:idx),mu}
codegen
генерирует MEX-функцию myPCAPredict_mex
с зависимым платформой расширением.
Проверьте сгенерированный код.
YTest_predicted_mex = myPCAPredict_mex(XTest,coeff(:,1:idx),mu); isequal(YTest_predicted,YTest_predicted_mex)
ans = logical
1
isequal
возвращает логическую единицу (true
), что означает, что все входные параметры равны. Сравнение подтверждает что функция predict
mdl
и myPCAPredict_mex
функциональный возврат те же оценки.
Для получения дополнительной информации о генерации кода смотрите Введение в Код Генерация кода Generationand и Приложение Classification Learner. Последний описывает, как выполнить PCA и обучить модель при помощи приложения Classification Learner, и как сгенерировать код C/C++, который предсказывает метки для новых данных на основе обученной модели.
X
Входные данныеВходные данные, для которых можно вычислить основные компоненты, заданные как n-by-p матрица. Строки X
соответствуют наблюдениям и столбцам к переменным.
Типы данных: single | double
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (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
Типы данных: логический
'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
Типы данных: логический
'NumComponents'
— Количество компонентов требуютКоличество компонентов запросило, заданный как пара, разделенная запятой, состоящая из 'NumComponents'
и скалярного целочисленного k, удовлетворяющего 0 <k ≤ p, где p является количеством исходных переменных в X
. Когда задано, pca
возвращает первые столбцы k coeff
и score
.
Пример: 'NumComponents',3
Типы данных: single | double
'Строки'
Действие, чтобы взять для значений 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'
и структуры, создаются функцией statset
. pca
использует следующие поля в структуре опций.
Имя поля | Описание |
---|---|
'Display' | Уровень отображает вывод. Выбором является 'off' , 'final' и 'iter' . |
'MaxIter' | Шаги максимального количества позволены. Значение по умолчанию 1000. В отличие от этого, в настройках оптимизации, достигая значения MaxIter рассматривается как сходимость. |
'TolFun' | Положительное число, дающее допуск завершения к функции стоимости. Значением по умолчанию является 1e-6. |
'TolX' | Положительное число, дающее порог сходимости для относительного изменения в элементах левых и правых факторных матриц, L и R, в алгоритме ALS. Значением по умолчанию является 1e-6. |
Можно использовать эту пару "имя-значение" только, когда 'algorithm'
является 'als'
.
Можно изменить значения этих полей и задать новую структуру в pca
с помощью аргумента пары "имя-значение" 'Options'
.
Пример: opt = statset('pca'); opt.MaxIter = 2000; coeff = pca(X,'Options',opt);
Типы данных: struct
coeff
— Коэффициенты основного компонентаКоэффициенты основного компонента, возвращенные как p-by-p матрица. Каждый столбец coeff
содержит коэффициенты для одного основного компонента. Столбцы находятся в порядке убывающего отклонения компонента, latent
.
score
— Очки основного компонентаОчки основного компонента, возвращенные как матрица. Строки score
соответствуют наблюдениям и столбцам к компонентам.
latent
— Отклонения основного компонентаОтклонения основного компонента, который является собственными значениями ковариационной матрицы X
, возвратились как вектор-столбец.
tsquared
— Статистическая величина Хотеллинга T-squaredСтатистическая величина Хотеллинга T-Squared, которая является суммой квадратов стандартизированной музыки к каждому наблюдению, возвратилась как вектор-столбец.
explained
— Процент общего отклонения объясненПроцент общего отклонения объяснен каждым основным компонентом, возвращенным как вектор-столбец.
Статистическая величина Хотеллинга T-squared является статистической мерой многомерного расстояния каждого наблюдения от центра набора данных.
Даже когда вы запрашиваете меньше компонентов, чем количество переменных, pca
использует все основные компоненты, чтобы вычислить статистическую величину T-squared (вычисляет его на полном пробеле). Если вы хотите статистическую величину T-squared в уменьшаемом или отброшенном пробеле, выполнить одно из следующих действий:
Для статистической величины T-squared на уменьшаемом пробеле используйте mahal(score,score)
.
Для статистической величины T-squared на отброшенном пробеле сначала вычислите статистическую величину T-squared с помощью [coeff,score,latent,tsquared] = pca(X,'NumComponents',k,...)
, вычислите статистическую величину T-squared на уменьшаемом пробеле с помощью tsqreduced = mahal(score,score)
, и затем возьмите различие: tsquared
- tsqreduced
.
Степени свободы, d, равны n – 1, если данные сосредоточены и n в противном случае, где:
n является количеством строк без любого NaN
s, если вы используете 'Rows','complete'
.
n является количеством строк без любого NaN
s в паре столбца, которая имеет максимальное количество строк без NaN
s, если вы используете 'Rows','pairwise'
.
Обратите внимание на то, что, когда переменные веса используются, матрица коэффициентов не ортонормирована. Предположим переменный вектор весов, который вы использовали, называется varwei
и содействующим вектором основного компонента, возвращенным pca
является wcoeff
. Можно затем вычислить ортонормированные коэффициенты с помощью преобразования diag(sqrt(varwei))*wcoeff
.
[1] Jolliffe, я. T. Анализ главных компонентов. 2-й редактор, Спрингер, 2002.
[2] Крзановский, W. J. Принципы многомерного анализа. Издательство Оксфордского университета, 1988.
[3] Seber, G. A. F. Многомерные наблюдения. Вайли, 1984.
[4] Джексон, J. E. A. Руководство пользователя к основным компонентам. Вайли, 1988.
[5] Roweis, S. “Алгоритмы EM для PCA и SPCA”. В Продолжениях 1 997 Конференций по Усовершенствованиям в Нейронных Системах обработки информации. Vol.10 (NIPS 1997), Кембридж, MA, США: Нажатие MIT, 1998, стр 626–632.
[6] Ilin, A. и Т. Райко. “Практические Подходы к Анализу главных компонентов в присутствии Отсутствующих значений”. Дж. Мах. Учиться. Res.. Издание 11, август 2010, стр 1957–2000.
Эта функция поддерживает длинные массивы для данных, которые не помещаются в память, с некоторыми ограничениями.
pca
работает непосредственно с длинными массивами путем вычисления ковариационной матрицы и использования функции 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)
Аргументы пары "имя-значение" не поддержаны.
Для получения дополнительной информации смотрите Длинные массивы (MATLAB).
Указания и ограничения по применению:
Когда 'Algorithm'
является 'als'
, значение 'Display'
для 'Options'
проигнорировано.
Если предоставлено, 'Weights'
и 'VariableWeights'
должны быть действительными.
Сгенерированный код всегда возвращает пятый вывод explained
как вектор-столбец.
Сгенерированный код всегда возвращает шестой вывод mu
как вектор - строку.
Если mu
пуст, pca
возвращает mu
как массив 1 на 0. pca
не преобразовывает mu
в пустой массив 0 на 0.
Сгенерированный код не обрабатывает входную матрицу X
, который имеет все значения NaN
как особый случай. Выходные размерности соразмерны с соответствующими конечными входными параметрами.
Чтобы сохранить память на устройстве, на котором вы развертываете сгенерированный код, можно разделить обучение (создающий компоненты PCA из входных данных) и прогноз (выполняющий преобразование PCA). Создайте компоненты PCA в MATLAB®. Затем задайте функцию точки входа, которая выполняет преобразование PCA с помощью коэффициентов основного компонента (coeff
) и оцененные средние значения (mu
), которые являются выходными параметрами pca
. Наконец, сгенерируйте код для функции точки входа. Для примера смотрите, Применяют PCA к Новым Данным и Генерируют Код C/C++.
Для получения дополнительной информации о генерации кода смотрите Введение в Генерацию кода и Общий Рабочий процесс Генерации кода.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.