注:本文内容资源来自 Andrew Ng 在 Coursera上的 Machine Learning 课程,在此向 Andrew Ng 致敬。算法
笔记(二)中所讨论的房价问题,只考虑了房屋尺寸(Size)一个特征,如图所示:函数
这样只有单一特征的数据,每每难以帮助咱们准确的预测房价走势。所以,考虑采集多个特征的数据值,每每能提高预测效果。例如,选取以下4个特征做为输入值时的状况:学习
对一些概念的解释:测试
n: 特征数量spa
x(i): 第i个训练样本的输入(全部特征)code
y: 输出变量/目标变量orm
xj(i): 第i个训练样本的第j个特征的值ip
对于多个特征,咱们须要更新假设函数,以包含全部的输入特征,对于4个特征的假设函数以下:资源
推而广之,n个特征的假设函数以下图所示。为了方便,咱们定义 x1=1 ,采用列向量来表示参数 θ和 输入 X。io
这样,假设函数 hθ(x) 可表示为:
多特征的线性回归问题,被称为 多变量线性回归问题。
多变量的线性回归问题与单变量相似,因为特征数量从1变为n,因此须要更多的计算。其对好比下:
因为如今有多个特征,且各个特征的取值范围有所不一样。例如,房屋的尺寸通常在数千左右,然而卧室的个数每每是个位数的,要将他们原封不动地表示在图像中,将会形成大部分的数据都拥挤在一个范围内。极度的不均匀将致使梯度降低速度的减缓,没法进行有效区分。那么,就须要利用特征规范化的方法,将全部特征都限定在一个范围左右。
在上图左就能够看出,因为未进行特征规范化,等值线呈现出扁平化,致使收敛速度较慢。而图右,将房屋尺寸除以2000,卧室个数除以5,这样,将两个特征都转化到了 0~1 的范围内,等值线呈现较为均匀的状态,加快了收敛速度
特征规范化
将每个特征值都转化到同一个特定的范围内(一般选 -1 <= x <= 1)
在特征规范化中,另外一个经常使用的方法是均值标准化(mean normalization)。均值标准化的转化方法以下:
概念:
μi: 特征 xi 的均值
si: 特征 xi 的范围(最大值-最小值)
例如:在本例中,x1 和 x2 的转化以下:
均值标准化
利用特征均值与范围,将特征规范到 -0.5~0.5 的范围内。
本节见介绍,如何确认梯度降低正常工做,以及如何选择学习率 α 。
首先,如何确认梯度降低正常工做。咱们的目标是最小化 J(θ) ,并但愿其在每一轮迭代中都减少,直至最后收敛:
简单的收敛测试方法是:若是 J(θ) 的减少小于一个 ε 值(例如10-3)是,说明已经收敛。
对于如何选择 α 的问题,在以前的章节已有讲解。若是 α 过小,收敛速度将会很慢,若是 α 太大,J(θ) 可能不会减少,甚至可能最后不收敛。通常状况下 α 一般选择 0.00一、0.0一、0.一、1 等较小值。
如今咱们了解了多变量线性回归问题。在本节中,咱们将讨论特征的选择以及如何用这些特征得到好的学习算法,以及一部分多项式回归问题,它可使用线性回归的方法来拟合很是复杂的函数,甚至非线性函数。
以预测房价为例。假设你有两个特征,房屋的临街宽度(frontage),以及纵向深度(depth),于是,假设函数以下所示:
固然,咱们也能够用其余的方法来表示这个特征,例如此问题中,咱们能够创造一个面积特征,它等于宽度与深度的乘积,那么假设函数就能够简化为上图下面所示。
再仔细分析房价问题的训练样本,咱们能够粗略地发现,用一条曲线比一条直线效果更好。所以引入多项式回归的概念,以一个多项式假设函数来代替原有的线性函数:
能够看到,若是选择一个二次多项式,能够较好的匹配样本数据,可是当房屋尺寸持续增加时,价格将会呈降低趋势,这与现实是明显不符合的。于是,选择三次多项式多是一个较好的选择。并且,在此问题中,咱们只用了一个特征,即房屋尺寸,却得出了更加复杂的曲线,以带来更加好的效果。
固然,多项式的选择能够是不少种的。咱们还可使用根号函数来做为假设函数,这更加地符合实际状况:
对于某些线性回归问题,使用正规方程来求解参数 θ 的最优值更好。
对于目前咱们使用的梯度降低方法, J(θ) 须要通过屡次的迭代才能收敛到最小值。
而正规方程方法提供了一种求 θ 的解析解法,即直接进行求解,一步获得最优值。
正规方程法的关键点就是对 J(θ) 进行求导,导数等于0的点极为最低点,以此求得最优的 θ ,以下图所示:
利用矩阵计算,能够方便地表示 θ 的计算过程,
利用matlab,能够快速地计算 θ 的最优解:
对比梯度降低和正规方程,能够发现其各有优缺点。
梯度降低须要手动的选择学习率 α ,且须要屡次迭代才能获得最优解。而正规方程不须要选择学习率,也不须要迭代,能够直接求解。可是, θ 的矩阵表示虽然简单,其内部计算是至关复杂的。当特征数 n 相对较小时,使用正规方程求解相对方便。可是,当 n 很大时,正规方程将花费大量的时间进行矩阵求逆运算,这个时候,选用梯度降低方法更好。