`
airu
  • 浏览: 267150 次
  • 性别: Icon_minigender_1
  • 来自: 云南
社区版块
存档分类
最新评论

机器学习-线性回归-特征优化

阅读更多

上一篇我们知道了线性回归的理论知识,如果看懂了就有大干一场的冲动。于是上代码,这时,很多问题可能就浮出水面了。

 

Feature Scaling

多个特征变量的情况下,这些特征变量五花八门,数值上从几千到个位数,总觉得不靠谱。

这里,NG大神用等高图给我们分析了这种情况,特征变量的差距,只会增加我们的迭代次数,是的学习性能下降。等高图画出来,是个狭长的椭圆,要到圆心自然经历颇多,所以,通过对特征向量的优化,使得等高图变得更圆,迭代次数自然就更少,能够更快的到达圆心(最小成本)(收敛)。这类问题叫做Feature Scaling

 

 

这里提供了两种算法:(min-max)

第一种,把特征值控制在[-1,1]之间。

 (x-mean(x))/(max(x)-min(x))

这里mean是平均值,max是最大值,min是最小值。对每一个特征值做这样的处理,得到的就是新的特征值,符合[-1,1]的要求。

 

第二种,把特征值控制在[-0.5,0.5]之间。(z-score)

x-mean(x)/std(x)

这里的std是标准方差,公式如下



 N就是训练数量。μ是算数平均值

 

在我们使用特征向量时,可以统一先做Feature scaling

但是这里如果用了bias,偏置的话,是不需要对偏置做feature scaling的,因为偏置的特征向量是常数1,已经在我们的范围了。

这里NG给的例子,还是房价预测,我们的特征向量可能是房屋面积(50-200),也可能是房间数(1.5),所以这里可以使用feature scaling,如果特征值都很阶级,在同一个数量级,那么可以忽略。

 

第二个问题,则是 α

这个是我们用在梯度下降算法中,放在对参数求导前面的,我们叫学习率(Learning rate)

这个数值的大小,该取多少呢?

这里,NG通过分析迭代次数,和cost 函数的关系曲线,来分析。前提是确保算法实现无误。



 

理论上,只要α 足够小,我们的算法就可以正常工作。如果随着迭代次数上升,cost函数值增大,或者反复,那么就需要更小的 α 值。

α 过大为什么会是的梯度下降有问题呢? 可以理解为步子太大,越过了收敛,结果反复后,cost值越来越大。

还有一个问题,我们的cost 函数是不可能小到0的,因为实际情况和模型永远不可能完美拟合。为了确保达到我们的要求,那么当cost值的变化小于某个数值时,我们就可以认为,我们已经找到合适的模型参数。

这个值的选取,如下图NG说的,可以在10的负三次方内,就是0.001-0.009之间吧。其实这个参数如果太大,那么我们学的不是很完美,如果太小,那么可能学习时间又会太长。这就是需要衡量考虑率的问题。

实际运用中需要根据实际情况不断尝试。

 



 
 

正常的情况应该是图上这个。当然迭代次数有可能会是上千,或者上万。

 

你也许会觉得,这个线性回归很复杂,那么多东西需要考虑。

这里也有一种便捷的方法,不需要feature scaling,不需要学习率,直接计算,这就是

Normal Equation

 

实际上这就是用正规方程法求解θ参数

这种方法,不用学习率,也不用做feature scaling

 

θ = (X^TX)^(-1)X^Ty

 

这里T表示转置,-1表示逆。所以这里有个问题,求逆矩阵。并非所有矩阵都有逆矩阵。(奇异矩阵,非方阵)

如果用octave来计算,就可以忽略有无逆矩阵。

pinv(X'*X)*X'*y

 

既然有这样的方法,那么是否不需要用梯度递减了?

 

看Andrew NG 老师为我们总结的。



 

也就是说,主要看features的个数,如果在1000个以内,可以用Normal Equation。

 

 

 

 

 

 

  • 大小: 1.1 KB
  • 大小: 157.2 KB
  • 大小: 191.3 KB
  • 大小: 139.4 KB
  • 大小: 213.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics