수학적 모델링 알고리즘 및 응용 [주성분 분석]

주성분 분석의 목적: 데이터 압축, 데이터 해석, 데이터 차원 축소

주성분 분석이란 무엇입니까?

몇 가지 주요 구성요소를 통해 여러 변수 간의 내부 구조를 설명하는 방법을 연구합니다. 즉, 몇 가지 주성분은 원래 변수로부터 파생되어 원래 변수에 대한 정보를 최대한 유지하면서 서로 독립성을 가지게 되며, 사물이나 현상을 판단하기 위한 종합적인 지표를 찾고 분석하는데 자주
사용 됩니다 . 그 안에 담긴 종합적인 지표를 파악하고, 정보를 적절하게 해석합니다.

주성분 분석의 기본 아이디어

여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

  • 주성분 분석은 특정 상관관계가 있는 많은 원래 변수(예: p 변수)를 관련되지 않은 새로운 포괄적 변수 세트로 재결합하여 원래 변수를 대체하는 것입니다. 처리 방법 일반적인 수학적 처리는 원래의 p 변수를 새로운 포괄적 변수로 선형적으로 결합하는 것입니다.
  • 선택된 첫 번째 선형결합, 즉 첫 번째 종합변수가 F1으로 기록된다면, F1이 원래 변수의 정보를 최대한 많이 반영할 수 있기를 바라는 것은 당연하다.
  • 가장 고전적인 방법은 이를 분산으로 표현하는 것입니다. 즉, varF1)이 클수록 F1에 더 많은 정보가 포함됩니다. 따라서 모든 선형결합에서 선택된 F1은 가장 큰 분산을 가져야 하므로 이를 첫 번째 주성분(Principal Componentl)이라고 합니다.
  • 첫 번째 주성분이 원래 p 변수의 정보를 표현하기에 충분하지 않은 경우 두 번째 선형 조합인 F2를 선택하는 것을 고려하십시오. F2를 두 번째 주성분(principalcomComponent II)이라고 합니다. F1과 F2의 관계는 무엇입니까?
  • 원래 정보를 효과적으로 반영하기 위해 F1의 기존 정보는 더 이상 F2, 즉 cov (F1,F2)=0에 나타나지 않습니다. 유사하게 p개의 주성분을 얻을 수 있습니다. 따라서 이러한 주성분은 서로 상관관계가 없으며 순차적으로 분산이 감소합니다. 실제로는 처음 몇 개의 가장 큰 주성분을 선택하여 표현합니다. 기준?
  • 각 주성분의 누적 분산 기여율이 >85%이거나 특성근이 >1입니다.

주성분 분석의 수학적 모델

여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
KMO가 0.5를 초과하면 주성분 분석을 할 수 있고, KMO가 0.3~0.5이면 주성분 분석을 할 수 있으나 권장하지 않으며, 0.3 이하에서는 주성분 분석을 할 수 없다.
Sig 유의수준 검정이 0.05 미만이면 가능하고, 0.05보다 크면
두 개의 데이터 중 하나를 만족시킨 후 메인 프로그램 검정을 하는 것은 권장하지 않는다.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

주성분 분석 단계

  1. 수준과 차원에 대한 변수의 영향을 제거하기 위해 원래 p 지표를 표준화합니다.
  2. 표준화된 데이터 행렬을 기반으로 상관계수 행렬을 계산합니다.
  3. 공분산 행렬의 고유근과 고유벡터를 구합니다.
  4. 주성분을 결정하고, 각 주성분에 담긴 정보를 적절하게 설명하는
    부분으로, 책과 비교하면 이해하기 쉽습니다.

주성분 분석을 사용하여 투자 이점을 분석하고 순위를 매깁니다.
여기에 이미지 설명을 삽입하세요.
암호

clc,clear
gj=load('data14_7.txt');%获取数据
gj=zscore(gj); %数据标准化
r=corrcoef(gj);  %计算相关系数矩阵
%下面利用相关系数矩阵进行主成分分析,x的列为r的特征向量,即主成分的系数
[x,y,z]=pcacov(r) %y为r的特征值,z为各个主成分的贡献率
f=repmat(sign(sum(x)),size(x,1),1); %构造与x同维数的元素为±1的矩阵
x=x.*f %修改特征向量的正负号,每个特征向量乘以所有分量和的符号函数值
num=3;  %num为选取的主成分的个数
df=gj*x(:,[1:num]);  %计算各个主成分的得分
tf=df*z(1:num)/100; %计算综合得分
[stf,ind]=sort(tf,'descend');  %把得分按照从高到低的次序排列
stf=stf', ind=ind'

작업 결과
여기에 이미지 설명을 삽입하세요.

추천

출처blog.csdn.net/Luohuasheng_/article/details/128687758