文章目錄
介紹
本篇分別有主成分分析,層次分析,聚類分析,因子分析的簡(jiǎn)單介紹以及在MATLAB(2018a)上使用的簡(jiǎn)單介紹 ( 附源碼 )
主成分分析
主成分分析-百度百科
簡(jiǎn)單講:主成分分析就是取出幾個(gè)較少的變量盡可能多地反映原來(lái)變量的信息
(只看主要對(duì)結(jié)果有影的幾個(gè)變量)
主成分分析適用于數(shù)學(xué)建模中篩選出少量變量對(duì)結(jié)果造成主要影響并用函數(shù)關(guān)系表征的情況
%% 主成分分析 (降維)
clc, clearload example_1.txt %數(shù)據(jù)導(dǎo)入(數(shù)據(jù)要求:前幾列為自變量,最后一列為因變量)
data = example_1;[m, n] = size(data);
num = 3; % 選取的主成分的個(gè)數(shù)mu = mean(data);
sigma = std(data); %標(biāo)準(zhǔn)差
%z-score標(biāo)準(zhǔn)化方法適用于屬性A的最大值和最小值未知的情況,或有超出取值范圍的離群數(shù)據(jù)的情況
%標(biāo)準(zhǔn)化的新數(shù)據(jù)=(原數(shù)據(jù)-均值)/標(biāo)準(zhǔn)差
std_data = zscore(data);
b = std_data(: , 1:end-1); % 四個(gè)變量x1, x2, x3, x4
r = cov(b); % 變量的協(xié)方差矩陣% 運(yùn)用協(xié)方差矩陣進(jìn)行PCA
[PC, latent, explained] = pcacov(r); %返回主成分(PC)、協(xié)方差矩陣X的特征值 (latent)和每個(gè)特征向量表征在觀測(cè)量總方差中所占的百分?jǐn)?shù)(explained)
% 新的主成分z1 = PC(1,1)*x1 + PC(2,1)*x2 + PC(3,1)*x3 + PC(4,1)*x4 , z2 = ...
f = repmat(sign(sum(PC)), size(PC, 1), 1); %sum(PC)表示對(duì)矩陣PC的列求和
PC = PC .* f;%1.普通的最小二乘法回歸
regress_args_b = [ones(m, 1), b] \ std_data(:, end); %標(biāo)準(zhǔn)化數(shù)據(jù)的回歸方程系數(shù)
bzh = mu ./ sigma;
% 原始數(shù)據(jù)的常數(shù)項(xiàng)
ch10 = mu(end) - bzh(1:end-1) * regress_args_b(2:end) * sigma(end);
fr_1 = regress_args_b(2:end); fr_1 = fr_1';
% 原始數(shù)據(jù)的自變量的系數(shù)
ch1 = fr_1 ./ sigma(1:end-1) * sigma(end);
% 此時(shí)模型為 y = ch10 + ch1[1]*x1 + ch1[2] * x2 + ch1[3] * x3 + ch1[4] * x4
% 計(jì)算均方誤差
check1 = sqrt(sum( (data(:, 1:end-1) * ch1' + ch10 - data(:, end)) .^2 ) / (m - n))%2.主成分回歸模型
pca_val = b * PC(:, 1:num);
%主成分?jǐn)?shù)據(jù)的回歸方程系數(shù)
regress_args_pca = [ones(m, 1), pca_val] \ std_data(:, end);
beta = PC(:, 1:num) * regress_args_pca(2:num+1); %標(biāo)準(zhǔn)化數(shù)據(jù)的回歸方程系數(shù)
% 原始數(shù)據(jù)的常數(shù)項(xiàng)
ch20 = mu(end) - bzh(1:end-1) * beta * sigma(end);
fr_2 = beta';
% 原始數(shù)據(jù)的自變量的系數(shù)
ch2 = fr_2 ./ sigma(1:end-1) * sigma(end);
% 此時(shí)模型為 y = ch20 + ch2[1]*x1 + ch2[2] * x2 + ch2[3] * x3 + ch2[4] * x4
% 計(jì)算均方誤差
check2 = sqrt(sum( (data(:, 1:end-1) * ch2' + ch20 - data(:, end)) .^2 ) / (m - num - 1))
層次分析
層次分析-百度百科
簡(jiǎn)單講:就是自己將兩兩影響因素作重要性對(duì)比得出判斷矩陣,然后得出各個(gè)影響因素的權(quán)重
層次分析適用于數(shù)學(xué)建模多個(gè)變量對(duì)結(jié)果不同影響程度并用函數(shù)關(guān)系表征的情況
%層次分析法(AHP)
disp('請(qǐng)輸入判斷矩陣A(n階)');
A = input('A=');
[n,n] = size(A);
x = ones(n,100);
y = ones(n,100);
m = zeros(1,100);
m(1) = max(x(:,1));
y(:,1) = x(:,1);
x(:,2) = A*y(:,1);
m(2) = max(x(:,2));
y(:,2) = x(:,2)/m(2);
p=0.0001; i=2; k=abs(m(2)-m(1));
while k>pi=i+1;x(:,i) = A*y(:,i-1);m(i) = max(x(:,i));y(:,i) = x(:,i)/m(i);k=abs(m(i)-m(i-1));
end
a = sum(y(:,i));
w = y(:,i)/a;
t = m(i);
disp(w);
%一致性檢驗(yàn)
CI = (t-n)/(n-1);
RI = [0 0 0.52 0.89 1.12 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59];
CR = CI/RI(n);
if CR<0.10disp('此矩陣一致性可以接受!');disp('CI=');disp(CI);disp('CR=');disp(CR);
end
聚類分析
聚類分析-百度百科
簡(jiǎn)單講:就是多個(gè)影響因素按不同聯(lián)系程度分類
%聚類分析
X; %X為導(dǎo)入數(shù)據(jù)的名稱(類型:數(shù)值矩陣)
X=X'; %將矩陣X轉(zhuǎn)置,按情況看是否需要此語(yǔ)句
Y=pdist(X); %X為要聚類的數(shù)組
SF=squareform(Y);
Z=linkage(Y,'average');
dendrogram(Z,0);
T=cluster(Z,'maxclust',3);
因子分析
因子分析-百度百科
可看作是主成分分析的推廣,涉及的計(jì)算與主成分分析很類似
%因子分析
clc,clear
load ssgs.txt %把原始數(shù)據(jù)保存在純文本文件ssgs.txt中
n=size(ssgs,1);
x=ssgs(:,[1:4]); y=ssgs(:,5); %分別提出自變量x1...x4和因變量x的值
x=zscore(x); %數(shù)據(jù)標(biāo)準(zhǔn)化
r=corrcoef(x) %求相關(guān)系數(shù)矩陣
[vec1,val,con1]=pcacov(r) %進(jìn)行主成分分析的相關(guān)計(jì)算
f1=repmat(sign(sum(vec1)),size(vec1,1),1);
vec2=vec1.*f1; %特征向量正負(fù)號(hào)轉(zhuǎn)換
f2=repmat(sqrt(val)',size(vec2,1),1);
a=vec2.*f2 %求初等載荷矩陣
num=input('請(qǐng)選擇主因子的個(gè)數(shù):'); %交互式選擇主因子的個(gè)數(shù)
am=a(:,[1:num]); %提出num個(gè)主因子的載荷矩陣
[bm,t]=rotatefactors(am,'method', 'varimax') %am旋轉(zhuǎn)變換,bm為旋轉(zhuǎn)后的載荷陣
bt=[bm,a(:,[num+1:end])]; %旋轉(zhuǎn)后全部因子的載荷矩陣,前兩個(gè)旋轉(zhuǎn),后面不旋轉(zhuǎn)
con2=sum(bt.^2) %計(jì)算因子貢獻(xiàn)
check=[con1,con2'/sum(con2)*100]%該語(yǔ)句是領(lǐng)會(huì)旋轉(zhuǎn)意義,con1是未旋轉(zhuǎn)前的貢獻(xiàn)率
rate=con2(1:num)/sum(con2) %計(jì)算因子貢獻(xiàn)率
coef=inv(r)*bm %計(jì)算得分函數(shù)的系數(shù)
score=x*coef %計(jì)算各個(gè)因子的得分
weight=rate/sum(rate) %計(jì)算得分的權(quán)重
Tscore=score*weight' %對(duì)各因子的得分進(jìn)行加權(quán)求和,即求各企業(yè)綜合得分
[STscore,ind]=sort(Tscore,'descend') %對(duì)企業(yè)進(jìn)行排序
display=[score(ind,:)';STscore';ind'] %顯示排序結(jié)果
[ccoef,p]=corrcoef([Tscore,y]) %計(jì)算F與資產(chǎn)負(fù)債的相關(guān)系數(shù)
[d,dt,e,et,stats]=regress(Tscore,[ones(n,1),y]);%計(jì)算F與資產(chǎn)負(fù)債的方程
d,stats %顯示回歸系數(shù),和相關(guān)統(tǒng)計(jì)量的值
總結(jié)
以上是生活随笔為你收集整理的数学建模常用的分析法及其MATLAB实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。