多个特征
表达方法
符号 | 含义 |
---|---|
n | 特征的数量 |
Xj(i)X^{(i)}_jXj(i) | 第i个样本的第j个特征 |
假设函数
对于多个特征的假设函数,有
hθ(x)=θ0+θ1x1+θ2x1+θ3x3+θ4x4
h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_1+\theta_3x_3+\theta_4x_4
hθ(x)=θ0+θ1x1+θ2x1+θ3x3+θ4x4
我们定义x0=1x_0=1x0=1,则有
X={x0x1x2x3x4}
X=\left\{\begin{matrix}x_0\\x_1\\x_2\\x_3\\x_4\end{matrix}\right\}
X=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x0x1x2x3x4⎭⎪⎪⎪⎪⎬⎪⎪⎪⎪⎫
Θ={θ0θ1θ2θ3θ4} \Theta=\left\{\begin{matrix}\theta_0\\\theta_1\\\theta_2\\\theta_3\\\theta_4\end{matrix}\right\} Θ=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧θ0θ1θ2θ3θ4⎭⎪⎪⎪⎪⎬⎪⎪⎪⎪⎫
则
hΘ(X)=ΘTX
h_\Theta(X)=\Theta^TX
hΘ(X)=ΘTX
代价函数
J(Θ)=12m∑i=1m(hΘ(x(i))−y(i))2 J(\Theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})^2 J(Θ)=2m1i=1∑m(hΘ(x(i))−y(i))2
梯度下降
θj:=θj−α∂∂θjJ(Θ) \theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\Theta) θj:=θj−α∂θj∂J(Θ)
不要忘了要同时更新
特征缩放
为了梯度下降的收敛更加迅速,应该将所有的特征的范围缩放到一个区间,比如[−1,1][-1,1][−1,1]
如果他们一个是[−0.00001,0.000001][-0.00001,0.000001][−0.00001,0.000001],或者[−100000,1000000][-100000,1000000][−100000,1000000],另一个是[−1,1][-1,1][−1,1],那么收敛速度会很慢。
另外一种技巧是用用xi−μix_i-\mu_ixi−μi代替xix_ixi使特征的平均值为0。
所有有特征缩放:
xi:=xi−μiSi
x_i:=\frac{x_i-\mu_i}{S_i}
xi:=Sixi−μi
其中μi\mu_iμi是特征的平均值,SiS_iSi是特征的范围。
Debug:调整学习率
通常梯度下降不收敛和学习率有关,学习率过小算法收敛慢,学习率过大算法不收敛。
通常的Debug方法是随着迭代的次数增加画出代价函数随迭代次数变化的曲线,如果下降则算法正常,如果平缓则算法已经收敛,如果波动或者上升则说明学习率过大。
多项式回归
优势线性回归方程不是一次的,而是二次的,这时我们可以用房间面积的平方作为特征量即x2=(size)2x_2=(size)^2x2=(size)2进行计算。
正规方程
如果数据集中有m组样本,每个样本有n个特征
则我们记
X={(X(1))T(X(2))T(X(3))T⋮(X(m))T}
X=\left\{\begin{matrix}(X^{(1)})^T\\(X^{(2)})^T\\(X^{(3)})^T\\\vdots\\(X^{(m)})^T\end{matrix}\right\}
X=⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧(X(1))T(X(2))T(X(3))T⋮(X(m))T⎭⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎫
Θ={θ0θ1θ2θ3⋮θn} \Theta=\left\{\begin{matrix}\theta_0\\\theta_1\\\theta_2\\\theta_3\\\vdots\\\theta_n\end{matrix}\right\} Θ=⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧θ0θ1θ2θ3⋮θn⎭⎪⎪⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎪⎪⎫
Y={y1y2y3⋮ym} Y=\left\{\begin{matrix}y_1\\y_2\\y_3\\\vdots\\y_m\end{matrix}\right\} Y=⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧y1y2y3⋮ym⎭⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎫
有关系
Θ=(XTX)−1XTY
\Theta=(X^{T}X)^{-1}X^{T}Y
Θ=(XTX)−1XTY
octave 表达式
pinv(x'x)*x'*y
XTXX^TXXTX没有逆的情况
造成这种原因有两种
- 有相关的特征存在
- 特征数大于样本数
解决方法(octave)
pinv()//求伪逆