regression

单变量线性回归univariate linear regression

代价函数square error cost function : (J( heta)=frac{1}{2m}sum_{i=1}^{m} (h_{ heta}(x^{(i)}) - y^{(i)})^2)
(2m)(2)是为了消去后续求导时的(2)
其中单变量时 (h_{ heta}(x) = heta_0 + heta_1 x) (h是hypothesis的意思)
上标(i)是指第i组训练数据

梯度下降法gradient decent:
脑补一个三维图像:( heta_0, heta_1,J( heta))
( heta_i -= alpha frac{partial}{partial heta_i}h( heta))
(导为正数时,( heta)应减小;导为负数时,( heta)应增大。 陡的时候快,缓的时候慢)
随着过程的执行, 可以让(alpha)递减去更好的接近(不过即使(alpha)是定值也能走到局部最优点)
只要 (alpha)不会过大 (过大时J可能甚至越大,脑补一个人在盆地两边跳来跳去越跳越高)
无论单变量还是多变量,这种线性回归代价函数一定是bowl shape
当J经过一次迭代后变化不超过原来的(10^-3)时认为converage(如果是陡完平一段继续陡怎么办?)

多变量线性回归multivariate linear regression

(h_{ heta} = heta_0 x_0 + heta_1 x_1 + heta_2 x_2 + cdots + heta_n x_n) 其中(x_0 = 1)
(J( heta)=frac{1}{2m}sum_{i=1}^{m} (h_{ heta}(x^{(i)}) - y^{(i)})^2)
( heta_j) -= (alpha frac{partial}{partial heta_j}h( heta) = alpha frac 1 m sum_{i=1}^m (h_{ heta}(x^{(i)})-y^{(i)})x^{(i)}_j) (展开h,求偏导)
(x^{(i)}_j)表示第i组训练数据的第j个feature

(脑补表格:每列一个特征,最左添加一列(x_0=1),最后一列是标准值y,每行一个example)
(X)(m imes(n+1))矩阵,(Y)(m imes1)列向量
(theta)((n+1) imes1)列向量,(H)(m imes1)列向量

H= X * theta
del = H - Y
J = 1 / (2*m) * sum(del.^2)
theta -= alpha / m * (X’ * del)

为便于观察并减少迭代次数,我们需要对特征进行缩放,使其范围不至于过大,也不至于过小
例如(alphafrac{x-min}{max-min}), (alphafrac{x-mean}{max-min}) 具体情况而定
注意缩放后,predict时的特征也要对应用同种方式缩放
注意不要一个for循环过去把(x_0)也改了(另外注意octave是从一开始存的)

线性回归其他函数设计

如给定房子的长和宽和房价,特征不应是长和宽两个,而应该是占地面积
如给定数据点明显不是直线,可以考虑( heta_0 + heta_1 x + heta_2 x^2)之类的,x是同一个feature, 令(x_i)(x^i)转多变量问题
根号和ln其实长得很像

正规方程normal equation

公式:( heta = (X^TX)^{-1}X^TY) (why?)
其中(X)(m*(n+1)), (Y)(m*1)
求逆即使是伪逆也能算对
使用时建议(m>n)
优势:不必要缩放features,不需要跑多次调整(alpha)
效率比较:梯度下降(省去重复运算)是(n*m*iter),这个是(n^3+n^2m)
n大的时候这个方法肯定不行。但一般来说n应该不大?m比较大?

原文地址:https://www.cnblogs.com/acha/p/11028892.html