预测和评价----学习反馈

简介

评价和预测是建模中非常常见的问题,这里主要介绍三种评价方案和三种预测方法。即:加权平均、层次分析和模糊综合评价;拟合、时间序列和灰色预测。

加权平均是一种比较简单的方法,就像我们平常计算加权平均数可以得到平均值,对一组数据加权后就得到了一个加权值,将该加权值的大小作为评价的亮度。

层次分析法(AHP)特别适用于那些难以用定量进行分析的复杂问题,它的优势是通过对因素归纳、分层,并逐层分析和量化事物,达到尽可能的定量分析,帮助认识复杂的事物和决策。它有三层,分别是目标层,准则层和备选层,也可以称为最高层,中间层和最底层。应用层次分析法解决问题时,首先要把问题条理化、层次化,构造出一个有层次的结构模型。在这个模型下,复杂问题被分解为元素的组成部分。这些元素又按其属性及关系形成若干层次。总而言之层次分析法就是分层结构化的分析问题的方法。

模糊综合评价法。这个算法比较简单,主要的部分就是因素集和权重,主要的操作就是模糊合成。因素集来源于收集的数据集,数据应该比较真实。权重来源于实际调查结果或者是由层次分析法得到。通过模糊合成将权重和因素进行计算得到的就是评价结果

拟合是一种比较简答的预测操作,几乎预测的核心思想都离不开拟合。拟合包括多项式拟合和特定函数拟合,matlab提供了应用程序,支持图形界面操作,比较简单,这里就不做过多介绍了

时间序列预测是一种比较常见的预测,尤其在大数据的今天,时间序列的处理是很重要的技能。所谓时间序列是指预测对象依时间形成的序列。这里主要介绍一次移动平均法的时间序列预测。另外还有平滑法,待日后查阅资料再补上。一次移动平均是很简单的方法,主要参数有一个就是 N N N,表示需要每次预测时需要使用的数据的个数,而且使用的数据都是紧在预测时间点之前的数据。通过对它们取平均值,将平均值作为预测的结果。

灰色预测是一种适合于灰色系统的预测方法,所谓灰色系统是指系统中的某些因素不可知,但使用灰色预测可以较好的防止这些不可知因素的影响,达到不错的预测结果。灰色预测并不需要太多的数据,所以在数据较少的白色系统中也可以考虑使用灰色预测,此外,它使用的是生成数据(累加生成序列)而不是原始数据,适合于稳定性的变化趋势,而波动较大的趋势预测效果不是很好,适用于中短期的预测,不适合与长期预测。这当然与算法的逻辑结构是相关的。这里主要介绍 G M ( 1 , 1 ) GM(1,1) GM1,1,表示一阶微分方程只含一个变量。

常见模型

加权平均

加权平均比较简单,列出权重向量 w w w,因素向量 x x x,它们都是列向量。那么评分向量就是 y = w T x y=w^Tx y=wTx

层次分析

层次分析法主要的主要的作用在于将复杂的因素结构化并量化,并且保持一致性。主要有三个层次:最高层(又叫目标层),分析问题的既定目标或者是理想结果;中间层(又叫准则层),可以包含若干个层次,这一层主要是分析问题所需要的准则;最底层(措施层,或者是被选层),这一层主要是实现目标层中目标所提供的方案。
所谓准则就是影响因素,是一种类似于指标的数据工具。层次分析法使用到的矩阵的性质,特征值等内容较多,对线性代数要求较高,所以在理解线性代数之后再看这一部分可能胡容易一些。
主要内容

  • 构造判断矩阵。评价矩阵中的值是由准则两两比较得到的。下面是评价矩阵中元素的计算和一些性质。 a i j = c i c j a i j = 1 a j i i , j = 1 , 2 , . . . n a_{ij}=\frac{c_i}{c_j}\qquad a_{ij}=\frac{1}{a_{ji}}\qquad i,j=1,2,...n aij=cjciaij=aji1i,j=1,2,...n
  • 一致性检验。这里需要用到三个检验指标,一致性指标( C I CI CI),一致性比例( C R CR CR),平均随机一致性指标( R I RI RI)。下面是指标的计算方法,表格是经过统一测定的平均随机一直性指标: C I = λ − 1 n − 1 C R = C I R I ( N ) &lt; 0.1 CI=\frac{\lambda-1}{n-1}\qquad CR=\frac{CI}{RI(N)}&lt;0.1 CI=n1λ1CR=RI(N)CI<0.1
N123456789
RI000.580.901.121.241.321.411.45

λ \lambda λ是矩阵的特征值,经过计算可以得到 C R CR CR,当 C R CR CR小与0.1的时候满足一致性检验。

  • 层次单排序。所谓层次单排序就是求该层次各因素的权重向量,而权重向量就是判断矩阵的最大的特征值对应的特征向量的归一化表示,原理是线性代数的内容,即:特征向量对于矩阵有什么意义。判断矩阵中的每一个数都是由准则相除得到的,我们取判断矩阵的特征值,在一定程序上就反映了各准则的相对重要性,因为他们都是相对于其他准则而言的。当我们得到权重后,权重的大小便是一种顺序,所以称之为排序。
  • 层次总排序。层次单排序是相对于每个准则计算权重值(又可以称为指标值,评分值,排序值等),所谓单便是指单个准则计算其排序值(权重值)。这里的总排序顾名思义就是加权所有的准则得到总得排序值(权重值,评分值)。同上面一样,之所以称为排序是因为权重值的大小在一定程度上就是一种顺序。
    根据求出来的总排序值,我们就可以对问题进行分析决策。实际上,这里说的只是一种比较简答的结构,当中间层比较多的时候,层次单排序应该是需要进行多次的。对最底层使用层次单排序,然后对上一次使用层次单排序,然后再对上一次使用层次单排序,一直到最高层,最后使用层次总排序。这样就得到了我们的决策依据值,或者是评分值。

程序实现
这里演示的是选择一名明星。准则层的准则有:颜值,身材,声音,演技。被选层是明星有:A,B,C。

function ahpactor

%% 判断矩阵,是准则与准则两两之比得到的
A = [1/1  2/1  5/1  3/1 
     1/2  1/1  3/1  1/2 
     1/5  1/3  1/1  1/4
     1/3  2/1  4/1  1/1];
[w, CR] = AHP(A);

%% 层次单排序
% 颜值准则的判断矩阵(相对重要性矩阵),是三个明星之间两两相比得到的
A1 = [1/1  1/2  3/1
      2/1  1/1  5/1
      1/3  1/5  1/1];
[w1, CR1] = AHP(A1);

% 身材准则的判断矩阵(相对重要性矩阵),是三个明星之间两两相比得到的
A2 = [1/1  1/3  2/1
      3/1  1/1  5/1
      1/2  1/5  1/1];
[w2, CR2] = AHP(A2);

% 声音准则的判断矩阵(相对重要性矩阵),是三个明星之间两两相比得到的
A3 = [1/1  2/1  1/5
      1/2  1/1  1/7
      5/1  7/1  1/1];
[w3, CR3] = AHP(A3);

% 演技准则的判断矩阵(相对重要性矩阵),是三个明星之间两两相比得到的
A4 = [1/1  2/1  1/3
      1/2  1/1  1/5
      3/1  5/1  1/1];
[w4, CR4] = AHP(A4);

%% 层次总排序
CRs = [CR1 CR2 CR3 CR4]
P = [w1 w2 w3 w4] * w

 
%% AHP函数,参数是判断矩阵A,返回值是
function [w, CR] = AHP(A)

% n= [ 1    2    3    4    5    6    7    8    9] RI的值
RI = [ 0.00 0.00 0.58 0.90 1.12 1.24 1.32 1.41 1.45];

n = size(A,1);

% 计算特征向量和特征值
[V, D] = eig(A);

% 一致性检验
[lamda, i] = max(diag(D));
CI=(lamda-n)/(n-1);
CR = CI/RI(n);

% 计算权重值(排序值),层次单排序的具体函数实现
W = V(:,i);
w = W/sum(W);
模糊综合评价

所谓模糊就是指:从属于该概念到不属于该概念没有明显的分界线。这里的算法主要是通过隶属程度代替属于或不属于,这样就实现了对模糊的量化。
模糊评价的要素有因素集和评语集。因素集就是影响评价的因素,或者说是评价问题的参考对象。评语集就是数据集,即我们使用这些数据集计算出我们的评价结果。
算法主要的操作就是模糊合成。即如下公式: P = W ⊙ R P=W\odot R P=WR ⊙ \odot 是一种模糊合成运算,模糊合成运算有: ⊙ ∈ { M ( ∨ , ∧ ) , M ( ⋅ , ∨ ) , M ( ∧ , ⊕ ) , M ( ⋅ , ⊕ ) } \odot\in\left\{M(\vee,\wedge),M(\cdot,\vee),M(\wedge,\oplus),M(\cdot,\oplus)\right\} {M(,)M(,)M(,)M()} W W W表示权重向量,可以从已有文献中获取,或者是在数据集中提取,或者是使用层次分析法获得权重。 R R R是评分集,是根据已有的数据集进行数据分析处理获得的量化的表示。

程序示例
算法比较简单,主要的步骤有:获得权重向量,将数据集进行处理得到评分集,进行合成运算。

% 权重向量
W = [0.4 0.2 0.1 0.3];

% 评分集
R = [0.38 0.34 0.17 0.11 0.00
     0.26 0.41 0.20 0.13 0.00
     0.27 0.23 0.21 0.15 0.14
     0.14 0.19 0.22 0.12 0.33];

% B = max(R .* W') 合成运算
B = max(R .* repmat(W',1,size(R,2)) )
时间序列

时间序列是一个比较常用的数据集,其处理方法也是比较多,这里主要介绍一次移动平均法,而其他的方法待参考资料后再加补充,毕竟这是一种非常重要的数据集类型。
时间序列的变化形式有四种:

  • 长期趋势变动 T t ( t r e n d ) T_t(trend) Tt(trend)
  • 季节变动 S t ( s e a s o n ) S_t(season) St(season)
  • 循环变动 C t ( c i r c l e ) C_t (circle) Ct(circle)
  • 不规则变动 R t ( i r r e g u l a r ) R_t (irregular) Rt(irregular)

模型主要有:加法模型,乘法模型,混合模型。加法模型就是多种变动形式相加,乘法则是多种变动形式相乘,混合模型则是包括有加法模型和乘法模型的模型。在一次移动平均上还看不出来这些模型的影子,不过需要查阅资料了解这些处理变动形式的方式(模型,通俗讲就是处理变动形式的方式)。

一个重要的参数 N N N,它表示预测是所使用的数据的个数。一次移动平均法的公式如下: y ^ t + 1 = 1 N ( y t + . . . + y t − N + 1 ) t = N , N + 1 , . . . T \hat{y}_{t+1}=\frac{1}{N}(y_t+...+y_{t-N+1})\qquad t=N,N+1,...T y^t+1=N1(yt+...+ytN+1)t=N,N+1,...T在这个公式中 N N N是在开始就已经定义好的,而 T T T表示已有的数据的总个数。通俗来讲,当我们预测第 t + 1 t+1 t+1个时间序列对象时,我们取它的前 N N N个平均值作为预测值,这就是公式的实际意义,但是显然,这有很大的预测误差,所以这里还提供了标准误差的计算方式:(实际中发现,这种预测所得到的预测结果预测的标准误差都比较大) S = ∑ t = N + 1 T ( y ^ − y t ) 2 T − N S=\sqrt{\frac{\sum^T_{t=N+1}(\hat{y}-y_t)^2}{T-N}} S=TNt=N+1T(y^yt)2 仍然是方均根值的形式,即取预测值和每一个真实值的平方和然后取平均再开根号,基本的思路仍然是计算标准差的思路,而平方和表示的是预测值和真实值的差距。

平滑法,待查阅资料后补充
程序示例

%% 原始时间序列
y = [533.8 574.6 606.9 649.8  705.1 772.0 816.4 892.7 963.9 1015.1];

%% 求序列的长度
m = length(y);

%% 定义N的值
n = 4;

%% 累加和序列
c = cumsum(y);

%% yhat公式的程序实现
yhat = ( c(n:end)-[0 c(1:end-n)] )/n;

%% 预测标准差的公式的程序实现
S = norm(yhat(1:end-1) - y(n+1:end))/sqrt(m-n)
灰色预测
  • 给定一个原始序列 X ( 0 ) = { x ( 0 ) ( 1 ) , x ( 0 ) ( 2 ) . . . . x ( 0 ) ( n ) } X^{(0)}=\left\{x^{(0)}(1),x^{(0)}(2)....x^{(0)}(n)\right\} X(0)={x(0)(1),x(0)(2)....x(0)(n)}
  • 可行性检验条件。当满足检验条件的时候才可以进行预测,否则做数据平移处理(具体步骤参考资料,后续补上) λ ( k ) = x 0 ( k − 1 ) x 0 ( k ) ∈ ( e − 2 n + 1 , e 2 n + 1 ) \lambda(k)=\frac{x^{0}(k-1)}{x^0(k)}\in(e^{-\frac{2}{n+1}},e^{\frac{2}{n+1}}) λ(k)=x0(k)x0(k1)(en+12,en+12) y ( 0 ) ( k ) = x ( 0 ) ( k ) + c y^{(0)}(k)=x^{(0)}(k)+c y(0)(k)=x(0)(k)+c
  • 一次累加生成序列是一个前几项的累加和序列。使用编程很容易实现。 X ( 1 ) = { x ( 1 ) ( 1 ) , x ( 1 ) ( 2 ) . . . . x ( 1 ) ( n ) } X^{(1)}=\left\{x^{(1)}(1),x^{(1)}(2)....x^{(1)}(n)\right\} X(1)={x(1)(1),x(1)(2)....x(1)(n)} x ( 1 ) ( k ) = ∑ i = 1 k x ( 1 ) ( i ) x^{(1)}(k)=\sum^k_{i=1}x^{(1)}(i) x(1)(k)=i=1kx(1)(i)
  • 均值生成序列。 Z ( 1 ) = { z ( 1 ) ( 2 ) , z ( 1 ) ( 3 ) , . . . . z ( 1 ) ( n ) } Z^{(1)}=\left\{z^{(1)}(2),z^{(1)}(3),....z^{(1)}(n)\right\} Z(1)={z(1)(2),z(1)(3),....z(1)(n)}其中每一项表示对于的累加和与前一个累加和的均值。即: z ( 1 ) ( k ) = x ( 1 ) ( k ) + x ( 1 ) ( k − 1 ) 2 z^{(1)}(k)=\frac{x^{(1)}(k)+x^{(1)}(k-1)}{2} z(1)(k)=2x(1)(k)+x(1)(k1)
  • 灰微分方程。从方程的形式上看,它表示的是原始序列的第二项开始的每一项与均值生成序列的对应项的一次关系。之所以称为灰微分,可能是因为这种关系是模糊而不可知的(猜想)。 x ( 0 ) ( k ) + a z ( 1 ) ( k ) = b k = 2 , 3.... n x^{(0)}(k)+az^{(1)}(k)=b \qquad k=2,3....n x(0)(k)+az(1)(k)=bk=2,3....n
  • 白化微分方程。 a , b a,b ab参数的确定都是使用最小二乘法计算出来的,可见最小二乘法在优化中的重要性。 d x ( 1 ) d t + a x ( 1 ) ( t ) = b \frac{dx^{(1)}}{dt}+ax^{(1)}(t)=b dtdx(1)+ax(1)(t)=b
  • 求解白微分方程。这个时候就得到了预测值的累加和,通过累减即可得出。 x ^ ( 1 ) ( k + 1 ) = ( x ( 0 ) ( 1 ) − b ^ a ^ ) e − a ^ k + b ^ a ^ \hat{x}^{(1)}(k+1)=(x^{(0)(1)}-\frac{\hat{b}}{\hat{a}})e^{-\hat{a}k}+\frac{\hat{b}}{\hat{a}} x^(1)(k+1)=(x(0)(1)a^b^)ea^k+a^b^
  • 模型还原,即求解预测值。 x ^ ( 0 ) ( k + 1 ) = x ^ ( 1 ) ( k + 1 ) − x ^ ( 1 ) ( k ) \hat{x}^{(0)}(k+1)=\hat{x}^{(1)}(k+1)-\hat{x}^{(1)}(k) x^(0)(k+1)=x^(1)(k+1x^(1)(k)

这里主要介绍的是算法的步骤,至于算法的思想和本质并没有介绍,后续将会继续补充。
程序实现

%% 得到时间
t0 = [1999:2003]'; 

%% 待预测的时间序列
X0 = [89, 99, 109, 120, 135]';  
n = length(X0);

%% 计算λ
lambda = X0(1:n-1)./X0(2:n);  

%% 找出λ的最小值和最大值,用与可行性检验
range = minmax(lambda')
exp([-2/(n+1), 2/(n+2)])

%% 累加生成序列
X1 = cumsum(X0);  

%% 均值生成序列
Z1 = (X1(1:n-1)+X1(2:n))/2  

%% 参数的计算
B = [-Z1, ones(n-1,1)]; 
Y = X0(2:n);
u = B\Y; a = u(1); b = u(2);  

%% 预测值
k = 0:n+4;
xhat1 = (X0(1) - b/a).*exp(-a*k) + b/a;
xhat0 = [X0(1) diff(xhat1)]  
plot(t0,X0,'o',t0(1)+k, xhat0,'-+')

比较

评价和预测算法中使用的最多的就是加权计算,包括加权平均和加权求值。所以,我们猜测,无论多么复杂的评价算法中,它的基本立足点还是加权计算,然后在这个基础上再进一步加上某些限制操作(比如一致性计算),从而实现一种解决问题的量化方法。

写在最后

这几个算法都不是很复杂,但是在实际中应用起来并没有这么简单,因为我们要处理的数据集要大的多,权重的获得并不一定有这么容易,所以还要结合一些数据分析的技能,才能够将这些算法熟练的使用。

把握算法,不仅仅在于实现,更重要的在于把握算法的灵魂,然后我们就可以发现,众多的算法在大部分步骤上都是很类似的,因为他们都是基于同一思想出发的,但会在某些操作上使用了不同的公式,因为这个公式的特征才是算法的特色所在。这个同一思想就是算法的灵魂,把握了灵魂,我们可以通过发现新的函数来改进算法,这个不同的公式就是算法的特色,决定了算法适用的场景,决定了算法的优劣。这里提到的思想和公式是数学哲学上的概念,而不仅仅是代数公式。公式可以是代数公式,可以是逻辑公式等等。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值