Анализ главных компонентов необработанных данных
возвращает коэффициенты основного компонента, также известные как загрузки, для 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
возвращает сообщение об ошибке.
Найдите угол между коэффициентами найденным для полных данных и данных с отсутствующими значениями с помощью 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%-ю изменчивость.
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++ требует MATLAB® Coder™.
Сохраните модель классификации в файл 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
возвращает логическую единицу (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
Типы данных: логический
'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
'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-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
.
pca
функция налагает соглашение знака, обеспечивая элемент с самой большой величиной в каждом столбце coefs
быть положительным. Изменение знака вектора коэффициентов не изменяет свое значение.
[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)
Аргументы пары "имя-значение" не поддерживаются.
Для получения дополнительной информации смотрите Длинные массивы для Данных, которые не помещаются в память.
Указания и ограничения по применению:
Когда 'Algorithm'
'als'
, 'Display'
значение для 'Options'
проигнорирован.
Значения для 'Weights'
и 'VariableWeights'
аргументы пары "имя-значение" должны быть действительными.
Значение для 'Economy'
аргументом пары "имя-значение" должно быть постоянное время компиляции. Например, чтобы использовать 'Economy',false
аргумент пары "имя-значение" в сгенерированном коде, включайте {coder.Constant('Economy'),coder.Constant(false)}
в -args
значение codegen
(MATLAB Coder).
Имена в аргументах пары "имя-значение" должны быть константами времени компиляции.
Сгенерированный код всегда возвращает пятый выход explained
как вектор-столбец.
Сгенерированный код всегда возвращает шестой выход mu
как вектор-строка.
Если mu
isempty, 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.