이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

pca

원시 데이터에 대한 주성분 분석

구문

coeff = pca(X)
coeff = pca(X,Name,Value)
[coeff,score,latent] = pca(___)
[coeff,score,latent,tsquared] = pca(___)
[coeff,score,latent,tsquared,explained,mu] = pca(___)

설명

예제

coeff = pca(X)는 nxp 데이터 행렬 X에 대한 주성분 계수(적재값이라고도 함)를 반환합니다. X의 행은 관측값에 대응되고, 열은 변수에 대응됩니다. 계수 행렬은 pxp입니다. coeff의 각 열은 하나의 주성분에 대한 계수를 포함하고, 이러한 열들은 성분 분산을 기준으로 내림차순으로 정렬됩니다. 기본적으로, pca는 데이터를 중심화하고 특이값 분해(SVD) 알고리즘을 사용합니다.

예제

coeff = pca(X,Name,Value)는 하나 이상의 Name,Value 쌍 인수로 지정된, 특수 데이터형의 계산 및 처리와 관련한 추가 옵션을 사용하여 위에 열거된 구문에 포함된 출력 인수를 반환합니다.

예를 들어, pca에서 반환하는 주성분 개수를 지정하거나 SVD 이외의 알고리즘을 사용하도록 지정할 수 있습니다.

예제

[coeff,score,latent] = pca(___)score로 주성분 점수도 반환하고 latent로 주성분 분산도 반환합니다. 위에 열거된 구문의 모든 입력 인수와 사용할 수 있습니다.

주성분 점수는 주성분 공간에서 X의 표현입니다. score의 행은 관측값에 대응되고, 열은 성분에 대응됩니다.

주성분 분산은 X의 공분산 행렬의 고유값입니다.

예제

[coeff,score,latent,tsquared] = pca(___)X에 포함된 각 관측값에 대한 호텔링(Hotelling)의 T 제곱 통계량도 반환합니다.

예제

[coeff,score,latent,tsquared,explained,mu] = pca(___)는 각 주성분으로 설명된 총 분산의 백분율인 explainedX에 포함된 각 변수에 대한 추정된 평균인 mu도 반환합니다.

예제

모두 축소

표본 데이터 세트를 불러옵니다.

load hald

성분 데이터는 4개 변수에 대한 13개의 관측값을 가집니다.

성분 데이터에 대한 주성분을 구합니다.

 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의 행은 4개 성분 변수에 대한 계수를 포함하고, 열은 4개 주성분에 대응됩니다.

데이터 세트에 결측값이 있을 때의 주성분 계수를 구합니다.

표본 데이터 세트를 불러옵니다.

load imports-85

데이터 행렬 X는 3열 ~ 15열에 13개의 연속형 변수가 있습니다. 휠베이스, 길이, 너비, 높이, 전비 중량, 엔진 크기, 구경, 스트로크, 압축비, 마력, 피크 rpm, 시내 주행 거리, 고속도로 주행 거리가 이에 해당됩니다. 구경 변수와 스트로크 변수는 56행 ~59행에 네 개의 결측값이 있으며, 마력 변수와 피크 rpm 변수는 131행~132행에 두 개의 결측값이 있습니다.

주성분 분석을 수행합니다.

coeff = pca(X(:,3:15));

기본적으로, pca'Rows','complete' 이름-값 쌍의 인수로 지정된 동작을 수행합니다. 이 옵션은 계산을 수행하기 전에 NaN 값을 갖는 관측값을 제거합니다. NaN이 있는 행은 대응되는 위치, 즉 56행 ~59행, 131행 및 132행에서 scoretsquared에 다시 삽입됩니다.

'pairwise'를 사용하여 주성분 분석을 수행합니다.

coeff = pca(X(:,3:15),'Rows','pairwise');

이 경우, pcaX의 열 i 또는 j에서 NaN 값이 없는 행을 사용하여 공분산 행렬의 (i,j) 요소를 계산합니다. 참고로, 결과로 생성되는 공분산 행렬은 양의 정부호가 아닐 수 있습니다. 이 옵션은 pca가 사용하는 알고리즘이 고유값 분해인 경우에만 적용됩니다. 이 예제에서 볼 수 있듯이, 알고리즘을 지정하지 않으면 pca가 알고리즘을 'eig'로 설정합니다. 사용자가 'pairwise' 옵션과 함께 알고리즘으로 'svd'를 요구하면, 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

성분 데이터는 4개 변수에 대한 13개의 관측값을 가집니다.

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 알고리즘은 데이터에 포함된 결측값을 추정합니다.

결과를 비교하는 또 다른 방법은 계수 벡터에 의해 생성된(Span) 두 공간 사이의 각도를 구하는 것입니다. ALS를 사용하여 결측값이 있는 데이터에 대해 구한 계수와 전체 데이터에 대해 구한 계수 사이의 각도를 구합니다.

subspace(coeff,coeff1)
ans = 8.2686e-16

이 각도는 작은 값입니다. 이는 누락된 데이터가 없을 때 'Rows','complete' 이름-값 쌍의 인수와 함께 pca를 사용하는 경우 생성된 결과와 누락된 데이터가 있을 때 'algorithm','als' 이름-값 쌍의 인수와 함께 pca를 사용하는 경우 생성된 결과가 서로 근접하다는 것을 나타냅니다.

'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는 세 개의 주성분만 반환합니다. 공분산 행렬이 양의 준정부호가 아니고 pca가 오류 메시지를 반환하므로 'Rows','pairwise' 옵션을 사용할 수 없습니다.

목록별(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

성분 데이터는 4개 변수에 대한 13개의 관측값을 가집니다.

성분 데이터의 성분에 대한 주성분 계수, 점수, 분산을 구합니다.

[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차원 행렬도는 13개 관측값 각각에 대한 점도 포함하며, 이 점은 플롯에서 두 개 주성분에 대한 각 관측값의 점수를 나타내는 좌표를 가집니다. 예를 들어, 플롯의 왼쪽 가장자리 근처에 있는 점은 첫 번째 주성분에 대해 최소 점수를 가집니다. 점은 최대 점수 값과 최대 계수 길이에 대해 스케일링되므로, 플롯에서 점의 상대 위치만 확인할 수 있습니다.

호텔링(Hotelling)의 T 제곱 통계량 값을 구합니다.

표본 데이터 세트를 불러옵니다.

load hald

성분 데이터는 4개 변수에 대한 13개의 관측값을 가집니다.

주성분 분석을 수행하고 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);
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 제곱 값을 계산합니다.

감소된 공간의 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는 3열 ~ 15열에 13개의 연속형 변수가 있습니다. 휠베이스, 길이, 너비, 높이, 전비 중량, 엔진 크기, 구경, 스트로크, 압축비, 마력, 피크 rpm, 시내 주행 거리, 고속도로 주행 거리가 이에 해당됩니다.

이러한 변수의 주성분으로 설명되는 변동성 백분율을 구합니다.

[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));

입력 인수

모두 축소

주성분을 계산할 입력 데이터로, nxp 행렬로 지정됩니다. X의 행은 관측값에 대응되고 열은 변수에 대응됩니다.

데이터형: single | double

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정할 수 있습니다. 여기서 Name은 인수 이름이고 Value는 이에 대응하는 값입니다. Name은 따옴표로 묶어야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 원하는 순서로 지정할 수 있습니다.

예: 'Algorithm','eig','Centered',false,'Rows','all','NumComponents',3pca가 고유값 분해 알고리즘을 사용하고, 데이터를 중심화하지 않으며, 모든 관측값을 사용하고, 처음 세 개의 주성분만 반환하도록 지정합니다.

pca에서 주성분 분석을 수행하는 데 사용하는 주성분 알고리즘으로, 'Algorithm'과 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

설명
'svd'디폴트 값. X의 특이값 분해(SVD)입니다.
'eig'공분산 행렬에 대한 고유값 분해(EIG)입니다. EIG 알고리즘은 관측값 개수 n이 변수 개수 p를 초과할 경우 SVD보다 더 빠르지만, 공분산의 조건수가 X의 조건수의 제곱이기 때문에 덜 정확합니다.
'als'

교대최소제곱법(ALS) 알고리즘입니다. 이 알고리즘은 X를 nxk 좌측 인자 행렬 L과 pxk 우측 인자 행렬 R로 분해하여 최적의 랭크-k 근삿값을 구합니다(여기서 k는 주성분의 개수임). 행렬 분해는 임의의 초기값으로 시작하는 반복법을 사용합니다.

ALS는 결측값을 더 잘 처리하도록 설계되었습니다. 이 알고리즘은 쌍별(Pairwise) 삭제('Rows','pairwise')보다 선호되며 목록별(Listwise) 삭제('Rows','complete') 없이 결측값을 처리합니다. 이 알고리즘은 작은 비율의 결측값이 무작위로 분포하는 데이터 세트에서는 제대로 동작할 수 있지만, 희소 데이터 세트에서는 성능이 좋지 않을 수도 있습니다.

예: 'Algorithm','eig'

열을 중심화할지 여부를 나타내는 표시자로, 'Centered'와 함께 다음 논리식 중 하나가 쉼표로 구분되어 지정됩니다.

설명
true

디폴트 값. pca는 특이값 분해 또는 고유값 분해를 계산하기 전에 열 평균을 빼서 X를 중심화합니다. XNaN 결측값을 포함하는 경우, 사용 가능한 데이터로 평균을 구하기 위해 nanmean이 사용됩니다. score*coeff'를 사용하여 중심화된 데이터를 재구성할 수 있습니다.

false

이 경우 pca는 데이터를 중심화하지 않습니다. score*coeff'를 사용하여 원래 데이터를 재구성할 수 있습니다.

예: 'Centered',false

데이터형: logical

자유도 d가 변수 개수 p보다 작은 경우 효율적인 크기로 출력할지 여부를 나타내는 표시자로, 'Economy'와 함께 다음 논리식 중 하나가 쉼표로 구분되어 지정됩니다.

설명
true

디폴트 값. pcalatent의 처음 d개 요소와 coeffscore에서 이에 대응되는 열만 반환합니다.

이 옵션을 사용하면 변수 개수 p가 d보다 훨씬 큰 경우 속도가 크게 빨라질 수 있습니다.

false

pcalatent의 모든 요소를 반환합니다. latent의 0 요소에 대응되는 coeffscore의 열은 0입니다.

참고로, d < p이면 score(:,d+1:p)latent(d+1:p)는 반드시 0이며, coeff(:,d+1:p)의 열은 X에 직각인 방향을 정의합니다.

예: 'Economy',false

데이터형: logical

요청된 성분의 개수로, 'NumComponents'와 함께 0 < k ≤ p 조건을 충족하는 정수 스칼라 k 가 쉼표로 구분되어 지정됩니다. 여기서 p는 X에 포함된 원래 변수의 개수입니다. 지정된 경우 pcacoeffscore의 처음 k개 열을 반환합니다.

예: 'NumComponents',3

데이터형: single | double

데이터 행렬 XNaN 값에 대해 수행할 동작으로, 'Rows'와 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

설명
'complete'

디폴트 값. NaN 값을 포함하는 관측값이 계산 전에 제거됩니다. NaN이 있는 행은 scoretsquared의 해당 위치에 다시 삽입됩니다.

'pairwise'

이 옵션은 알고리즘이 'eig'인 경우에만 적용됩니다. 'pairwise'와 함께 알고리즘을 지정하지 않으면 pca가 알고리즘을 'eig'로 설정합니다. 옵션 'Rows','pairwise'와 함께 'svd'를 알고리즘으로 지정하면 pca가 경고 메시지를 반환하고, 알고리즘을 'eig'로 설정한 후 계속합니다.

'Rows','pairwise' 옵션을 지정하면 pcaX의 열 i 또는 j 내에 NaN 값이 없는 행을 사용하여 공분산 행렬의 (i,j) 요소를 계산합니다.

참고로, 결과로 생성되는 공분산 행렬은 양의 정부호가 아닐 수 있습니다. 이 경우, pca가 종료되고 오류 메시지가 표시됩니다.

'all'

X에는 결측값이 없어야 합니다. pca는 모든 데이터를 사용하며 NaN 값이 검색되면 종료됩니다.

예: 'Rows','pairwise'

관측값 가중치로, 'Weights'와 함께 모든 양의 요소를 포함하는 길이가 n인 벡터가 쉼표로 구분되어 지정됩니다.

데이터형: single | double

가변 가중치로, 'VariableWeights'와 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

설명

행 벡터

모든 양의 요소를 포함하는 길이가 p인 벡터입니다.

'variance'

가변 가중치는 표본 분산의 역입니다. 'Weights'를 사용하여 관측값에 가중치를 할당하는 경우에도 가변 가중치가 가중 표본 분산의 역이 됩니다.

동시에 'Centered'true로 설정되면 데이터 행렬 X가 중심화되고 표준화됩니다. 이 경우, pca는 상관 행렬을 기반으로 하여 주성분을 반환합니다.

예: 'VariableWeights','variance'

데이터형: single | double | char | string

계수 행렬 coeff의 초기값으로, 'Coeff0'과 함께 pxk 행렬이 쉼표로 구분되어 지정됩니다. 여기서 p는 변수 개수이고, k는 요청된 주성분의 개수입니다.

참고

'algorithm''als'인 경우에만 이 이름-값 쌍을 사용할 수 있습니다.

데이터형: single | double

점수 행렬 score의 초기값으로, 'Score0'과 함께 nxk 행렬이 쉼표로 구분되어 지정됩니다. 여기서 n은 관측값 개수이고, k는 요청된 주성분의 개수입니다.

참고

'algorithm''als'인 경우에만 이 이름-값 쌍을 사용할 수 있습니다.

데이터형: single | double

반복에 사용할 옵션으로, 'Options'와 함께 statset 함수가 쉼표로 구분되어 지정됩니다. pca는 options 구조체에 지정되는 다음 필드를 사용합니다.

필드 이름설명
'Display'표시 출력 수준입니다. 선택 항목은 'off', 'final', 'iter'입니다.
'MaxIter'허용되는 최대 스텝 수입니다. 디폴트 값은 1000입니다. 최적화 설정과 달리, MaxIter 값에 도달하면 수렴으로 간주됩니다.
'TolFun'비용 함수에 대한 종료 허용오차를 제공하는 양수입니다. 디폴트 값은 1e-6입니다.
'TolX'ALS 알고리즘에서 좌측 인자 행렬 L과 우측 인자 행렬 R에 포함된 요소들의 상대적인 변경에 대한 수렴 분계점을 제공하는 양수입니다. 디폴트 값은 1e-6입니다.

참고

'algorithm''als'인 경우에만 이 이름-값 쌍을 사용할 수 있습니다.

이러한 필드의 값을 변경하고, 'Options' 이름-값 쌍의 인수를 사용하여 pca에 새 구조체를 지정할 수 있습니다.

예: opt = statset('pca'); opt.MaxIter = 2000; coeff = pca(X,'Options',opt);

데이터형: struct

출력 인수

모두 축소

주성분 계수로, pxp 행렬로 반환됩니다. coeff의 열은 각각 하나의 주성분에 대한 계수를 포함합니다. 열은 성분 분산 latent을 기준으로 내림차순으로 정렬됩니다.

주성분 점수로, 행렬로 반환됩니다. score의 행은 관측값에 대응되고, 열은 성분에 대응됩니다.

X의 공분산 행렬의 고유값인 주성분 분산으로, 열 벡터로 반환됩니다.

각 관측값에 대한 표준화된 점수의 제곱 합인 호텔링(Hotelling)의 T 제곱 통계량으로, 열 벡터로 반환됩니다.

각 주성분으로 설명된 총 분산의 백분율로, 열 벡터로 반환됩니다.

X의 변수에 대한 추정된 평균으로, Centeredtrue로 설정된 경우 행 벡터로 반환됩니다. Centeredfalse인 경우 소프트웨어가 평균을 계산하지 않고 0으로 구성된 벡터를 반환합니다.

세부 정보

모두 축소

호텔링(Hotelling)의 T 제곱 통계량

호텔링의 T 제곱 통계량은 데이터 세트의 중심에서 각 관측값까지의 다변량 거리에 대한 통계적 측정값입니다.

변수 개수보다 적은 수의 성분을 요청하는 경우에도 pca는 모든 주성분을 사용하여 T 제곱 통계량을 계산합니다(전체 공간에서 계산함). 감소된 공간이나 삭제된 공간에서 T 제곱 통계량을 구하려는 경우 다음 중 하나를 수행하십시오.

  • 감소된 공간에서 T 제곱 통계량을 구하려면 mahal(score,score)를 사용하십시오.

  • 삭제된 공간에서 T 제곱 통계량을 구하려면 먼저 [coeff,score,latent,tsquared] = pca(X,'NumComponents',k,...)를 사용하여 T 제곱 통계량을 계산하고, tsqreduced = mahal(score,score)를 사용하여 감소된 공간에서 T 제곱 통계량을 계산한 후 차이(tsquared - tsqreduced)를 구하십시오.

자유도

데이터가 중심화된 경우 자유도 d는 n – 1과 같습니다. 그렇지 않은 경우 n입니다. 여기서 다음 사항이 적용됩니다.

  • 'Rows','complete'를 사용하는 경우 n은 NaN이 없는 행 개수입니다.

  • 'Rows','pairwise'를 사용하는 경우 n은 NaN이 없는 행을 가장 많이 갖는 열 쌍에서 NaN이 없는 행 개수입니다.

가변 가중치

참고로, 가변 가중치가 사용되는 경우 계수 행렬이 정규 직교가 아닙니다. 사용한 가변 가중치 벡터를 varwei라고 하고, pca가 반환한 주성분 계수 벡터를 wcoeff라고 가정합시다. 그러면 변환 diag(sqrt(varwei))*wcoeff를 사용하여 정규 직교 계수를 계산할 수 있습니다.

참고 문헌

[1] Jolliffe, I. T. Principal Component Analysis. 2nd ed., Springer, 2002.

[2] Krzanowski, W. J. Principles of Multivariate Analysis. Oxford University Press, 1988.

[3] Seber, G. A. F. Multivariate Observations. Wiley, 1984.

[4] Jackson, J. E. A. User's Guide to Principal Components. Wiley, 1988.

[5] Roweis, S. “EM Algorithms for PCA and SPCA.” In Proceedings of the 1997 Conference on Advances in Neural Information Processing Systems. Vol.10 (NIPS 1997), Cambridge, MA, USA: MIT Press, 1998, pp. 626–632.

[6] Ilin, A., and T. Raiko. “Practical Approaches to Principal Component Analysis in the Presence of Missing Values.” J. Mach. Learn. Res.. Vol. 11, August 2010, pp. 1957–2000.

확장 기능

R2012b에 개발됨