机器学习
1.线性回归
线性回归是通过已知的数据集来预测未来的值,所有原数据集中有需要特征值 x x x和结果值 y y y。
假设函数:
单变量特征公式 h θ ( x ) = θ 0 + θ 1 x h_\theta(x)=\theta_0+{\theta_1}x hθ(x)=θ0+θ1x
多变量特征公式
h
θ
(
x
)
=
X
θ
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
{{h}_{\theta }}\left( x \right)={X{\theta }}={{\theta }_{0}}+{{\theta }_{1}}{{x}_{1}}+{{\theta }_{2}}{{x}_{2}}+...+{{\theta }_{n}}{{x}_{n}}
hθ(x)=Xθ=θ0+θ1x1+θ2x2+...+θnxn
令
θ
\theta
θ=$
(
θ
0
θ
1
⋮
θ
n
)
\left(\begin{array}{c}{\theta_{0}} \\ {\theta_{1}} \\ {\vdots} \\ {\theta_{n}}\end{array}\right)
θ0θ1⋮θn
,
X
=
[
1
x
1
(
1
)
x
2
(
1
)
.
.
.
.
x
n
(
1
)
1
x
1
(
2
)
x
2
(
2
)
.
.
.
.
x
n
(
2
)
⋮
1
x
1
(
m
)
x
2
(
m
)
.
.
.
.
x
n
(
m
)
]
X= \begin{bmatrix} 1 & x^{(1)}_1 & x^{(1)}_2 & .... x^{(1)}_n \\ 1 & x^{(2)}_1 & x^{(2)}_2 & .... x^{(2)}_n \\ \vdots \\ 1 & x^{(m)}_1 & x^{(m)}_2 & .... x^{(m)}_n\end{bmatrix}
X=
11⋮1x1(1)x1(2)x1(m)x2(1)x2(2)x2(m)....xn(1)....xn(2)....xn(m)
损失函数是用于衡量预测值与实际值的偏离程度,即模型预测的错误程度
则以参数θ为多特征函数的代价/损失函数
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}}
J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2 =
1
2
m
∑
i
=
1
m
(
X
θ
−
y
)
2
\frac{1}{2m}\sum\limits_{i=1}^{m}{(X\theta-y)^2}
2m1i=1∑m(Xθ−y)2 (
y
y
y为通过特征值得到的结果)
代价函数求导
d J ( θ ) d θ j \frac{dJ\left( \theta \right)}{d\theta_j} dθjdJ(θ)= 1 m ∑ i = 1 m ( h θ ( x ( i ) − y ( i ) ) x j ( i ) \frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)}-y^{(i)})x^{(i)}_j m1i=1∑m(hθ(x(i)−y(i))xj(i) 当 j j j=0时, x 0 x_0 x0=1
接下来是梯度下降求代价函数最小值:
repeat until minimal:{
θ j : = θ j − α ∂ ∂ θ j J ( θ ) {{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta \right) θj:=θj−α∂θj∂J(θ) for j=0 to n
}
根据代价函数求导,令 δ \delta δ= [ 1 m ∑ i = 1 m ( h θ ( x ( i ) − y ( i ) ) x 0 ( i ) 1 m ∑ i = 1 m ( h θ ( x ( i ) − y ( i ) ) x 1 ( i ) ⋮ 1 m ∑ i = 1 m ( h θ ( x ( i ) − y ( i ) ) x n ( i ) ] \begin{bmatrix} \frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)}-y^{(i)})x^{(i)}_0 \\ \frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)}-y^{(i)})x^{(i)}_1 \\ {\vdots} \\ \frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)}-y^{(i)})x^{(i)}_n \end{bmatrix} m1i=1∑m(hθ(x(i)−y(i))x0(i)m1i=1∑m(hθ(x(i)−y(i))x1(i)⋮m1i=1∑m(hθ(x(i)−y(i))xn(i) 则可得 δ \delta δ= 1 m \frac{1}{m} m1 [ 1 1 … 1 x 1 ( 1 ) x 1 ( 2 ) … x 1 ( m ) ⋮ x n ( 1 ) x n ( 2 ) … x n ( m ) ] \begin{bmatrix} 1&1&{\dots}&1 \\x^{(1)}_1 & x^{(2)}_1 &{\dots}& x^{(m)}_1\\{\vdots}\\ x^{(1)}_n & x^{(2)}_n & {\dots} & x^{(m)}_n\end{bmatrix} 1x1(1)⋮xn(1)1x1(2)xn(2)………1x1(m)xn(m) ⋅ ( X θ − y ) {\cdot}(X\theta-y) ⋅(Xθ−y)= 1 m X T ⋅ ( X θ − y ) \frac{1}{m}X^T\cdot(X\theta-y) m1XT⋅(Xθ−y)
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
{{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta \right)
θj:=θj−α∂θj∂J(θ) 可以通过上面的推导变成
θ
=
θ
−
α
1
m
X
T
⋅
(
X
θ
−
y
)
\theta=\theta-\alpha\frac{1}{m}X^T\cdot(X\theta-y)
θ=θ−αm1XT⋅(Xθ−y)
repeat until minimal:{
θ = θ − α 1 m X T ⋅ ( X θ − y ) \theta=\theta-\alpha\frac{1}{m}X^T\cdot(X\theta-y) θ=θ−αm1XT⋅(Xθ−y) for j=0 to n
}
维度: X X X(m,n) y y y(n,1) θ \theta θ(n,1)
1.1 正规方程
上述的梯度下降有可替换方案,则是正规方程。
θ = ( X T ⋅ X ) − 1 ⋅ X T ⋅ y \theta=(X^T{\cdot}X)^{-1}\cdot{X}^T\cdot{y} θ=(XT⋅X)−1⋅XT⋅y
注意:当 ( X T ⋅ X ) − 1 (X^T{\cdot}X)^{-1} (XT⋅X)−1不可逆的时候,可考虑 X X X中的 x 1 … x_1\dots x1… x n x_n xn中特征值是否有线性相关。
梯度下降 | 正规方程 |
---|---|
缺点: 需要选择学习率a 需要多次迭代 特征值范围相差太大,要特征缩放 优点: 当特征数n很大时,能够工作的很好 | 优点: 不需要选择学习率a 不需要多次迭代 不需要特征缩放(feature scaling) 缺点; 当特征数n很大时,运算的很慢。因为求解逆矩阵的时间复杂度是O(N^3) |
一般情况下,当n<10000,选择正规方程,其次当一些复杂的算法最好选择梯度下降。
2.逻辑回归
逻辑回归是用来解决分类问题,将问题预测值最终回归到0或者1上面。
假设函数:
单变量特征公式 h θ ( x ) = θ 0 + θ 1 x h_\theta(x)=\theta_0+{\theta_1}x hθ(x)=θ0+θ1x
多变量特征公式 h θ ( x ) = X θ = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n {{h}_{\theta }}\left( x \right)={X{\theta }}={{\theta }_{0}}+{{\theta }_{1}}{{x}_{1}}+{{\theta }_{2}}{{x}_{2}}+...+{{\theta }_{n}}{{x}_{n}} hθ(x)=Xθ=θ0+θ1x1+θ2x2+...+θnxn
与线性回归不同,我们需要一个sigmoid函数,作为激活函数,将 h θ ( x ) h_\theta(x) hθ(x)的预测值回归到0-1的范围中。
g 代表一个常用的逻辑函数(logistic function)为S形函数(Sigmoid function),公式为:
g
(
z
)
=
1
1
+
e
−
z
g\left( z \right)=\frac{1}{1+{{e}^{-z}}}
g(z)=1+e−z1
合起来,我们得到逻辑回归模型的假设函数:
h
θ
(
x
)
=
1
1
+
e
−
θ
X
{{h}_{\theta }}\left( x \right)=\frac{1}{1+{{e}^{-{{\theta }}X}}}
hθ(x)=1+e−θX1 同理可以写成
g
(
h
θ
(
x
)
)
g(h_\theta(x))
g(hθ(x))
Sigmoid function 函数图像:
代价函数:
J
(
θ
)
=
1
m
∑
i
=
1
m
[
−
y
(
i
)
log
(
h
θ
(
x
(
i
)
)
)
−
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( {{h}_{\theta }}\left( {{x}^{(i)}} \right) \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1-{{h}_{\theta }}\left( {{x}^{(i)}} \right) \right)]}
J(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))] 这里的
l
o
g
log
log是
l
n
ln
ln,相当于以
e
e
e为底。在python中numpy.log(),也是默认以
e
e
e为底。
代价函数求导
d J ( θ ) d θ j \frac{dJ\left( \theta \right)}{d\theta_j} dθjdJ(θ)= 1 m ∑ i = 1 m ( h θ ( x ( i ) − y ( i ) ) x j ( i ) \frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)}-y^{(i)})x^{(i)}_j m1i=1∑m(hθ(x(i)−y(i))xj(i) 当 j j j=0时, x 0 x_0 x0=1
代价函数求导和线性回归的求导是一样的,虽然形式一样,但函数完全不一样。
2.1 正则化
为了解决过拟合的问题,则引入了正则化。
正则化说白了就是在损失函数后面添加一项:
λ 2 m ∑ j = 1 n θ j 2 \frac{\lambda }{2m}\sum\limits_{j=1}^{n}{\theta _{j}^{2}} 2mλj=1∑nθj2
则逻辑回归的损失函数变为: J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) log ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( {{h}_{\theta }}\left( {{x}^{(i)}} \right) \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1-{{h}_{\theta }}\left( {{x}^{(i)}} \right) \right)]}+\frac{\lambda }{2m}\sum\limits_{j=1}^{n}{\theta _{j}^{2}} J(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
线性回归的损失函数变为: J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}} J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2 = 1 2 m ∑ i = 1 m ( X θ − y ) 2 + λ 2 m ∑ j = 1 n θ j 2 \frac{1}{2m}\sum\limits_{i=1}^{m}{(X\theta-y)^2}+\frac{\lambda }{2m}\sum\limits_{j=1}^{n}{\theta _{j}^{2}} 2m1i=1∑m(Xθ−y)2+2mλj=1∑nθj2
对正则化部分求导为: λ m θ j \frac{\lambda}{m}\theta_j mλθj
2.2 线性不可分
对于线性不可分的数据集,因为特征值较少,所以需要特征拟合为更高阶的,然后再进行梯度下降。
这就需要特征映射:特征映射的目的是将输入的两个特征 x 1 x1 x1和 x 2 x2 x2映射到一个更高维度的特征空间,以支持线性不可分数据的逻辑回归。
例如将两个特征 x 1 x1 x1和 x 2 x2 x2映射到二维:
MapFeature = [ 1 x 1 x 2 x 1 x 2 x 1 2 x 2 2 ] \begin{bmatrix}1 \\ x_1\\x_2\\x_1x_2\\x_1^2\\x_2^2 \end{bmatrix} 1x1x2x1x2x12x22
代码如下:
def feature_mapping(x1,x2,power):
data = {}
for i in np.arange(power+1):
for j in np.arange(i + 1):
data['F{}{}'.format(i-j,j)] = np.power(x1,i-j) * np.power(x2,j)
return pd.DataFrame(data)