1 / 16
文档名称:

数据建模与分析线性回归小论文.doc

格式:doc   大小:759KB   页数:16页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据建模与分析线性回归小论文.doc

上传人:幻影 2021/2/26 文件大小:759 KB

下载得到文件列表

数据建模与分析线性回归小论文.doc

相关文档

文档介绍

文档介绍:上海住房面积与房价的线性回归分析
王明黔
(上海大学 机电工程与自动化学院,上海200444)
摘要:在数据构建统计模型的学****中,统计学****就是其一种基础的学****方法。本文针对城市人口数目与饮品连锁店利润的关系,就已有的数据进行线性回归分析,利用Matlab工具进行数据的线性回归模拟,进而得出城市人口数目与饮品连锁店利润的散点图、拟合直线图与三维等高线图。为了分析上海地区的住房面积与房价的关系,收集最近的售房成交数据,将数据导入到Matlab进行分析,得出上海房价与住房面积的线性关系。
关键词:Matlab;线性回归;目标函数;梯度下降;统计学****br/>基于数据的机器学****就是现代智能技术中十分重要的一个方面,主要研究如何从一些观测数据(样本)出发,得出目前尚不能通过原理性分析得到的规律,并用以对未来数据或无法观测的数据进行预测。现实生活中大量存在我们尚无法准确认识但却可以进行观测的事件。因此,这种机器学****在从现代科学、技术到社会、经济等各领域中都有着十分重要的应用[1]。使用线性回归方法可以对一些观测数据进行分析,把预测事件中一些因素作为自变量,另一些随自变量变化而变化的变量作为因变量,研究它们之间的非确定性因果关系,以便预测因变量的未来发展趋势。根据若干观测数据寻找描述变量之间的函数或统计相关关系的最佳数学表达式,或者匹配数据之间相关关系的最佳拟合曲线,来表达随机性变量间的规律[2]。利用线性回归通过多变量机器学****的方法,可以建立上海住房面积与价格的线性关系,建立数学模型并评估其中的未知参数。
案例分析
1、1 目标函数的建立
根据已知给出的城市人口数目与饮品连锁店利润的一些数据,可以得到一个样本集,如图1,为样本在Matlab软件加载数据图,第一列表示城市人口数目,第二列表示饮品连锁店利润。
图1 城市人口数目与饮品连锁店利润的样本集
Fig 1 Urban population and beverage chain profits of sample set
针对样本集,我们可以假设一个线性模型:
(1)
式中:——假设的线性模型;
——样本/特征;
——参数。
其中,为模型参数,因此问题就可以转换为,求出的值。
为了得到较为准确的回归线,应该满足一个前提,即各样本点尽可能分布在所建立的线性模型周围,因此我们建立目标函数:
(2)
式中:——向量中的第个元素;
——向量中的第个元素;
——模型假设;
——训练集的数量。
因此,我们只要求得使上述函数的值最小时的的值。
1、2 目标函数的求解
我们首先从一组开始,利用最速下降法不断改变的值来减小,直到达到我们希望得到的最小值[3]。
对于最速下降法,可利用以下公式而来求解:
(3)
式中:——学****速率(步长);
——下降方向。
其中α为修正学****速率,即搜索的步长,当α过小,会延长搜索的时间,当α过大,可能会错过极值点,导致不收敛。还有要注意最速下降法会收敛到局部最小值的情况,这种情况即便修正学****速率也不会改变结果,并且接近局部最小值时,因为斜率的减小最速下降法会自动减少每步的补偿[4]。因此,我们要现注意目标函数的极小值情况,如果有局部最小值可通过调节α参数的大小来跳过局部最小值情况,否则,就不需跳过,最终通过多次迭代可以得到最终的理想结果。
Matlab求解
2、1 最速下降法的循环语句
在Matlab程序中,最速下降法就是一个不断迭代循环的过程,且确保同时更新,具体循环如下:
2、2 ComputeCost函数的定义
J函数即目标函数,m代表数据的个数,具体程序如下:
function J = computeCost(X, y, theta)
m = length(y);
J = 0;
predictions=X*theta;
J=1/(2*m)*(predictions-y)'*(predictions-y);
end
2、3 gradientDescent函数的定义
GradientDescent函数就就是最速下降法的迭代与循环过程[5],具体如下:
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)
m = length(y);
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
temp1 = t