Standford 机器学习 线性回归(Linear Regission)
2015-09-22 18:21
369 查看
转自http://blog.csdn.net/jackie_zhu/article/details/8881897
1. 单变量的线性回归(Linear Regission with onevariable)
监督学习的样本中都含有对于每个输入变量的输出值,通过建立模型并且学习得到一个模型之后,使该模型可以通过给定的输入,预测出输出。
[align=left] [/align]
现在有这样的一组样本数据,我们需要通过该样本输入学习模型预测给定面积的房子的价格,建立模型:
Notation:m是样本个数,x是面积,y是价格
样本分布如下:
[align=left] [/align]
现在要学习出一个最适合该样本数据的模型,让训练出的模型最接近样本的输出y,自然而然会想到CostFunction为
,(至于为什么是它,请参考ttp://blog.csdn.net/usingnamespace_std/article/details/8883782),学习的目标是得到一个theta值使J最小
J(theta0,theta1)的图像是这样的
[align=left] [/align]
上面的每一个点对应于
中的一个模型。
[align=left] [/align]
2. 梯度下降法(Gradient Descent)
梯度下降法的原理是选取一个初始点,选取下降最快的方向向下走,直到走到极值点(即梯度为0的点)。
算法描述:
由于函数可能存在多个极小值点,因此,梯度下降法得到的是局部最小值,而对于convex函数,局部最小值就是全局最小值,线性回归模型中的目标函数J就是convex函数,因此不用担心取不到最小值的问题。对于非convex函数,那么需要选取多个初始值进行梯度下降,选取最好的那个值。
算法描述如下:
这边注意每次迭代更新是同时更新(simultaneousupdate),即对j时求偏导时,用到的theta是旧的theta。
Alpha的选取:如果alpha选取得太大,会导致算法不会收敛,因为每次迭代后梯度都会变大,而离目标越来越远,如果在实践中发现算法未能收敛,那么有可能是alpha选的太大了。
[align=left] [/align]
相反,如果alpha选取过小虽然对算法的收敛没有影响,但是会影响到算法的效率,它会导致算法过慢收敛。
Batch Gradient Decent:
每次迭代需要计算所有样本的梯度之和,如果样本数量过大,算法的效率会很低。
Stochastic Gradient Decent:
每次只用一个样本进行迭代,虽然每次迭代不一定是往梯度最大的方向走的,但是也会最终收敛到最优值。
[align=left] [/align]
通过梯度下降法来求解J(theta)根据算法定义,可以推导出:
[align=left] [/align]
3. 多变量的线性回归(Linear regission withmultiple Variable)
现实情况中,房价会受到面积以外的其他因素影响,比如房价数量,楼层数,房子的年龄等。
[align=left] [/align]
每一个样本的feature可以用一个向量X来表示,如果有n个feature,那么X的维数是n+1维的,多出来的一维用来表示模型中的常数项,建立以下模型。
[align=left] [/align]
[align=left][/align]
H(theta)可以用向量表示成
[align=left][/align]
那么它的Cost function就是
[align=left] [/align]
用向量表示成如下:
[plain] view
plaincopy
function J = computeCostMulti(X, y, theta)
J = 0.5 / m * ((X * theta - y)' * (X * theta - y));
end
用梯度下降法来求最优值:
[align=left] [/align]
用向量可以表示成:
[cpp] view
plaincopy
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
theta = theta - alpha / m * ((X * theta - y)' * X)';
end
end
4. Feature Scaling
如果theta的数据范围差距很大,需要将这些数据标准化,原因是不标准化可能需要更多次的迭代,影响算法效率。
[align=left] [/align]
Featurescaling的目标是把每一个特征xi变换成在-1到1的范围内,方法有mean normalization:把xi替换成xi-u(u是所有样本的xi的平均值),这样所有的样本就分布在0左右了,然后再除以样本的范围或者样本的标准差
模型学习的时候,正常情况下,目标函数变化如下
[align=left] [/align]
如果alpha太大,则会出现下面的情况
[align=left] [/align]
5. 多项式回归
如果把x的特征选取多项式比如x^2,sqrt(x),那么可以拟合成曲线,这里要注意过拟合的问题,另外模型的选取要符合实际情况。
1. 单变量的线性回归(Linear Regission with onevariable)
监督学习的样本中都含有对于每个输入变量的输出值,通过建立模型并且学习得到一个模型之后,使该模型可以通过给定的输入,预测出输出。
[align=left] [/align]
现在有这样的一组样本数据,我们需要通过该样本输入学习模型预测给定面积的房子的价格,建立模型:
Notation:m是样本个数,x是面积,y是价格
样本分布如下:
[align=left] [/align]
现在要学习出一个最适合该样本数据的模型,让训练出的模型最接近样本的输出y,自然而然会想到CostFunction为
,(至于为什么是它,请参考ttp://blog.csdn.net/usingnamespace_std/article/details/8883782),学习的目标是得到一个theta值使J最小
J(theta0,theta1)的图像是这样的
[align=left] [/align]
上面的每一个点对应于
中的一个模型。
[align=left] [/align]
2. 梯度下降法(Gradient Descent)
梯度下降法的原理是选取一个初始点,选取下降最快的方向向下走,直到走到极值点(即梯度为0的点)。
算法描述:
由于函数可能存在多个极小值点,因此,梯度下降法得到的是局部最小值,而对于convex函数,局部最小值就是全局最小值,线性回归模型中的目标函数J就是convex函数,因此不用担心取不到最小值的问题。对于非convex函数,那么需要选取多个初始值进行梯度下降,选取最好的那个值。
算法描述如下:
这边注意每次迭代更新是同时更新(simultaneousupdate),即对j时求偏导时,用到的theta是旧的theta。
Alpha的选取:如果alpha选取得太大,会导致算法不会收敛,因为每次迭代后梯度都会变大,而离目标越来越远,如果在实践中发现算法未能收敛,那么有可能是alpha选的太大了。
[align=left] [/align]
相反,如果alpha选取过小虽然对算法的收敛没有影响,但是会影响到算法的效率,它会导致算法过慢收敛。
Batch Gradient Decent:
每次迭代需要计算所有样本的梯度之和,如果样本数量过大,算法的效率会很低。
Stochastic Gradient Decent:
每次只用一个样本进行迭代,虽然每次迭代不一定是往梯度最大的方向走的,但是也会最终收敛到最优值。
[align=left] [/align]
通过梯度下降法来求解J(theta)根据算法定义,可以推导出:
[align=left] [/align]
3. 多变量的线性回归(Linear regission withmultiple Variable)
现实情况中,房价会受到面积以外的其他因素影响,比如房价数量,楼层数,房子的年龄等。
[align=left] [/align]
每一个样本的feature可以用一个向量X来表示,如果有n个feature,那么X的维数是n+1维的,多出来的一维用来表示模型中的常数项,建立以下模型。
[align=left] [/align]
[align=left][/align]
H(theta)可以用向量表示成
[align=left][/align]
那么它的Cost function就是
[align=left] [/align]
用向量表示成如下:
[plain] view
plaincopy
function J = computeCostMulti(X, y, theta)
J = 0.5 / m * ((X * theta - y)' * (X * theta - y));
end
用梯度下降法来求最优值:
[align=left] [/align]
用向量可以表示成:
[cpp] view
plaincopy
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
theta = theta - alpha / m * ((X * theta - y)' * X)';
end
end
4. Feature Scaling
如果theta的数据范围差距很大,需要将这些数据标准化,原因是不标准化可能需要更多次的迭代,影响算法效率。
[align=left] [/align]
Featurescaling的目标是把每一个特征xi变换成在-1到1的范围内,方法有mean normalization:把xi替换成xi-u(u是所有样本的xi的平均值),这样所有的样本就分布在0左右了,然后再除以样本的范围或者样本的标准差
模型学习的时候,正常情况下,目标函数变化如下
[align=left] [/align]
如果alpha太大,则会出现下面的情况
[align=left] [/align]
5. 多项式回归
如果把x的特征选取多项式比如x^2,sqrt(x),那么可以拟合成曲线,这里要注意过拟合的问题,另外模型的选取要符合实际情况。
相关文章推荐
- JSP页面通过jstl进行变量累加
- Codeforces Round #260 (Div. 1) B. A Lot of Games Trie + 博弈
- APP崩溃后自动重启
- Android系统Recovery工作原理之使用update.zip升级过程分析(三)---Android系统的三种启动模式
- 如何将一个文件里不包含某个字符的行输出到另一个文件?
- 使用ASIO时,注意事项【后不断更新补充】
- “选课系统”项目开题报告
- 怎么看待家装O2O的未来发展?
- Standford机器学习 逻辑回归(Logistic Regission)以及过拟合问题解决(Regularization)
- UiAutoMator Helper自动运行测试用例
- Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的解决
- 【Lua】闭包
- 感谢曾经不放弃的自己
- php函数的声明与使用
- Sql Server存储过程中xml转table
- Assignment 1-2 :Randomized Queues
- leetcode 152 Maximum Product Subarray
- ERROR: Field 'scId' doesn't have a default value
- jquery-ui-1.11 autocomplete使用
- Android微信支付之免jar包集成方式(简单至极)