回归分析就是利用样本(已知数据),产生拟合方程,从而(对未知数据)进行预测
回归算法(模型):用平均值,期望,方差,标准差进行预测估计
回归分析中,又依据描述自变量与因变量之间因果关系的函数表达式是线性的还是非线性的,分为线性回归分析和非线性回归分析。
通过指数来进行判断即可,线性就是每个变量的指数都是1(一次方),为直线形态,而非线性就是至少有一个变量的指数不是1(二次方或多次方),为曲线形态。
一元线性回归:
若X与Y之间存在着较强的相关关系,则我们有Y≈α+βX
若α与β的值已知,则给出相应的X值,我们可以根据Y≈α+βX得到相应的Y的预测值。
%clc%clear%%%目标函数:y=Ax12+Bx22+Cx1+Dx2+Ex1*x2+F (这是一个二次函数,两个变量,大写的字母是常数)%导入数据y=[7613.51 7850.91 8381.86 9142.81 10813.6 8631.43 8124.94 9429.79 10230.81 10163.61 9737.56 8561.06 7781.82 7110.97]';x1=[7666 7704 8148 8571 8679 7704 6471 5870 5289 3815 3335 2927 2758 2591]';x2=[16.22 16.85 17.93 17.28 17.23 17 19 18.22 16.3 13.37 11.62 10.36 9.83 9.25]';X=[ones(size(y)) x1.^2 x2.^2 x1 x2 x1.*x2];%开始分析[b,bint,r,rint,stats] = regress(y,X)scatter3(x1,x2,y,'filled') %scatter可用于画散点图ahold on%%%拟合,三维视图显示hold on %不要清除计算数据,在刚刚那副散点图上接着画x1fit = min(x1):1:max(x1); %设置x1的数据间隔x2fit = min(x2):1:max(x2); %设置x2的数据间隔[X1FIT,X2FIT] = meshgrid(x1fit,x2fit); %生成一个二维网格平面,也可以说生成X1FIT,X2FIT的坐标YFIT=b(1)+b(2)*X1FIT.^2+b(3)*X2FIT.^2+b(4)*X1FIT+b(5)*X2FIT+b(6)*X1FIT.*X2FIT; %代入已经求得的参数,拟合函数式mesh(X1FIT,X2FIT,YFIT) %X1FIT,X2FIT是网格坐标矩阵,YFIT是网格点上的高度矩阵view(10,10) %改变角度观看已存在的三维图,第一个10表示方位角,第二个表示俯视角。%方位角相当于球坐标中的经度,俯视角相当于球坐标中的纬度xlabel('x1') %设置X轴的名称ylabel('x2') %设置y轴的名称zlabel('y') %设置z轴的名称hold on%%figure(2)rcoplot(r,rint); %残差分析,作残差图
我们可以用残差图来估计观察或预测到的误差error(残差residuals)与随机误差(stochastic error)是否一致。用一个丢骰子的例子最好理解了。当你丢出去一个六面的骰子时,你不应该能够预测得到哪面点数向上。然而,你却可以评估在一系列投掷后,正面向上的数字是否遵循一个随机模式,你自己心中就会想象出一个随机散布的残差图。如果,有人背着你对骰子做了点手脚,让六点更频繁的出现向上,这时你心中的残差图看上去就似乎有规律可循,从而不得不修改心中的模型,让你狐疑骰子一定有问题。
相同的原则也适用于回归模型。你不应该能够预测任何给定的观察或预测结果的错误(或者说差别)。你需要确定残差是否与随机误差相互呈现一致性,就像丢骰子一样,残差若整体呈现“很古怪”的模式,你就需要回头修改你的回归模型了。