机器学习-多变量的线性回归模型与实现笔记
2015-11-04 00:06
281 查看
0x00 代价函数
多变量的回归问题中,feature有多个,比如房屋价格预测问题,feature除了房屋的面积,还可能有房子的间数、房子的地段、房子的层数等因素所影响。在多变量回归问题中,我们的假设函数如下:在此基础上,计算回归的代价函数为:
根据上面的公式,在Octave中,一行代码即可实现:
function J = computeCost(X, y, theta) m = length(y); % 训练集数目 J = 1/(2*m) * sum((X*theta - y) .^ 2) ; % 代价函数 end
X为feature的矩阵(房子的面积、层面等),y为训练集结果矩阵(即训练集中的真实房价),theta为回归的参数(有多个)。
0x01 梯度下降
我们知道,对于回归模型,其核心是在求合适的各个theta参数。在求回归模型中合适的参数时,通常使用梯度下降算法,公式如下:
这里需要注意的是,对于n+1个参数,theta1为1是恒定的,不用处理,其余n个参数进行
同时更新。
对于单变量的梯度下降算法,Octave代码如下:
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters) m = length(y); % number of training examples J_history = zeros(num_iters, 1); for iter = 1:num_iters, % 同步更新 t1 = theta(1) - alpha * (1/m) * sum((X*theta - y)); t2 = theta(2) - alpha * (1/m) * sum((X*theta - y) .* X(:,2)) ; theta(1) = t1 ; theta(2) = t2 ; J_history(iter) = computeCost(X, y, theta); end; end;
在求
theta(1)和
theta(2)时,使用了两个
temp变量,是为了对两个theta的值进行同时更新操作(先更新后赋值)。
在多变量的梯度下降算法实现中,只需要同时更新各个theta即可:
function [theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters) m = length(y); % number of training examples J_history = zeros(num_iters, 1); for iter = 1:num_iters temp = zeros(size(theta,1), 1); % 同时更新theta值 for i=1:size(theta,1), temp(i) = theta(i) - alpha * (1/m) * sum((X*theta - y).* X(:,i)) ; end; % 更新之后进行赋值操作 for i=1:size(theta,1), theta(i) = temp(i); end; J_history(iter) = computeCostMulti(X, y, theta); end end
0x02 验证模型
这里举出单变量拟合的例子,对于多变量回归,其实是一回事儿。可以看到,经过算法运行,求取了合适的参数组合,图中的蓝色直线即拟合的结果。
右图即代价函数的等高线,上的点是最终的minJ取值。
综上所述,对于多变量回归问题,我们的处理思路是寻找feature,求出假设函数,求出代价函数,在代价函数基础上利用梯度下降算法,最后验证模型的效果。实际上,在机器学习算法的逻辑回归模型中,也是这个过程。
相关文章推荐
- 小作坊的安全管家之软件管理
- 图像滤镜艺术---ZPhotoEngine超级算法库
- iOS学习之iOS沙盒(sandbox)机制和文件操作(一)
- varnish学习笔记
- 《30天自制操作系统》学习笔记
- linux 下MySQL主从复制
- 为什么费尽心思讲产品卖点,用户仍然不相信你?
- 轻松掌握Linux关机重启命令
- JSP中内建exception对象时出现500错误的解决方法
- jsp编程中session的用法实例分析
- 浅析.NET逻辑分层架构
- 总结十条.NET异常处理建议
- PHP实现GIF图片验证码
- PHP扩展开发教程(总结)
- 两种php去除二维数组的重复项方法
- php实现分页功能的3种方法第1/3页
- php对二维数组进行相关操作(排序、转换、去空白等)
- php实现网站留言板功能
- PHP实现HTML页面静态化的方法
- php对文件夹进行相关操作(遍历、计算大小)