数据建模与分析线性回归小论文Word文档格式.docx
《数据建模与分析线性回归小论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据建模与分析线性回归小论文Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
的值。
为了得到较为准确的回归线,应该满足一个前提,即各样本点尽可能分布在所建立的线性模型周围,因此我们建立目标函数:
(2)
——向量
中的第
个元素;
——模型假设;
——训练集的数量。
因此,我们只要求得使上述函数的值最小时的
1.2目标函数的求解
我们首先从一组
开场,利用最速下降法不断改变
的值来减小
,直到到达我们希望得到的最小值[3]。
对于最速下降法,可利用以下公式而来求解:
(3)
——学习速率〔步长〕;
——下降方向。
其中α为修正学习速率,即搜索的步长,当α过小,会延长搜索的时间,当α过大,可能会错过极值点,导致不收敛。
还有要注意最速下降法会收敛到局部最小值的情况,这种情况即便修正学习速率也不会改变结果,并且接近局部最小值时,因为斜率的减小最速下降法会自动减少每步的补偿[4]。
因此,我们要现注意目标函数的极小值情况,如果有局部最小值可通过调节α参数的大小来跳过局部最小值情况,否那么,就不需跳过,最终通过屡次迭代可以得到最终的理想结果。
2Matlab求解
2.1最速下降法的循环语句
在Matlab程序中,最速下降法是一个不断迭代循环的过程,且
确保同时更新,具体循环如下:
2.2puteCost函数的定义
J函数即目标函数,m代表数据的个数,具体程序如下:
functionJ=puteCost(X,y,theta)
m=length(y);
J=0;
predictions=X*theta;
J=1/(2*m)*(predictions-y)'
*(predictions-y);
end
2.3gradientDescent函数的定义
GradientDescent函数就是最速下降法的迭代与循环过程[5],具体如下:
function[theta,J_history]=gradientDescent(X,y,theta,alpha,num_iters)
J_history=zeros(num_iters,1);
foriter=1:
num_iters
temp1=theta
(1)-(alpha/m)*sum((X*theta-y).*X(:
1));
temp2=theta
(2)-(alpha/m)*sum((X*theta-y).*X(:
2));
theta
(1)=temp1;
theta
(2)=temp2;
J_history(iter)=puteCost(X,y,theta);
2.4散点图的绘制
具体的数据已经根据一定格式记录在txt文件中,因此只需调取其中的数据并将散点绘制到图中[6],具体程序如下:
functionplotData(x,y)
figure;
data=load('
ex1data1.txt'
);
X=data(:
1);
Y=data(:
2);
X=[ones(size(X,1),1),X];
plot(X,Y,'
rx'
'
MarkerSize'
4);
axis([424-525]);
xlabel('
x'
ylabel('
y'
运行程序后得到散点图如图2所示:
图2散点图
Fig.2scatterdiagram
2.5回归线的绘制
通过机器统计学习后得到线性回归线,如图3所示:
图3回归线
fig.3Theregressionline
运行主程序中的语句计算出
和J的最小值,程序如下:
[theta,J_history]=gradientDescent(X,y,theta,alpha,num_iters);
Matlab程序运行后结果报告如图4所示:
图4报告窗口
fig.4Thereportwindow
其中ans结果为Matlab运行的最后一步结果,下面为模型参数值。
假设模型参数值:
,
2.6等高线及三维图的绘制
将
和J的值绘制在三维图上,将
的值以J为高度绘制绘制成等高线图,并将中心点即优化的参数用红色点标记,如下列图5所示:
图5三维图和等高线图
Fig.5Graphicmodelandcontourmap
等高线图中点红点代表了目标函数最小是对应的模型参数值,该参数值下的直线到每一个统计数据点的距离最短,最能代表离散统计数据的线性回归特性。
2.7结论
根据已经给定的城市人口数目与饮品连锁店利润的关系,通过建立目标函数,由Matlab软件进展迭代求解,求解后的线性回归模型函数如下:
(4)
3实际问题
中国人多地少,土地不可再生,土地的稀缺性导致土地价格在未来城市开展中看涨,因此,房价也自然总体趋涨[7]。
对于一些在沪求学的异地研究生们,在毕业后会存在是否留沪的选择。
而房价是我们选择留沪的主要因素。
为了了解XX的住房面积和价格的情况,我从链家网随机查找了120组不同区域以及不同面积的售房交易数据,将这些数据进展整理,并且希望通过统计学习的手段得出一般住房面积和价格的线性回归关系,通过设定两个期望住房面积来估计对应面积下的购房价格。
3.1程序的设计
首先,通过EXCEL表格将收集的数据进展整理,得出了XX地区售房面积和价格对应表格,120组数据具体可见于附录。
将120组数据通过TXT文件进展编辑后导入到Matlab软件中,其局部数据在软件中的表现形式如图6所示:
图6售房面积和价格数据在Matlab中表现形式
Fig.6ThedataexpressionformofhouseareaandpriceonsaleinMatlab
将这些数据以txt的格式保存,文件名为house,以便在主程序加载数据调用。
该最速下降统计学习程序主要分为调用数据、绘制离散图、梯度下降和拟合直线、可视化显示目标函数、目标函数值与迭代次数关系函数这五个局部。
3.1.1调用数据程序
将house.txt文件中的数据加载到data矩阵中,将data矩阵中的第一列中所有值组成一个向量储存在X向量中,将data矩阵中的第二列中所有值组成一个向量储存在y向量中,然后在y向量中计算训练样本数量存储到变量m中。
其相关程序段如下:
house.txt'
%调用数据
X=data(:
1);
y=data(:
2);
%向量存储
%计算训练样本数量
3.1.2绘制离散图程序
该过程主要包括主程序的调用以及调用函数的定义,定义函数首先要翻开一个绘图窗口,然后定义数值范围,最终附上标签绘制图形或者点。
通过这样的方式处理,我们可以清晰的看到XX售房面积和价格的离散分布关系。
主程序局部:
plotData(X,y);
fprintf('
Programpaused.Pressentertocontinue.\n'
定义调用函数plotData(X,y)
%openanewfigurewindow
plot(x,y,'
'
10);
ShanghaimercialHousingPriceinRMBonemillion'
ShanghaimercialHousingAreain10squaremeters'
3.1.3梯度下降和拟合直线程序
此处先对参数进展初始化设置,然后设置初始的迭代次数和计算步长〔学习速率〕,接着进展目标函数的迭代计算,并且不断将模型参数显示在屏幕上,接着画出拟合的直线,在屏幕上显示显示“数据训练和直线拟合〞,最后根据拟合的直线估计80㎡和160㎡的商品房所对应的价格。
RunningGradientDescent...\n'
)
X=[ones(m,1),data(:
1)];
%Addacolumnofonestox
theta=zeros(2,1);
%initializefittingparameters
iterations=1000;
%Somegradientdescentsettings
alpha=0.01;
%puteanddisplayinitialcost
puteCost(X,y,theta)%rungradientdescent
theta=gradientDescent(X,y,theta,alpha,iterations);
%printthetatoscreen
Thetafoundbygradientdescent:
'
%f%f\n'
theta
(1),theta
(2));
%Plotthelinearfit
holdon;
%keeppreviousplotvisible
plot(X(:
2),X*theta,'
-'
legend('
Trainingdata'
Linearregression'
holdoff%don'
toverlayanymoreplotsonthisfigure
predict1=[1,8]*theta;
%Predictvaluesforhouseareaof35,000and70,000
Forhousearea=80,wepredictapriceof%f\n'
...
predict1*1000000);
predict2=[1,16]*theta;
Forhousearea=160,wepredictapriceof%f\n'
predict2*1000000);
Programpaused.Pressentertocontinue.\n'
pause;
定义梯度下降调用函数:
%numberoftrainingexamples
%最速下降发的迭代循环
temp2=theta
(2)-(alpha/m)*sum((X*theta-y).*X(:
theta
(1)=temp1;
theta
(2)=temp2;
%同时更新theta1和theta2
J_history(iter)=puteCost(X,y,theta);
3.1.4可视化显示目标函数
该处Matlab程序主要将目标函数和两模型参数的对应关系通过空间平面和等高线的形式表达出来,根据空间平面我们可以清晰看出目标函数的具体极值分布形式。
根据等高线图可以看出最终迭代计算结果是否为最优解,倘假设红色的点位于等高线的最中间,那么该情况为最优解,否那么,不是最优解。
VisualizingJ(theta_0,theta_1)...\n'
theta0_vals=linspace(-10,10,100);
theta1_vals=linspace(-1,4,100);
J_vals=zeros(length(theta0_vals),length(theta1_vals));
fori=1:
length(theta0_vals)
forj=1:
length(theta1_vals)
t=[theta0_vals(i);
theta1_vals(j)];
J_vals(i,j)=puteCost(X,y,t);
J_vals=J_vals'
;
surf(theta0_vals,theta1_vals,J_vals)
\theta_0'
ylabel('
\theta_1'
contour(theta0_vals,theta1_vals,J_vals,logspace(-2,3,20))
plot(theta
(1),theta
(2),'
10,'
LineWidth'
10);
定义目标函数:
3.2确定计算步长
我们在这里迭代计算时,并不是一开场就能迭代成功,正如前面所说步长过小,会延长搜索的时间,步长过大,可能会错过极值点,导致不收敛。
故我们可通过建立目标函数值和迭代次数的关系函数,将不同的步长以一定的数量级排列,分别作出目标函数值和已运算迭代次数的关系函数曲线。
为了更好的展示目标函数值和已运算迭代次数的对应关系,可以设置足够的迭代次数,设定足够的迭代次数为3000。
目标函数值与迭代次数关系函数程序段:
iterations=3000;
alpha=α1;
%输入第一个步长
[theta,J1]=gradientDescent(X,y,zeros(2,1),alpha,iterations);
alpha=α2;
%输入第二个步长
[theta,J2]=gradientDescent(X,y,zeros(2,1),alpha,iterations);
alpha=α3;
%输入第三个步长
[theta,J3]=gradientDescent(X,y,zeros(2,1),alpha,iterations);
plot(1:
numel(J1),J1,'
-k'
%第一条线显示连续线
numel(J2),J2,'
--k'
%第二条线显示虚线
numel(J3),J3,'
-.k'
%第三条线显示点画线
axis([03000015]);
%限定坐标值显示范围
迭代次数'
J的值'
alpha=α1'
alpha=α2'
alpha=α3'
holdoff
现在选取步长α为1,通过Matlab作出目标函数值和已运算迭代次数的关系函数曲线,判断目标函数值的收敛性。
3.2.1第一组迭代运算判断敛散性
目标函数值与迭代次数关系函数程序段中进展运算作图,为了让图形表示清晰,其坐标值可再一次限定其范围,其运行结果如图7所示。
根据图中结果可知:
步长为1和0.1时,J的函数是发散的,而步长为0.01时,J的函数是收敛的。
图7第一组步长中目标函数值的敛散性
Fig.7Theconvergencecurvesoffirstgroupalpha
3.2.2第二组迭代运算判断敛散性
目标函数值与迭代次数关系函数程序段中进展运算作图,为了让图形表示清晰,其坐标值可再一次限定其范围,其运行结果如图8所示。
在该组所有步长下,J的函数都是收敛的。
图8第二组步长中目标函数值的敛散性
Fig.8Theconvergencecurvesofsecondgroupalpha
3.2.3综合步长分析
在第一组步长分析过程中,当步长为0.01时,J的函数虽然判断是收敛的,但是其具体在多少次迭代下已经收敛到最小值我们不能从图7中看出。
在第二组步长分析过程中,虽然3个步长下均能保证目标函数值能收敛,但是当步长为0.00001时,其所需的迭代次数需到达5000才收敛,其计算时间太长,故不能算是最速下降。
如图9所示,该图在不同的迭代次数尺度下表现不同步长对应目标函数J的收敛特性。
图9综合目标函数收敛特性分析
Fig.9Theconvergencecurvesofpositealpha
根据上图和Matlab迭代计算结果的最小值和对应最小值所需的最少迭代次数填入下表,如下表1。
表1步长和目标函数值
Tab.1ThealphaandJ
步长alpha
目标函数最小值
到达最小值时所需最少迭代次数
0.01
2.495929
1498
0.001
14988
0.0001
149892
由上表可知选用步长数量级为0.01,可实现最速梯度下降。
此处,不再讨论0.01附近的步长所对应的目标函数迭代次数关系。
3.3计算假设模型参数
上面已经得到比拟适合的迭代参数,现在可将步长α为0.01,迭代次数iterations为1500带入到程序中进展计算,其运算结果如下:
ans=
14.2726
-0.7152370.590743
运算结果中ans代表了Matlab软件最后一步运算的结果,gradientdescent代表了模型参数值,即模型参数值,即参数
、
。
以下为可视化的点图、拟合直线图、目标函数与模型参数的立体图以及等高线图。
通过plot函数作图可以得出售房面积和售房价格的离散数据图。
如图10所示,从离散图可以看出数据整体是呈现售房价格与售房面积线性递增的趋势。
图10离散点图
Fig.10Thediscretepointdiagram
接下来通过统计学习的方法拟合直线,如图11所示,从拟合直线可以看出拟合后的售房房价与售房面积的线性关系,直线以上数据差不多为市中心售房价位,直线以下大概为郊区售房价位,直线上大概为市中心与郊区的普遍价位。
图11.线性拟合图
Fig11.Linearregressionfigure
接下来可以通过surf函数和contour函数绘制目标函数与模型参数的立体图以及等高线图。
如图12所示,从曲面图可以看出目标函数随模型参数的变化关系,可以明显看出该目标函数只有一个极小值,因此该处不会出现局部最小值情况。
根据目标函数等高线图可以看出迭代计算后的参数值位于等高线的中间区域,因此可以判断出以上适宜步长优化分析过程是正确的。
图12实际问题三维图和等高线图
Fig.12Graphicmodelandcontourmapinpracticalproblem
通过上面的分析,这里的迭代过程显然是合理的,我们可以直接得出模型的线性回归方程:
在程序中我们添加了预测情况计算,其具体主程序段如下:
Forhousearea=80,wepredictahousepriceof%f\n'
predict1*1000000);
predict2=[1,120]*theta;
Forhousearea=120,wepredictahousepriceof%f\n'
predict2*1000000);
程序运算结果解释如下,当我们考虑购置XX商品房面积为80平方和120平方时,根据所求的线性方程计算所得的房价为4010703.397050元和70173870.477535元。
Matlab中具体输出结果如下:
Forhousearea=80,wepredictahousepriceof4010703.397050
Forhousearea=120,wepredictahousepriceof70173870.477535
3.4步长与迭代次数的可视化分析
上面已经找到适宜的步长和迭代次数,现在我们使用控制变量法对步长和迭代次数进一步分析,通过等高线图的可视