多特征下的目标函数
- 将多个特征表示成向量
假设训练集中每个样本都有多个特征。
m:样本的个数
n:特征的个数
x ⃗ ( i ) \vec x^{(i)} x(i):第i个样本的特征,其展开后是一个n+1维的向量,定义 x 0 ( i ) = 1 x_0^{(i)}=1 x0(i)=1
[ x 0 ( i ) x 1 ( i ) . . . x n ( i ) ] \begin{bmatrix} x_0^{(i)}\\ x_1^{(i)}\\ ...\\ x_n^{(i)} \end{bmatrix} ⎣⎢⎢⎢⎡x0(i)x1(i)...xn(i)⎦⎥⎥⎥⎤
x j ( i ) x_j^{(i)} xj(i):第i个样本的第j个特征 - 多特征下的预测函数
h θ ( θ 0 , θ 1 , . . . θ n ) = θ 0 x 0 + θ 1 x 1 + . . . + θ n x n h_\theta(\theta_0,\theta_1,...\theta_n)=\theta_0x_0+\theta_1x_1+...+\theta_nx_n hθ(θ0,θ1,...θn)=θ0x0+θ1x1+...+θnxn
用向量表示则为:
h θ ( θ ⃗ ) = θ ⃗ T ⋅ x ⃗ h_\theta(\vec \theta)=\vec \theta^\mathrm T \cdot \vec x hθ(θ)=θT⋅x
代价函数可以写成向量格式如下
J ( θ ⃗ ) = 1 2 m ∑ i = 1 n ( h θ ( x ⃗ ( i ) ) − y ( i ) ) 2 J(\vec \theta)=\frac{1}{2m}\sum_{i=1}^n(h_\theta(\vec x^{(i)})-y^{(i)})^2 J(θ)=2m1i=1∑n(hθ(x(i))−y(i))2
多元梯度下降法
- 一个变量的的梯度下降
重复 θ 0 : = θ 0 − α 1 m ∑ i = 1 n h θ ( ( x ( i ) ) − y ( i ) ) \theta_0:=\theta_0-\alpha \frac {1}{m}\sum_{i=1}^nh_\theta((x^{(i)})-y^{(i)}) θ0:=θ0−αm1i=1∑nhθ((x(i))−y(i))
θ 1 : = θ 1 − α 1 m ∑ i = 1 n h θ ( ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) \theta_1:=\theta_1-\alpha \frac {1}{m}\sum_{i=1}^nh_\theta((x^{(i)})-y^{(i)})\cdot x^{(i)} θ1:=θ1−αm1i=1∑nhθ((x(i))−y(i))⋅x(i)
直到 J ( θ 0 , θ 1 ) 收 敛 J(\theta_0,\theta_1)收敛 J(θ0,θ1)收敛 - 多个变量的梯度下降
重复 θ j : = θ j − α 1 m ∑ i = 1 n h θ ( ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) ( j = 0 , 1 , . . . , n ) \theta_j:=\theta_j-\alpha \frac {1}{m}\sum_{i=1}^nh_\theta((x^{(i)})-y^{(i)})\cdot x_j^{(i)} \ \ \ (j=0,1,...,n) θj:=θj−αm1i=1∑nhθ((x(i))−y(i))⋅xj(i) (j=0,1,...,n)
其中之前定义过 x 0 ( i ) = 1 x_0^{(i)}=1 x0(i)=1,所以对于 θ 0 \theta_0 θ0的更新就和一个变量的梯度下降相同,最初定义 θ 0 = 1 \theta_0=1 θ0=1就是为了表达式的统一。
多元梯度下降法中的方法
特征缩放
用来加快梯度下降的速度。
- 若某个特征的范围过大,则除以它最大值,将变化范围缩小,一般将特征范围缩小到 [-3,3]就可以接受
- 均值归一化: x i − x ‾ i s \frac {x_i-\overline x_i}{s} sxi−xi,其中 x ‾ i \overline x_i xi为该特征的平均值, s s s可以使用标准差,或者简单的用最大值减去最小值即可。这样处理之后,特征值一般会被放缩到 [-0.5,0.5]之间。
选择学习率
代价函数 J ( θ ⃗ ) J(\vec \theta) J(θ)随迭代次数的变化图的用途
- 若出现上升趋势,则说明学习率的取值过大
- 自动收敛测试:可以选择一个合适的阈值( η \eta η),当每次迭代 J ( θ ⃗ ) J(\vec \theta) J(θ)下降小于 η \eta η时,认为已经收敛了
选择学习率
可以选取一系列差一个数量级的值,eg:0.001,0.01,0.1,1等等
或者对其乘以一个常数来产生:0.003,0.03,0.3,3。然后根据
J
(
θ
⃗
)
J(\vec \theta)
J(θ)随迭代次数变化的图来判断哪个值作为学习率最好。
特征和多项式回归
特征的选取
可利用现有特征来构造新特征,比如房屋预测中,知道房子的临街宽度和房子的纵深,那么就可以构造一个面积来作为新特征。
多项式回归
根据训练集中样本的分布选择一个合适的拟合函数,比如随着房子面积的增加,房价先快速增长,后增长速度变缓。就可以构造一个多项式来进行拟合。其预测函数可以构造成
J
(
θ
0
,
θ
1
,
θ
2
)
=
θ
0
+
θ
1
s
i
z
e
+
θ
2
s
i
z
e
J(\theta_0,\theta_1,\theta_2)=\theta_0+\theta_1 size +\theta_2 \sqrt{size}
J(θ0,θ1,θ2)=θ0+θ1size+θ2size,这样拟合效果可能比线性拟合会更好。
正规方程(区别于迭代法的直接解法)
- 代价函数
J
(
θ
)
J(\theta)
J(θ)为二次函数时
直接令 ∂ ∂ θ J ( θ ) = 0 \frac{\partial}{\partial \theta}J(\theta)=0 ∂θ∂J(θ)=0即可求出使得 J ( θ ) J(\theta) J(θ)最小的解。 - 同理,多变量可以由正规方程直接求解
θ ⃗ : = ( x ⃗ T x ⃗ ) − 1 x T y \vec \theta:=(\vec x^T \vec x)^{-1}x^Ty θ:=(xTx)−1xTy
其中 x ⃗ \vec x x为各个样本的各个特征值组成的矩阵,具体构造方法如下,每行都是由一个样本的所有特征组成
[ x ⃗ ( 1 ) T x ⃗ ( 2 ) T . . . x ⃗ ( m ) T ] \begin{bmatrix} \vec x^{(1)}\mathrm T \\ \vec x^{(2)}\mathrm T \\ ...\\ \vec x^{(m)}\mathrm T \end{bmatrix} ⎣⎢⎢⎡x(1)Tx(2)T...x(m)T⎦⎥⎥⎤
y y y为房屋价格组成的一个m维向量。
正规方程在矩阵不可逆的情况下的解决方法
- 使用了线性相关的特征(删除相关的特征)
- 样本数目m小于特征个数(可删除一些特征或者使用正则化方法,在之后将会提到)
- 在Octave中用pinv()来求矩阵的逆,此时矩阵不可逆也不会出错,因为求出的是矩阵的伪逆。