文章目录

  • 主成分分析
  • 层次分析
  • 聚类分析
  • 因子分析

本篇分别有主成分分析,层次分析,聚类分析,因子分析的简单介绍以及在MATLAB(2018a)上使用的简单介绍 ( 附源码 )

主成分分析

主成分分析-百度百科
简单讲:主成分分析就是取出几个较少的变量尽可能多地反映原来变量的信息
(只看主要对结果有影的几个变量)
主成分分析适用于数学建模中筛选出少量变量对结果造成主要影响并用函数关系表征的情况

%% 主成分分析 (降维)
clc, clearload example_1.txt  %数据导入(数据要求:前几列为自变量,最后一列为因变量)
data = example_1;[m, n] = size(data);
num = 3;   % 选取的主成分的个数mu = mean(data);
sigma = std(data);  %标准差
%z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况
%标准化的新数据=(原数据-均值)/标准差
std_data = zscore(data);
b = std_data(: , 1:end-1);     % 四个变量x1, x2, x3, x4
r = cov(b);                                % 变量的协方差矩阵% 运用协方差矩阵进行PCA
[PC, latent, explained] = pcacov(r);  %返回主成分(PC)、协方差矩阵X的特征值 (latent)和每个特征向量表征在观测量总方差中所占的百分数(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)表示对矩阵PC的列求和
PC = PC .* f;%1.普通的最小二乘法回归
regress_args_b = [ones(m, 1), b] \ std_data(:, end);   %标准化数据的回归方程系数
bzh = mu ./ sigma;
% 原始数据的常数项
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';
% 原始数据的自变量的系数
ch1 = fr_1 ./ sigma(1:end-1) * sigma(end);
% 此时模型为 y = ch10 + ch1[1]*x1 + ch1[2] * x2 + ch1[3] * x3 + ch1[4] * x4
% 计算均方误差
check1 = sqrt(sum( (data(:, 1:end-1) * ch1' + ch10 - data(:, end)) .^2 ) / (m - n))%2.主成分回归模型
pca_val = b * PC(:, 1:num);
%主成分数据的回归方程系数
regress_args_pca = [ones(m, 1), pca_val] \ std_data(:, end);
beta = PC(:, 1:num) * regress_args_pca(2:num+1);   %标准化数据的回归方程系数
% 原始数据的常数项
ch20 = mu(end) - bzh(1:end-1) * beta * sigma(end);
fr_2 = beta';
% 原始数据的自变量的系数
ch2 = fr_2 ./ sigma(1:end-1) * sigma(end);
% 此时模型为 y = ch20 + ch2[1]*x1 + ch2[2] * x2 + ch2[3] * x3 + ch2[4] * x4
% 计算均方误差
check2 = sqrt(sum( (data(:, 1:end-1) * ch2' + ch20 - data(:, end)) .^2 ) / (m - num - 1))

层次分析

层次分析-百度百科
简单讲:就是自己将两两影响因素作重要性对比得出判断矩阵,然后得出各个影响因素的权重
层次分析适用于数学建模多个变量对结果不同影响程度并用函数关系表征的情况

%层次分析法(AHP)
disp('请输入判断矩阵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);
%一致性检验
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

聚类分析

聚类分析-百度百科
简单讲:就是多个影响因素按不同联系程度分类

%聚类分析
X;   %X为导入数据的名称(类型:数值矩阵)
X=X';    %将矩阵X转置,按情况看是否需要此语句
Y=pdist(X);     %X为要聚类的数组
SF=squareform(Y);
Z=linkage(Y,'average');
dendrogram(Z,0);
T=cluster(Z,'maxclust',3);

因子分析

因子分析-百度百科
可看作是主成分分析的推广,涉及的计算与主成分分析很类似

%因子分析
clc,clear
load ssgs.txt   %把原始数据保存在纯文本文件ssgs.txt中
n=size(ssgs,1);
x=ssgs(:,[1:4]); y=ssgs(:,5); %分别提出自变量x1...x4和因变量x的值
x=zscore(x); %数据标准化
r=corrcoef(x)  %求相关系数矩阵
[vec1,val,con1]=pcacov(r)  %进行主成分分析的相关计算
f1=repmat(sign(sum(vec1)),size(vec1,1),1);
vec2=vec1.*f1;     %特征向量正负号转换
f2=repmat(sqrt(val)',size(vec2,1),1);
a=vec2.*f2   %求初等载荷矩阵
num=input('请选择主因子的个数:');  %交互式选择主因子的个数
am=a(:,[1:num]);  %提出num个主因子的载荷矩阵
[bm,t]=rotatefactors(am,'method', 'varimax') %am旋转变换,bm为旋转后的载荷阵
bt=[bm,a(:,[num+1:end])];  %旋转后全部因子的载荷矩阵,前两个旋转,后面不旋转
con2=sum(bt.^2)       %计算因子贡献
check=[con1,con2'/sum(con2)*100]%该语句是领会旋转意义,con1是未旋转前的贡献率
rate=con2(1:num)/sum(con2) %计算因子贡献率
coef=inv(r)*bm          %计算得分函数的系数
score=x*coef           %计算各个因子的得分
weight=rate/sum(rate)  %计算得分的权重
Tscore=score*weight'   %对各因子的得分进行加权求和,即求各企业综合得分
[STscore,ind]=sort(Tscore,'descend')      %对企业进行排序
display=[score(ind,:)';STscore';ind'] %显示排序结果
[ccoef,p]=corrcoef([Tscore,y])    %计算F与资产负债的相关系数
[d,dt,e,et,stats]=regress(Tscore,[ones(n,1),y]);%计算F与资产负债的方程
d,stats  %显示回归系数,和相关统计量的值

数学建模MATLAB之分析法(一)相关推荐

  1. 病毒传播数学建模matlab分析,数学建模MATLAB之分析法(一)

    [toc] 本篇分别有主成分分析,层次分析,聚类分析,因子分析的简单介绍以及在MATLAB(2018a)上使用的简单介绍 ( 附源码 ) 主成分分析 主成分分析-百度百科 简单讲:主成分分析就是取出几 ...

  2. dna序列分类数学建模matlab,数学建模常用的分析法及其MATLAB实现

    [toc] 介绍 本篇分别有主成分分析,层次分析,聚类分析,因子分析的简单介绍以及在MATLAB(2018a)上使用的简单介绍 ( 附源码 ) 主成分分析 主成分分析-百度百科 简单讲:主成分分析就是 ...

  3. 【数学建模】层次分析法AHP(评价与决策)

    文章目录 一.算法介绍 二.适用问题 三.算法总结 1. 步骤 2. 如何构建层次结构模型 3. 如何构建成对比较矩阵 4. 如何进行一致性检验 四.应用场景举例(旅游问题) 1. 建模 2. 构造成 ...

  4. 备战数学建模9-层次分析法模型

    层次分析法,简称AHP,是建模比赛中最基础的模型之一,其主要用于解决评价类问题,例如:哪中方案更好?哪位运动员或者员工表现得更优秀? 一.层次分析模型建立部分 下面我们看一道引出层次分析得例题,如下所 ...

  5. 数学建模之层次分析法AHP

    层次分析法(Analytic Hierarchy Process,AHP)这是一种定性和定量相结合的.系统的.层次化的分析方法.这种方法的特点就是在对复杂决策问题的本质.影响因素及其内在关系等进行深入 ...

  6. 【数学建模】—— 层次分析法(AHP)

    层次分析法 The analytic hierarchy process (AHP) 建模比赛中最基础的算法之一,主要用于解决评价类的 解决评价类问题,首先要想到以下三个问题: 我们评价的目标是什么? ...

  7. 【数学建模】层次分析法

    层次分析法 引例 层次分析法介绍 成对比较阵和一致性检验 组合权向量 层次分析法步骤 代码实现 RI 一致性检验 层次单排序 计算组合权向量(层次总排序) 经典案例 代码实现 练习训练 参考文献 引例 ...

  8. 数学建模之层次分析法模型

    目录 问题 问题实例 问题分析 建立层次分析法模型 分析权重的方法 ​编辑 填表指标的权重​编辑 一致性检验 一致性检验的引入 一致性检验的步骤 计算判断矩阵 归一化处理 算术平均法求权重 几何平均法 ...

  9. (一)【数学建模】层次分析法

    文章目录 1. 评价类问题可用打分解决 (1)确定权重的方法(分而治之的思想): 1) 确定判断矩阵 2)计算权重 <1>算术平均法求权重 <2>几何平均法求权重 <3& ...

  10. 【数学建模】层次分析法(AHP)-Python实现

    1 前言 本文主要讲解层次分析法(AHP)的python实现,后续会跟进实例分析 2 代码实现 导入包 import numpy as np 2.1 构造判断矩阵 判断矩阵一般采用专家意见法,也就是德 ...

最新文章

  1. Arcmap技巧总结
  2. 『PPYOLO tiny尝鲜』基于PaddleDetection的人脸疲劳检测
  3. 网页拉起QQ进行交谈
  4. python 退出程序_Python:用Ctrl+C解决终止多线程程序的问题!(建议收藏)
  5. jQuery实现checkbox的全选反选方法
  6. 棋盘覆盖-分治法(代码实现)
  7. JBookManager v1.00.2008314 (编辑管理您的Jar电子书)
  8. java web应用开发渐进教程_Java Web应用开发渐进教程
  9. Python 设计模式之建造者模式 Builder Pattern
  10. 【转载】Android通过ksoap2调用.net(c#)的webservice
  11. 如何以CustomValidator搭配jQuery AJAX进行Server端验证(转)
  12. getSupportFragmentManager要用在FragmentActivity及其子类中
  13. php毕设周记_(完整版)毕设周记
  14. php性格属于哪类,狗狗性格分为6大类,你家是属哪一类?快来是看聪明型还是粘人型...
  15. 【ML特征工程】第 6 章 :降维:用 PCA 压缩数据薄饼
  16. 通过搜狗蜘蛛池,让网站收录排名提升
  17. 虚拟机Linux下如何查看自己的IP地址
  18. 古有陈天华万字血书抗沙俄,今有本剧蒻万字背包虐dp(01,完全,多重,分组,混合等各种背包详解 + 板子题+ 奇奇怪怪滴变式题)
  19. Jieba分词的准确率提升:使用paddle模式进行分词(使用百度飞桨深度学习模型进行分词)
  20. python脚本案例-python+adb命令实现自动刷视频脚本案例

热门文章

  1. staruml顺序图转通信图_【航图详解】ICAO机场图!
  2. 套用这套模板,玩转周报、月报、年报更省事
  3. 掌讯3561跟3518区别_车载大屏导航掌讯方案MTK3561 ROOT 方法
  4. mysql 用户授权授权_mysql的用户权限如何授权
  5. 如何寻找、下载期刊投稿的LaTeX模板
  6. 安装R和Rstudio win10
  7. 在MATLAB中绘制水平线和垂直线的一些方法
  8. 关于在networkx中使用louvain算法报错的问题
  9. Linux 内核编程总结
  10. c语言程序代码分享,一些简单的C语言程序代码(最新整理)