PCA 주성분 분석 및 인자 분석 노트수학 모델링 시리즈
22118 단어 수학 모범
이곳의 주성분 분석과 인자 분석은 두 가지 차원을 낮추는 방법이다.
언제 비트를 내려야 합니까?
한 견본에 집중된 견본을 정렬해야 할 때 여러 차원에서 이 견본들을 평가할 수 있으나 차원이 너무 많으면 변하지 않기 때문에 우리는 더욱 적은 차원으로 평가하고 평가의 정확도 손실을 최대한 줄일 수 있기를 바란다.
주성분 분석은 간단하게 말하면 평가 결과에 대한 기여도가 비교적 높은 몇 가지 차원을 직접 선택하거나 평가 결과에 대한 기여도가 비교적 낮은 몇 가지 차원을 직접 제거하는 것이다.(공식 참고) 인자분석은 이미 알고 있는 모든 차원을 바탕으로 수량이 더 적은 새로운 차원을 창조하여 평가하는 것이다.먼저 원시적인 한 그룹의 차원에 대해 관련성 분석을 하고 관련성이 높고 보존 관련성이 낮은 것을 합병한다.또는 원 차원 그룹을 대표할 수 있는 새로운 차원을 찾아내고 새로운 차원 그룹이 포함하지 않은 특색 부분을 보존할 수 있다.(방정식 참조)
1. 주성분 분석(PCA):
1) in R
데이터 요구: m∗n(표두 제외)의 행렬, 샘플 집합 크기는 m, 속성 개수는 n;또는 m개의 평가 목표가 있고 평가 인자 개수는 n이다.각 열의 헤더는 인자/속성 이름이고 각 줄의 헤더는 하나의 목표/샘플이 집중된 샘플이며 각 줄의 내용은 각 인자가 이 목표(의 어떤 평가)에 대한 기여값/이 샘플의 각 속성 값이다.
## ##
industryData .csv("*C:\\Users\\lenovo\\Desktop\\1.csv*", header = TRUE, sep = ",")
X 1]
## 、 ##
industry.cor X)
industry.cor
industry.eig .cor)
industry.eig
## ##
industry.pr X, cor = TRUE)
summary(industry.pr, loadings = TRUE)
## ##
screeplot(industry.pr, type = "lines") #
biplot(industry.pr, choices = 1:2) # 1 2
## ##
field = as.character(industryData[, 1]) #
result = cbind(field, as.data.frame(scale(X))) #
numOfCharacter 3 #
industry.predict .pr) #
result = cbind(result, industry.predict[,1:numOfCharacter]) #
## ##
varProportion in 1:length(varProportion))
{
varProportion[i] .eig$values[i]/sum(industry.eig$values);
}
## ##
totalScore .predict))
for (i in 1:length(totalScore))
{
for (j in 1:length(varProportion))
{
totalScore[i] = totalScore[i] + varProportion[j] * industry.predict[i, j];
}
}
result = cbind(result, totalScore) #
## ##
library(plyr)
resultDescent = arrange(result, desc(totalScore))
output .character(resultDescent$field), as.data.frame.numeric(resultDescent$totalScore))
names(output) "field", "total score")
output
2) in matlab
데이터 요구: m∗n(표두 제외)의 행렬, 샘플집 크기는 n, 속성 개수는 m;또는 n개의 평가 목표가 있고 평가 인자 개수는 m이다.
%
x=xlsread(‘*data*’);
%
sd=std(x);
%
n=size(x,1);
jj=ones(n,1);
jj=jj*sd;
x=x./jj;
% x
[t,score,r]=princomp(x);
%% 2
%% 1
x=score(:,1:2);% ( )
idx=kmeans(x,5);% k-means ( 5 )
%
str=num2str([1:n]');
figure(1),clf
plot(x(:,1),x(:,2),'o')
text(x(:,1),x(:,2)+.5,str,'fontsize',12)
hold on
for i=1:n
if idx(i)==1
plot(x(i,1),x(i,2),'o','markerfacecolor','b')
elseif idx(i)==2
plot(x(i,1),x(i,2),'o','markerfacecolor','g')
elseif idx(i)==3
plot(x(i,1),x(i,2),'o','markerfacecolor','c')
elseif idx(i)==4
plot(x(i,1),x(i,2),'o','markerfacecolor','r')
else
plot(x(i,1),x(i,2),'o','markerfacecolor','m')
end
end
%% 2
x=score(:,1:3);% ( )
x(:,3)=x(:,3)-min(x(:,3));
idx=kmeans(x,4);
% (3D)
str=num2str([1:n]');
figure(1),clf
plot3(x(:,1),x(:,2),x(:,3),'o')
stem3(x(:,1),x(:,2),x(:,3))
text(x(:,1),x(:,2),x(:,3)+.5,str,'fontsize',12)
hold on
for i=1:n
if idx(i)==1
plot3(x(i,1),x(i,2),x(i,3),'o','markerfacecolor','b')
elseif idx(i)==2
plot3(x(i,1),x(i,2),x(i,3),'o','markerfacecolor','g')
elseif idx(i)==3
plot3(x(i,1),x(i,2),x(i,3),'o','markerfacecolor','c')
else
plot3(x(i,1),x(i,2),x(i,3),'o','markerfacecolor','m')
end
end
xlabel('PC1'),ylabel('PC2'),zlabel('PC3')
2. 인자 분석:
1) in R
## ##
economicData read.csv("C:\\Users\\lenovo\\Desktop\\6.csv", header = TRUE, sep = ",")
X 1]
## ##
economic.cor ## , ##
library(psych)
scree(X)
## ##
numOfFactor 2
fa.varimax "varimax", fm = "pa", scores = T)
fa.varimax
## ##
field = as.character(economicData[, 1])
#
result = cbind(field, as.data.frame(scale(X)))
# , 1 ,
## ##
weight #
weight
for (k in 1:ncol(weight))
{
totalScore for (i in 1:nrow(X))
{
for (j in 1:ncol(X))
{
totalScore[i] = totalScore[i] + weight[j, k] * result[i, j+1];
}
}
result = cbind(result, totalScore);
colnames(result)[1+ncol(X)+k] "y", as.character(k), sep = "");
}
## ##
library(plyr)
output = cbind(result$field, result$y1) #y1
output = as.data.frame(output)
colnames(output) "field", "y1") #field , y1
output = arrange(output, desc(y1)) #y1
output
2) in matlab
%%
%% PHO
PHO = [1 0.79 0.36 0.76 0.25 0.51
0.79 1 0.31 0.55 0.17 0.35
0.36 0.31 1 0.35 0.64 0.58
0.76 0.55 0.35 1 0.16 0.38
0.25 0.17 0.64 0.16 1 0.63
0.51 0.35 0.58 0.38 0.63 1
];
%% factoran
%% , , 2, 0,
[lambda,psi,T] = factoran(PHO,2,'xtype','covariance','delta',0,'rotate','none')
% ,
%
head = {' ', ' f1', ' f2'};
%
varname = {' ',' ',' ',' ',' ',' ','',''}';
Contribut = 100*sum(lambda.^2)/6; % ,
CumCont = cumsum(Contribut); %
% , ,
result1 = num2cell([lambda; Contribut; CumCont]);
% ,
result1 = [head; varname, result1]
%% , , 2, 0,
% ( )
[lambda,psi,T] =factoran(PHO,2,'xtype','covariance','delta',0)
Contribut = 100*sum(lambda.^2)/6 % ,
CumCont = cumsum(Contribut) %
%% , , 3, 0,
% ( )
[lambda,psi,T] = factoran(PHO,3,'xtype','covariance','delta',0)
Contribut = 100*sum(lambda.^2)/6 % ,
CumCont = cumsum(Contribut) %
결과 1
lambda =
1.0000 -0.0000
0.7900 -0.0292
0.3600 0.6574
0.7600 0.0004
0.2500 0.8354
0.5100 0.6026
psi =
0.0000
0.3750
0.4382
0.4223
0.2396
0.3768
T =
1 0
0 1
result1 =
' ' ' f1' ' f2'
' ' [ 1.0000] [-2.1042e-06]
' ' [ 0.7900] [ -0.0292]
' ' [ 0.3600] [ 0.6574]
' ' [ 0.7600] [ 3.6695e-04]
' ' [ 0.2500] [ 0.8354]
' ' [ 0.5100] [ 0.6026]
'' [44.2317] [ 24.8999]
'' [44.2317] [ 69.1316]
결과 2
lambda =
0.9731 0.2304
0.7755 0.1536
0.1989 0.7226
0.7395 0.1755
0.0508 0.8705
0.3574 0.7039
psi =
0.0000
0.3750
0.4382
0.4223
0.2396
0.3768
T =
0.9731 0.2304
-0.2304 0.9731
Contribut =
37.7496 31.3820
CumCont =
37.7496 69.1316
결과 3
lambda =
0.2288 0.9151 0.3320
0.1546 0.7554 0.1909
0.7240 0.1431 0.1909
0.1614 0.4768 0.8638
0.8740 0.0584 -0.0103
0.7010 0.3376 0.1226
psi =
0.0000
0.3690
0.4188
0.0005
0.2325
0.3795
T =
0.2288 0.9151 0.3320
0.9733 -0.2217 -0.0594
-0.0192 -0.3367 0.9414
Contribut =
31.3629 29.5540 15.7400
CumCont =
31.3629 60.9169 76.6569
Reference
R부분: 여지 작성 matlab 부분 정리:http://www.ilovematlab.cn/thread-203081-1-1.html http://www.mianfeiwendang.com/doc/a750344524f07a2148591755
본문은 하문대학 여지대비대에서 편찬하였다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
수학 모델링 처리 데이터텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.