目标属性与已知属性(已知属性的变形或已知属性的组合)存在一种线性关系。
h ( x ) = X θ h(x)= X\theta h(x)=Xθ
X = [ 1 x 1 1 x 2 1 … x n − 1 1 x n 1 1 x 1 2 x 2 2 … x n − 1 2 x n 2 1 x 1 3 x 2 3 … x n − 1 3 x n 3 … … … … … … … … … … … … ] m × ( n + 1 ) θ = [ θ 0 θ 1 θ 2 … θ n ] 1 × ( n + 1 ) X=\begin{bmatrix} 1&x^1_1&x^1_2& \dots &x^1_{n-1}&x^1_{n}\\ 1&x^2_1&x^2_2&\dots&x^2_{n-1}&x^2_{n}\\ 1&x^3_1&x^3_2&\dots&x^3_{n-1}&x^3_{n}\\ \dots&\dots&\dots&\dots&\dots&\dots\\ \dots&\dots&\dots&\dots&\dots&\dots\\ \end{bmatrix} _{m\times (n+1)} \qquad \theta=\begin{bmatrix} \theta_0\\ \theta_1 \\ \theta_2\\ \dots\\ \theta_n\\ \end{bmatrix} _{1\times (n+1)} X=⎣⎢⎢⎢⎢⎡111……x11x12x13……x21x22x23…………………xn−11xn−12xn−13……xn1xn2xn3……⎦⎥⎥⎥⎥⎤m×(n+1)θ=⎣⎢⎢⎢⎢⎡θ0θ1θ2…θn⎦⎥⎥⎥⎥⎤1×(n+1)
上标:m表示样本容量。下标:n表示特征数。
第一列是额外添加的
采用 “均方误差” 来度量模型性能
J ( θ ) = 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2m} \sum_{i=1}^{m} \Big( h(x^{(i)})-y^{(i)} \Big) ^2 J(θ)=2m1i=1∑m(h(x(i))−y(i))2
J J J越小,表示预测值与实际值的差值越小。而 J J J为 θ \theta θ的函数,所以当 J J J最小时, θ \theta θ的值就是模型的最优值。
要使以上代价函数最小,一种最常用的方法就是梯度下降法。
θ j : = θ j − α ∂ ∂ θ j J ( θ ) \theta_j :=\theta_j - \alpha \frac{\partial}{\partial\theta_j}J(\theta) \qquad θj:=θj−α∂θj∂J(θ)
上式中 α \alpha α 表示学习率,并且要注意一点就是式中的 θ \theta θ 是同时更新的,就是说下一次得到的 θ \theta θ 完全是由这次 θ \theta θ 运算得到的(尤其是求导部分)。
对于线性回归来讲,该导数可以具体表示为
∂ ∂ θ j J ( θ ) = 1 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial}{\partial\theta_j}J(\theta)=\frac{1}{m} \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_j^{(i)} ∂θj∂J(θ)=m1i=1∑m(h(x(i))−y(i))xj(i)
如果特征之间的取值范围相差过大,这时就需要对特征进行缩放。通常采取的缩放形式如下:( μ \mu μ可以取平均值, s s s可以取标准差)
x i − μ s \frac{x_i-\mu}{s} \qquad sxi−μ
缩放的程度通常如下表所示:
可以接受的范围 | 不可接受的范围 |
---|---|
− 1 < x < 1 -1 |
− 100 < x < 100 -100 |
0 < x < 3 0 |
− 0.001 < x < 0.0001 -0.001 |
− 2 < x < 0.5 -2 |
50 < x < 1000 50 |
学习率 α \alpha α 太小,可能导致梯度下降算法收敛的非常慢;学习率 α \alpha α 太大,又可能导致梯度下降算法在某几次迭代时不下降,反而增加,甚至不能收敛。
为了选择出合适的学习率,可以画出 J ( θ ) J(\theta) J(θ) 随迭代步数变化的曲线。一般是先用小值比如0.001试一下,再逐渐增大,当找到一个的可行的最小值和一个最大值,就取比最大值小一点的数值。
对于分类问题,输出变量都是离散值,一般而言都会用1、0来表示是、否。而预测的输出通常不会被约束在0、1这两个值上,所以就需要对输出应用一个函数,使值域变为(0,1),并以此来估计 y = 1 y=1 y=1 的概率。这个函数就是sigmoid函数(或logistic函数):
g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+e−z1
这样预测的输出就变为:(这里用 θ T x \theta^T x θTx 来形成决策边界)
h ( x ) = g ( θ T x ) = 1 1 + e − θ T x h(x)=g(\theta^T x)=\frac{1}{1+e^{-\theta^T x}} h(x)=g(θTx)=1+e−θTx1
所采用的代价函数就是:
J ( θ ) = 1 m ∑ i = 1 m C o s t ( h ( x ( i ) ) , y ( i ) ) = 1 m [ ∑ i = 1 m ( − y ( i ) log h θ ( x ( i ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] \begin{aligned} J(\theta) &= \frac{1}{m} \sum_{i=1}^{m} Cost\Big( h(x^{(i)})\, ,\, y^{(i)} \Big) \\ &=\frac{1}{m} \Big[ \sum_{i=1}^{m} \Big( -y^{(i)}\log h_{\theta} (x^{(i)})- (1-y^{(i)}) \log (1-h_{\theta}(x^{(i)} )\Big) \Big] \end{aligned} J(θ)=m1i=1∑mCost(h(x(i)),y(i))=m1[i=1∑m(−y(i)loghθ(x(i))−(1−y(i))log(1−hθ(x(i)))]
这里最小化代价函数的方法还是采用梯度
θ j : = θ j − α ∂ ∂ θ j J ( θ ) : = θ j − α ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) x j ( i ) \begin{aligned} \theta_j &:=\theta_j - \alpha \frac{\partial}{\partial\theta_j}J(\theta)\\ &:=\theta_j - \alpha \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_j^{(i)} \end{aligned} θj:=θj−α∂θj∂J(θ):=θj−αi=1∑m(h(x(i))−y(i))xj(i)
没错,和前面线性回归的梯度函数在形式上是一样的,唯一的不同点就是 h ( x ) \color{red}{h(x)} h(x) 的不同。
可以将其看作是多个二元分类问题。
例如,现在有一个含有3类的数据,如下图所示。
我们可以针对图中的每一类为其生成一个分类器 a 1 , a 2 , a 3 a_1,a_2,a_3 a1,a2,a3( a 1 a_1 a1表示是三角的概率,以此类推)。然后将要测试的数据代入每个分类器,选择值最大的分类器类别作为预测的类别。
在以上的线性回归和逻辑回归中,数据的拟合通常会存在3种情况:
针对过拟合问题,通常会采用以下2种思路进行解决:
需要对其代价函数添加一个正则项:
J ( θ ) = 1 2 m ( ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ) J(\theta)=\frac{1}{2m} \bigg( \sum_{i=1}^{m} \Big( h(x^{(i)})-y^{(i)} \Big) ^2+ \lambda \sum_{j=1}^{n}\theta^2_j \bigg) J(θ)=2m1(i=1∑m(h(x(i))−y(i))2+λj=1∑nθj2)
λ \color{red}\lambda λ 就是正则化参数。注意:这里不需要 θ 0 \theta_0 θ0 正则化,因为其是一个常数项。
其梯度函数也要进行相应的变化:(注意需要将 θ 0 \theta_0 θ0 分离出来)
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) x 0 ( i ) θ j : = θ j − α [ 1 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] \theta_0 :=\theta_0 - \alpha \frac{1}{m} \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_0^{(i)} \\ \theta_j :=\theta_j - \alpha \Big[ \frac{1}{m} \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_j^{(i)}+ \frac{\lambda}{m}\theta_j \Big] θ0:=θ0−αm1i=1∑m(h(x(i))−y(i))x0(i)θj:=θj−α[m1i=1∑m(h(x(i))−y(i))xj(i)+mλθj]
逻辑回归的正则化与线性回归的类似,也是在代价函数的最后添加一个正则项:
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 \begin{aligned} J(\theta) &= \frac{1}{m} \Big[ \sum_{i=1}^{m} \Big( -y^{(i)}\log h_{\theta} (x^{(i)})- (1-y^{(i)}) \log (1-h_{\theta}(x^{(i)} )\Big) \Big] +\frac{\lambda}{2m}\sum^{n} _{j=1}\theta^2_j \end{aligned} J(θ)=m1[i=1∑m(−y(i)loghθ(x(i))−(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
同样的,这里也不需要对 θ 0 \theta_0 θ0 正则化,其梯度函数变为:
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) x 0 ( i ) θ j : = θ j − α [ 1 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] \theta_0 :=\theta_0 - \alpha \frac{1}{m} \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_0^{(i)} \\ \theta_j :=\theta_j - \alpha \Big[ \frac{1}{m} \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_j^{(i)}+ \frac{\lambda}{m}\theta_j \Big] θ0:=θ0−αm1i=1∑m(h(x(i))−y(i))x0(i)θj:=θj−α[m1i=1∑m(h(x(i))−y(i))xj(i)+mλθj]
没错,这个梯度函数与线性回归梯度函数在形式上也是一样的,但要注意 h ( x ) \color{red}{h(x)} h(x) 的不同。
tip:以上的梯度的下降都是在循环中完成的,具体的循环次数需要自己去设置。