多个特征
表达方法
符号 | 含义 |
---|---|
n | 特征的数量 |
X j ( i ) X^{(i)}_j Xj(i) | 第i个样本的第j个特征 |
假设函数
对于多个特征的假设函数,有
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
1
+
θ
3
x
3
+
θ
4
x
4
h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_1+\theta_3x_3+\theta_4x_4
hθ(x)=θ0+θ1x1+θ2x1+θ3x3+θ4x4
我们定义
x
0
=
1
x_0=1
x0=1,则有
X
=
{
x
0
x
1
x
2
x
3
x
4
}
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
)
=
Θ
T
X
h_\Theta(X)=\Theta^TX
hΘ(X)=ΘTX
代价函数
J ( Θ ) = 1 2 m ∑ i = 1 m ( 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 − α ∂ ∂ θ j J ( Θ ) \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],那么收敛速度会很慢。
另外一种技巧是用用 x i − μ i x_i-\mu_i xi−μi代替 x i x_i xi使特征的平均值为0。
所有有特征缩放:
x
i
:
=
x
i
−
μ
i
S
i
x_i:=\frac{x_i-\mu_i}{S_i}
xi:=Sixi−μi
其中
μ
i
\mu_i
μi是特征的平均值,
S
i
S_i
Si是特征的范围。
Debug:调整学习率
通常梯度下降不收敛和学习率有关,学习率过小算法收敛慢,学习率过大算法不收敛。
通常的Debug方法是随着迭代的次数增加画出代价函数随迭代次数变化的曲线,如果下降则算法正常,如果平缓则算法已经收敛,如果波动或者上升则说明学习率过大。
多项式回归
优势线性回归方程不是一次的,而是二次的,这时我们可以用房间面积的平方作为特征量即 x 2 = ( s i z e ) 2 x_2=(size)^2 x2=(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 = { y 1 y 2 y 3 ⋮ y m } Y=\left\{\begin{matrix}y_1\\y_2\\y_3\\\vdots\\y_m\end{matrix}\right\} Y=⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧y1y2y3⋮ym⎭⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎫
有关系
Θ
=
(
X
T
X
)
−
1
X
T
Y
\Theta=(X^{T}X)^{-1}X^{T}Y
Θ=(XTX)−1XTY
octave 表达式
pinv(x'x)*x'*y
X T X X^TX XTX没有逆的情况
造成这种原因有两种
- 有相关的特征存在
- 特征数大于样本数
解决方法(octave)
pinv()//求伪逆