当前位置:首页 > 推荐数学建模matlab方法整理 - 图文
最终的决策函数为: f = sign([0, 2]*xT-2)
可以验证,这个学习到的决策函数能够对这些平面上的点实现很好的分类;
基本思路是这样的,如果要考虑引入核函数和Penalty Loss的情况,只需要修改优化函数和约束就可以实现。而且自己可以根据需求任意构造自己的SVM目标函数,然后用Lagrange方法转换为对偶形式,然后当作一个有约束线性规划问题用Matlab来解。至于有约束线性规划问题,这是个大概半个世纪前就解决的问题,学过OR的人都知道它的解决方法。网上也有很多的Open Source来解决这个问题,直接Call那些代码就可以了。虽然林智仁教授也提供Source Code,是C++风格的,可读性不是太好。
Cftool
拟合曲线图
? SSE 是拟合误差的平方和。它越接近0,说明拟合结果推断的准确性越高。 注:SSE的完整公式为
其中wi为权值,yi为测量值,戴草帽的yi为估计值。
? R-Square 是表达值(即实测数据)与推测值(即用拟合模型计算的数据)之间相关系数的平方值(我猜可能是为了统一评估正负相关性才会使用平方)。它越接近1,说明模型能更好地解释变量间的比例关系。换言之,两组数据的相关性更好。
注:R-Square的完整公式有点复杂:
其中,
? DFE 是误差的自由度。
? Adj R-sq 是按照误差自由度调整后的R-square。它越接近1,说明拟合结果越好。请注意,按照R-Square的计算方法,只要增加系数(见下面的#Coef参数)就会使R-Square 增加,而Adj R-Sq则综合考虑误差自由度,所以选这个参数判断更合理些。
? RMSE 是均方差,又称标准误差(注意不是标准差)。它越接近0说明拟合结果的推断越有用。
? #Coeff 是模型的系数的数量。如果多个拟合结果的统计数据有接近的拟合优良性(goodness-of-fit),那就使用系数最少的模型作为最好拟合结果的评判标准。在拟合时,一定要权衡一下优良性和系数数量之间的平衡关系,否则可能会过拟合(overfitting)。答案:综合考虑SSE,R-Square和#Coeff,poly2~poly5是不错的选择。实际上,作为一个完整的例子,最佳选择是poly2,阶次为2以上的都过拟合了。
一、回归分析 1.多元线性回归
在Matlab统计工具箱中使用命令regress()实现多元线性回归,调用格式为 b=regress(y,x) 或
[b,bint,r,rint,stats] = regress(y,x,alpha)
其中因变量数据向量y和自变量数据矩阵x按以下排列方式输入
对一元线性回归,取k=1即可。alpha为显著性水平(缺省时设定为0.05),输出向量b,
bint为回归系数估计值和它们的置信区间,r,rint为残差及其置信区间,stats是用于检验回归模型的统计量,有三个数值,第一个是R2,其中R2是相关系数,第二个是F统计量值,第三个是与统计量F对应的概率P,当P<α 时拒绝H0,回归模型成立。
画出残差及其置信区间,用命令rcoplot(r,rint)
实例1:已知某湖八年来湖水中COD浓度实测值(y)与影响因素湖区工业产值(x1)、总人口数(x2)、捕鱼量(x3)、降水量(x4)资料,建立污染物y的水质分析模 型。
(1)输入数据
x1=[1.376, 1.375, 1.387, 1.401, 1.412, 1.428, 1.445, 1.477] x2=[0.450, 0.475, 0.485, 0.500, 0.535, 0.545, 0.550, 0.575] x3=[2.170 ,2.554, 2.676, 2.713, 2.823, 3.088, 3.122, 3.262] x4=[0.8922, 1.1610 ,0.5346, 0.9589, 1.0239, 1.0499, 1.1065, 1.1387]
y=[5.19, 5.30, 5.60,5.82,6.00, 6.06,6.45, 6.95] (2)保存数据(以数据文件.mat形式保存,便于以后调用)
save data x1 x2 x3 x4 y load data (取出数据) (3)执行回归命令
x =[ones(8,1),x1’,x2’,x3’,x4’ ]; [b,bint,r,rint,stats] = regress(y’,x) 得结果:
b = (-16.5283,15.7206,2.0327,-0.2106,-0.1991)’ stats = (0.9908,80.9530,0.0022) 即
= -16.5283 + 15.7206xl + 2.0327x2 - 0.2106x3 + 0.1991x4 R2 = 0.9908,F = 80.9530,P = 0.0022 2.非线性回归
非线性回归可由命令nlinfit来实现,调用格式为 [beta,r,j] = nlinfit(x,y,'model’,beta0)
其中,输人数据x,y分别为n×m矩阵和n维列向量,对一元非线性回归,x为n维列向量model是事先用 m-文件定义的非线性函数,beta0是回归系数的初值, beta是估计出的回归系数,r是残差,j是Jacobian矩阵,它们是估计 预测误差需要的数据。
预测和预测误差估计用命令 [y,delta] = nlpredci(’model’,x,beta,r,j)
实例2:对实例1中COD浓度实测值(y),建立时序预测模型,这里选用logistic 模型。即
(1)对所要拟合的非线性模型建立的m-文件mode1.m如下: function yhat=model(beta,t)
yhat=beta(1)./(1+beta(2)*exp(-beta(3)*t)) (2)输人数据 t=1:8
load data y(在data.mat中取出数据y) beta0=[50,10,1]’ (3)求回归系数 [beta,r,j]=nlinfit(t’,y’,’model’,beta0) 得结果:
beta=(56.1157,10.4006,0.0445)’ 即 (4)预测及作图
[yy,delta] = nlprodei(’model’,t’,beta,r,j);
plot(t,y,’k+’,t,yy,’r’) 3.逐步回归
逐步回归的命令是stepwise,它提供了一个交互式画面,通过此工具可以自 由地选择变量,进行统计分析。调用格式为: stepwise(x,y,inmodel,alpha)
其中x是自变量数据,y是因变量数据,分别为n×m和n×l矩阵,inmodel是矩阵的列数指标(缺省时为全部自变量),alpha,为显著性水平(缺省时为0.5) 结果产生三个图形窗口,在stepwise plot窗口,虚线表示该变量的拟合系数与0无显著差异,实线表示有显著差异,红色线表示从模型中移去的变量;绿色线表明存在模型中的变量,点击一条会改变其状态。在stepwise Table窗口中列出一个统计表,包括回归系数及其置信区间,以及模型的统计量剩余标准差
(RMSE),相关系数 (R-square),F值和P值。
对不含常数项的一元回归模型 , 、 都是 向量,在MATLAB中进行回归分析 的程序为:
①b=regress(y,x)
②[b,bint,r,rint,stats]=regress(y,x) ③[b,bint,r,rint,stats]=regress(y,x,alpha) 说明:
b=regress(y,x)返回基于观测y和回归矩阵x的最小二乘拟合系数的结果。 [b,bint,r,rint,stats]=regress(y,x)则给出系数的估计值b;系数估计值的置信度为95%的置信区间bint;残差r及各残差的置信区间rint;向量stats给出
回归的R2统计量和F以及P值. [b,bint,r,rint,stats]=regess(y,alpha)给出置信度为1-alpha的结果,其
他符号意义同上. 对含常数项的一元回归模型,可将 变为 矩阵,其中第一列全为1。
结果说明:b为回归模型中的常数项及回归系数. Bint为各系数的95%置信区间. r和rint为对应每个实际值的残差和残差置信区间。Stats向量的值分别为拟合优度、F值和显著性概率p. 所以,生产费用对产量的回归函数为: . ,说明 模型拟合程度相当高。
[b,bint,r,rint,ststs]=regress(y,x,alpha) 可用help查阅此命令的 具体用法残差及置信区间可以用rcoplot(r,rint)画图 x=0.1:0.01:0.18;x=[x,0.2,0.21,0.23]'; y=[42,41.5,45,45.5,45,47.5,49,55,50,55,55.5,60.5]'; X=[ones(12,1),x]; [b,bint,r,rint,stats]=regress(y,X,0.05); b,bint,stats,rcoplot(r,rint) 结果含义为 β0=27.0269 β1=140.6194 β0的置信区间是[22.3226,31.7313] β1的置信区间是 [111.7842,169.4546] tji01.m 建模软件建模软件matlab 鲜思东 重庆邮电大学 R2=0.9219 F=118.0670, p<10-4. R是衡量y与x的相关程度的指标,称为相关系数.R越大,x与y 关系越密切.通常R大于0.9才认为相关关系成立. F是一统计指标,p是与F对应的概率,当p<0.05时,回归模型成立. 此例中p=0
<10-4<0.05,所以,所得回归模型成立。观察所得残差分布图,看到第8个数据的残差置信区间不含零点,此点视为异常点,剔除后重新计算。此时键入:X(8,:)=[];y(8)=[]; [b,bint,r,rint,stats]=regress(y,X); b,bint,stats,rcoplot(r,rint) 可以看到:置信区间缩小;R2、F变大,所以应采用修改后的结果。
共分享92篇相关文档