Анализ основных компонентов необработанных данных
возвращает коэффициенты главной компоненты, также известные как нагрузки, для матрицы данных 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: колесная база, длина, ширина, высота, бордюрный вес, размер двигателя, диаметр, ход, степень сжатия, лошадиная сила, пик-об/мин, город-мпг и шоссе-мпг. У переменных канала и хода отсутствуют четыре значения в рядах 56-59, а у переменных лошадиная сила и пиковая скорость вращения отсутствуют два значения в рядах 131 и 132.
Выполните анализ основного компонента.
coeff = pca(X(:,3:15));
По умолчанию pca выполняет действие, указанное 'Rows','complete' аргумент пары имя-значение. Эта опция удаляет наблюдения с помощью NaN значения перед расчетом. Ряды NaNs повторно вставляются в score и tsquared в соответствующих местах, а именно в рядах 56-59, 131 и 132.
Использовать 'pairwise' для выполнения анализа главного компонента.
coeff = pca(X(:,3:15),'Rows','pairwise');
В этом случае pca вычисляет (i, j) элемент ковариационной матрицы, используя строки без NaN значения в столбцах i или j X. Обратите внимание, что результирующая ковариационная матрица может не быть положительной определенной. Эта опция применяется, когда алгоритм pca использует разложение собственных значений. Если алгоритм не указан, как в этом примере, pca устанавливает для него значение 'eig'. Если требуется 'svd' в качестве алгоритма, с 'pairwise' вариант, затем pca возвращает предупреждающее сообщение, устанавливает алгоритм на 'eig' и продолжается.
Если вы используете 'Rows','all' аргумент пары имя-значение, pca завершается, поскольку этот параметр предполагает отсутствие отсутствующих значений в наборе данных.
coeff = pca(X(:,3:15),'Rows','all');
Error using pca (line 180) Raw data contains NaN missing value while 'Rows' option is set to 'all'. Consider using 'complete' or pairwise' option instead.
Используйте отклонения обратной переменной в качестве весов при выполнении анализа основных компонентов.
Загрузите набор данных образца.
load haldВыполните анализ основного компонента, используя обратную дисперсию ингредиентов в качестве переменных весов.
[wcoeff,~,latent,~,explained] = pca(ingredients,... 'VariableWeights','variance')
wcoeff = 4×4
-2.7998 2.9940 -3.9736 1.4180
-8.7743 -6.4411 4.8927 9.9863
2.5240 -3.8749 -4.0845 1.7196
9.1714 7.5529 3.2710 11.3273
latent = 4×1
2.2357
1.5761
0.1866
0.0016
explained = 4×1
55.8926
39.4017
4.6652
0.0406
Обратите внимание, что матрица коэффициентов, wcoeff, не является ортонормированным.
Вычислите матрицу ортонормированных коэффициентов.
coefforth = inv(diag(std(ingredients)))* wcoeff
coefforth = 4×4
-0.4760 0.5090 -0.6755 0.2411
-0.5639 -0.4139 0.3144 0.6418
0.3941 -0.6050 -0.6377 0.2685
0.5479 0.4512 0.1954 0.6767
Проверьте ортонормативность новой матрицы коэффициентов, coefforth.
coefforth*coefforth'
ans = 4×4
1.0000 0.0000 -0.0000 0.0000
0.0000 1.0000 -0.0000 -0.0000
-0.0000 -0.0000 1.0000 0.0000
0.0000 -0.0000 0.0000 1.0000
Если в данных отсутствуют значения, найдите основные компоненты с помощью алгоритма наименьших квадратов (ALS).
Загрузите образцы данных.
load haldДанные ингредиентов имеют 13 наблюдений для 4 переменных.
Выполните анализ основных компонентов с использованием алгоритма ALS и просмотрите коэффициенты компонентов.
[coeff,score,latent,tsquared,explained] = pca(ingredients); coeff
coeff = 4×4
-0.0678 -0.6460 0.5673 0.5062
-0.6785 -0.0200 -0.5440 0.4933
0.0290 0.7553 0.4036 0.5156
0.7309 -0.1085 -0.4684 0.4844
Ввести отсутствующие значения случайным образом.
y = ingredients; rng('default'); % for reproducibility ix = random('unif',0,1,size(y))<0.30; y(ix) = NaN
y = 13×4
7 26 6 NaN
1 29 15 52
NaN NaN 8 20
11 31 NaN 47
7 52 6 33
NaN 55 NaN NaN
NaN 71 NaN 6
1 31 NaN 44
2 NaN NaN 22
21 47 4 26
⋮
Приблизительно 30% данных имеют пропущенные значения, указанные NaN.
Выполните анализ основных компонентов с использованием алгоритма ALS и просмотрите коэффициенты компонентов.
[coeff1,score1,latent,tsquared,explained,mu1] = pca(y,... 'algorithm','als'); coeff1
coeff1 = 4×4
-0.0362 0.8215 -0.5252 0.2190
-0.6831 -0.0998 0.1828 0.6999
0.0169 0.5575 0.8215 -0.1185
0.7292 -0.0657 0.1261 0.6694
Отображение расчетного среднего значения.
mu1
mu1 = 1×4
8.9956 47.9088 9.0451 28.5515
Реконструируйте наблюдаемые данные.
t = score1*coeff1' + repmat(mu1,13,1)
t = 13×4
7.0000 26.0000 6.0000 51.5250
1.0000 29.0000 15.0000 52.0000
10.7819 53.0230 8.0000 20.0000
11.0000 31.0000 13.5500 47.0000
7.0000 52.0000 6.0000 33.0000
10.4818 55.0000 7.8328 17.9362
3.0982 71.0000 11.9491 6.0000
1.0000 31.0000 -0.5161 44.0000
2.0000 53.7914 5.7710 22.0000
21.0000 47.0000 4.0000 26.0000
⋮
Алгоритм ALS оценивает недостающие значения в данных.
Другим способом сравнения результатов является поиск угла между двумя пространствами, охватываемыми векторами коэффициентов. Найдите угол между коэффициентами, найденными для полных данных, и данными с отсутствующими значениями с помощью ALS.
subspace(coeff,coeff1)
ans = 9.1336e-16
Это небольшое значение. Это означает, что результаты при использовании pca с 'Rows','complete' аргумент пары «имя-значение» при отсутствии отсутствующих данных и при использовании pca с 'algorithm','als' аргумент пары имя-значение, если отсутствуют данные, близки друг к другу.
Выполнить анализ основного компонента с помощью 'Rows','complete' аргумент пары имя-значение и отображение коэффициентов компонента.
[coeff2,score2,latent,tsquared,explained,mu2] = pca(y,... 'Rows','complete'); coeff2
coeff2 = 4×3
-0.2054 0.8587 0.0492
-0.6694 -0.3720 0.5510
0.1474 -0.3513 -0.5187
0.6986 -0.0298 0.6518
В этом случае pca удаляет строки с отсутствующими значениями и y имеет только четыре строки без отсутствующих значений. pca возвращает только три главных компонента. Вы не можете использовать 'Rows','pairwise' опция, поскольку ковариационная матрица не является положительной полуопределенной и pca возвращает сообщение об ошибке.
Найдите угол между коэффициентами, найденными для полных данных, и данными с отсутствующими значениями с помощью удаления списка (когда 'Rows','complete').
subspace(coeff(:,1:3),coeff2)
ans = 0.3576
Угол между двумя промежутками существенно больше. Это указывает на то, что эти два результата различны.
Отображение расчетного среднего значения.
mu2
mu2 = 1×4
7.8889 46.9091 9.8750 29.6000
В этом случае среднее является только выборочным средним y.
Реконструируйте наблюдаемые данные.
score2*coeff2'
ans = 13×4
NaN NaN NaN NaN
-7.5162 -18.3545 4.0968 22.0056
NaN NaN NaN NaN
NaN NaN NaN NaN
-0.5644 5.3213 -3.3432 3.6040
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
12.8315 -0.1076 -6.3333 -3.7758
⋮
Это показывает, что удаление строк, содержащих NaN значения работают не так хорошо, как алгоритм ALS. Использование ALS лучше, если в данных слишком много отсутствующих значений.
Найдите коэффициенты, оценки и отклонения главных компонентов.
Загрузите набор данных образца.
load haldДанные ингредиентов имеют 13 наблюдений для 4 переменных.
Найдите коэффициенты основного компонента, оценки и отклонения компонентов для данных ингредиентов.
[coeff,score,latent] = pca(ingredients)
coeff = 4×4
-0.0678 -0.6460 0.5673 0.5062
-0.6785 -0.0200 -0.5440 0.4933
0.0290 0.7553 0.4036 0.5156
0.7309 -0.1085 -0.4684 0.4844
score = 13×4
36.8218 -6.8709 -4.5909 0.3967
29.6073 4.6109 -2.2476 -0.3958
-12.9818 -4.2049 0.9022 -1.1261
23.7147 -6.6341 1.8547 -0.3786
-0.5532 -4.4617 -6.0874 0.1424
-10.8125 -3.6466 0.9130 -0.1350
-32.5882 8.9798 -1.6063 0.0818
22.6064 10.7259 3.2365 0.3243
-9.2626 8.9854 -0.0169 -0.5437
-3.2840 -14.1573 7.0465 0.3405
⋮
latent = 4×1
517.7969
67.4964
12.4054
0.2372
Каждый столбец score соответствует одному основному компоненту. Вектор, latentхранит отклонения четырех основных компонентов.
Реконструируйте данные по центрированным ингредиентам.
Xcentered = score*coeff'
Xcentered = 13×4
-0.4615 -22.1538 -5.7692 30.0000
-6.4615 -19.1538 3.2308 22.0000
3.5385 7.8462 -3.7692 -10.0000
3.5385 -17.1538 -3.7692 17.0000
-0.4615 3.8462 -5.7692 3.0000
3.5385 6.8462 -2.7692 -8.0000
-4.4615 22.8462 5.2308 -24.0000
-6.4615 -17.1538 10.2308 14.0000
-5.4615 5.8462 6.2308 -8.0000
13.5385 -1.1538 -7.7692 -4.0000
⋮
Новые данные в Xcentered - исходные данные ингредиентов, центрированные путем вычитания средства столбца из соответствующих столбцов.
Визуализируйте как ортонормированные коэффициенты главной компоненты для каждой переменной, так и оценки главной компоненты для каждого наблюдения на одном графике.
biplot(coeff(:,1:2),'scores',score(:,1:2),'varlabels',{'v_1','v_2','v_3','v_4'});

Все четыре переменные представлены в этом биплоте вектором, и направление и длина вектора указывают, как каждая переменная вносит вклад в два главных компонента на графике. Например, первый главный компонент, который находится на горизонтальной оси, имеет положительные коэффициенты для третьей и четвертой переменных. Поэтому векторы и направлены в правую половину графика. Наибольший коэффициент в первом главном компоненте является четвертым, соответствующим переменной .
Второй главный компонент, находящийся на вертикальной оси, имеет отрицательные коэффициенты для переменных , и и положительный коэффициент для переменной .
Этот 2-D биплот также включает точку для каждого из 13 наблюдений с координатами, указывающими оценку каждого наблюдения для двух главных компонентов на графике. Например, точки вблизи левого края графика имеют самые низкие оценки для первого главного компонента. Точки масштабируются относительно максимального значения оценки и максимальной длины коэффициента, так что из графика можно определить только их относительные местоположения.
Найдите статистические значения T-квадрата Hotelling.
Загрузите набор данных образца.
load haldДанные ингредиентов имеют 13 наблюдений для 4 переменных.
Выполните анализ главного компонента и запросите значения T-квадрата.
[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-квадратные значения в уменьшенном пространстве запрашиваемых главных компонентов.
[coeff,score,latent,tsquared] = pca(ingredients,'NumComponents',2);
tsquaredtsquared = 13×1
5.6803
3.0758
6.0002
2.6198
3.3681
0.5668
3.4818
3.9794
2.6086
7.4818
⋮
Обратите внимание, что даже при указании уменьшенного пространства компонента pca вычисляет значения T-квадрата в полном пространстве, используя все четыре компонента.
Значение 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: колесная база, длина, ширина, высота, бордюрный вес, размер двигателя, диаметр, ход, степень сжатия, лошадиная сила, пик-об/мин, город-мпг и шоссе-мпг.
Найдите процент изменчивости, объясняемый основными компонентами этих переменных.
[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-квадрата, укажите
[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) и информация РСА (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). Поскольку C и C++ являются статически типизированными языками, необходимо определить свойства всех переменных в функции точки входа во время компиляции. Чтобы указать тип данных и точный размер входного массива, передайте выражение MATLAB ®, которое представляет набор значений с определенным типом данных и размером массива, используя -args вариант. Если количество наблюдений неизвестно во время компиляции, можно также указать входные данные как переменные размеры, используя coder.typeof (Кодер MATLAB). Дополнительные сведения см. в разделе Определение аргументов переменного размера для создания кода.
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 функция возвращает те же оценки.
Дополнительные сведения о создании кода см. в разделе Введение в генерацию кода и приложение для учащихся-классификаторов. В последнем описывается, как выполнять 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 < 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-на-k, где p - количество переменных, а k - количество запрашиваемых главных компонентов.
Примечание
Эту пару «имя-значение» можно использовать только в том случае, если 'algorithm' является 'als'.
Типы данных: single | double
'Score0' - Начальное значение для балловНачальное значение для матрицы баллов score, указанная как пара, разделенная запятыми, состоящая из 'Score0' и матрицу n-на-k, где n - количество наблюдений, а k - количество запрашиваемых главных компонентов.
Примечание
Эту пару «имя-значение» можно использовать только в том случае, если 'algorithm' является 'als'.
Типы данных: single | double
'Options' - Опции для итерацийОпции итераций, заданные как пара, разделенная запятыми, состоящая из '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-квадрат статистики HotellingT-Squared Statistic Хотеллинга, которая является суммой квадратов стандартизированных баллов для каждого наблюдения, возвращалась в виде вектора-столбца.
explained - Пояснение в отношении процентной доли общей разницыПроцент общей дисперсии, объясняемой каждым основным компонентом, возвращаемый в виде вектора столбца.
T-квадратичная статистика Хотеллинга является статистической мерой многомерного расстояния каждого наблюдения от центра набора данных.
Даже при запросе меньшего количества компонентов, чем число переменных, pca использует все главные компоненты для вычисления T-квадрата статистики (вычисляет его в полном пространстве). Если требуется T-квадрат статистики в уменьшенном или отброшенном пространстве, выполните одно из следующих действий.
Для T-квадратичной статистики в уменьшенном пространстве используйте mahal(score,score).
Для T-квадратичной статистики в отброшенном пространстве сначала вычислите T-квадратичную статистику, используя [coeff,score,latent,tsquared] = pca(X,'NumComponents',k,...), вычислить T-квадрат статистики в уменьшенном пространстве, используя tsqreduced = mahal(score,score), а затем взять разницу: tsquared - tsqreduced.
Степени свободы d равны n-1, если данные центрированы, а в противном случае n, где:
n - число строк без NaNs, если вы используете 'Rows','complete'.
n - число строк без NaNs в паре столбцов, которая имеет максимальное количество строк без NaNs, если вы используете 'Rows','pairwise'.
Следует отметить, что при использовании переменных весов матрица коэффициентов не является ортонормированной. Предположим, что используемый вектор переменных весов называется varweiи вектор коэффициентов главной компоненты pca возвращено значение wcoeff. Затем можно вычислить ортонормированные коэффициенты с помощью преобразования diag(sqrt(varwei))*wcoeff.
pca функция накладывает условное обозначение знака, заставляя элемент с наибольшей величиной в каждом столбце coefs быть позитивным. Изменение знака вектора коэффициентов не меняет его значения.
[1] Джоллифф, И. Т. Анализ основных компонентов. 2-е изд., Спрингер, 2002.
[2] Кржановский, В. Дж. Принципы многомерного анализа. Издательство Оксфордского университета, 1988 год.
[3] Себер, Г. А. Ф. Многомерные наблюдения. Уайли, 1984.
[4] Джексон, Дж. Э. А. Руководство пользователя по основным компонентам. Уайли, 1988.
[5] Roweis, S. «Алгоритмы EM для PCA и SPCA». В материалах Конференции 1997 года по достижениям в области нейронных систем обработки информации. Vol.10 (NIPS 1997), Кембридж, Массачусетс, США: MIT Press, 1998, стр. 626-632.
[6] Илин, А. и Т. Райко. «Практические подходы к анализу основных компонентов при наличии отсутствующих значений». Дж. Мач. Рес.. Т. 11, август 2010, с. 1957-2000.
Эта функция поддерживает массивы tall для данных из памяти с некоторыми ограничениями.
pca работает непосредственно с массивами tall, вычисляя ковариационную матрицу и используя память в памяти 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)
Аргументы пары имя-значение не поддерживаются.
Дополнительные сведения см. в разделе Tall Arrays for Out-of-Memory Data.
Примечания и ограничения по использованию:
Когда 'Algorithm' является 'als', 'Display' значение для 'Options' игнорируется.
Значения для 'Weights' и 'VariableWeights' аргументы пары имя-значение должны быть действительными.
Значение для 'Economy' аргумент пары имя-значение должен быть константой времени компиляции. Например, для использования 'Economy',false аргумент пары имя-значение в сгенерированном коде, включить {coder.Constant('Economy'),coder.Constant(false)} в -args значение codegen (Кодер MATLAB).
Имена в аргументах пары имя-значение должны быть константами времени компиляции.
Сгенерированный код всегда возвращает пятый выход 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 редко бывает быстрее при выполнении на GPU вместо CPU. Укажите аргумент имя-значение 'Algorithm' как 'eig' для ускорения вычислений на GPU.
Дополнительные сведения см. в разделе Запуск функций MATLAB на графическом процессоре (панель инструментов параллельных вычислений).
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.