介绍机器学习 定义机器学习的定义:一个程序被认为能从经验E 中学习,解决任务T ,达到性能度量值P ,当且仅当,有了经验E 后,经过P 评判,程序在处理T 时的性能有所提升。(Tom Mitchell ,卡内基梅隆大学)
分类监督学习:通过已有的一部分输入数据与输出数据之间的对应关系,生成一个函数,将输入映射到合适的输出,例如回归和分类 非监督学习:直接对输入数据集进行建模,例如聚类 半监督学习:综合利用类标的数据和没有类标的数据,来生成合适的分类函数。
线性回归 代价函数(cost Function)房价预测问题:m m m 代表训练集中实例的数量x x x 代表特征/输入变量y y y 代表目标变量/输出变量( x , y ) \left( x,y \right) ( x , y ) 代表训练集中的实例( x ( i ) , y ( i ) ) (x^{(i)}, y^{(i)}) ( x ( i ) , y ( i ) ) 代表第i i i 个观察实例h h h 代表学习算法的解决方案或函数也称为假设(hypothesis )
一种可能的表达式:h θ ( x ) = θ 0 + θ 1 x h_{\theta }\left ( x \right ) = \theta _{0} + \theta _{1}x h θ ( x ) = θ 0 + θ 1 x 模型所预测的误差值与训练集中实际值之间的差距就是建模误差(modeling error)
我们的目标便是选择出可以使得建模误差的平方和能够最小的模型参数。 即使得代价函数 J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J \left( \theta_0, \theta_1 \right) = \frac{1}{2m}\sum\limits_{i=1}^m \left( h_{\theta}(x^{(i)})-y^{(i)} \right)^{2} J ( θ 0 , θ 1 ) = 2 m 1 i = 1 ∑ m ( h θ ( x ( i ) ) − y ( i ) ) 2 最小。
代价函数也称为平方误差函数,或平方误差代价函数。
梯度下降法梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数J ( θ 0 , θ 1 ) J(\theta_{0}, \theta_{1}) J ( θ 0 , θ 1 ) 的最小值。
梯度下降背后的思想是:开始时我们随机选择一个参数的组合( θ 0 , θ 1 , . . . . . . , θ n ) \left( \theta_{0},\theta_{1},......,\theta_{n} \right) ( θ 0 , θ 1 , . . . . . . , θ n ) ,计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到找到一个局部最小值(local minimum ),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum ),选择不同的初始参数组合,可能会找到不同的局部最小值。
批量梯度下降(batch gradient descent )算法的公式为: repeat until convergence {θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) \theta_{j} :=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J\left(\theta_{0}, \theta_{1}\right) θ j : = θ j − α ∂ θ j ∂ J ( θ 0 , θ 1 ) (for j = 0 j=0 j = 0 and j = 1 j=1 j = 1 ) }
线性回归算法对线性回归的算法运用梯度下降法,关键是对代价函数求导,即:
∂ ∂ θ j J ( θ 0 , θ 1 ) = ∂ ∂ θ j 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \frac{\partial }{\partial \theta _{j} }J\left ( \theta _{0}, \theta _{1}\right ) = \frac{\partial }{\partial \theta _{j} }\frac{1}{2m} \sum_{i=1}^{m}(h_{\theta }(x^{(i)})-y^{(i)})^2 ∂ θ j ∂ J ( θ 0 , θ 1 ) = ∂ θ j ∂ 2 m 1 i = 1 ∑ m ( h θ ( x ( i ) ) − y ( i ) ) 2
j = 0 j=0 j = 0 时:∂ ∂ θ 0 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \frac{\partial}{\partial \theta_{0}} J\left(\theta_{0}, \theta_{1}\right)=\frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) ∂ θ 0 ∂ J ( θ 0 , θ 1 ) = m 1 ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) )
j = 1 j=1 j = 1 时:∂ ∂ θ 1 J ( θ 0 , θ 1 ) = 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) ) \frac{\partial}{\partial \theta}_{1} J\left(\theta_{0}, \theta_{1}\right)=\frac{1}{m} \sum_{i=1}^{m}\left(\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \cdot x^{(i)}\right) ∂ θ ∂ 1 J ( θ 0 , θ 1 ) = m 1 ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) )
则算法改写成:
Repeat { θ 0 : = θ 0 − a 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \theta_{0} :=\theta_{0}-a \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) θ 0 : = θ 0 − a m 1 ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) θ 1 : = θ 1 − a 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) ) \theta_{1} :=\theta_{1}-a \frac{1}{m} \sum_{i=1}^{m}\left(\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) \cdot x^{(i)}\right) θ 1 : = θ 1 − a m 1 ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) )
}
批量梯度下降算法:每一步中都用到了所有的训练样本数据。
多维变量线性回归多维变量线性回归(Linear Regression with Multiple Variables) 增添更多特征后,我们引入一系列新的注释:n n n 代表特征的数量x ( i ) {x^{\left( i \right)} } x ( i ) 代表第 i i i 个训练实例,是特征矩阵中的第i i i 行,是一个向量 (vector )。 比方说,上图的x ( 2 ) = [ 1416 3 2 40 ] {x}^{(2)}\text{=}\begin{bmatrix} 1416\\\ 3\\\ 2\\\ 40 \end{bmatrix} x ( 2 ) = ⎣ ⎢ ⎢ ⎡ 1 4 1 6 3 2 4 0 ⎦ ⎥ ⎥ ⎤ x j ( i ) {x}_{j}^{\left( i \right)} x j ( i ) 代表特征矩阵中第 i i i 行的第 j j j 个特征,也就是第 i i i 个训练实例的第 j j j 个特征。 如上图的x 2 ( 2 ) = 3 , x 3 ( 2 ) = 2 x_{2}^{\left( 2 \right)}=3,x_{3}^{\left( 2 \right)}=2 x 2 ( 2 ) = 3 , x 3 ( 2 ) = 2 , 支持多变量的假设 h h h 表示为:h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_{\theta}\left( x \right)={\theta_{0} }+{\theta_{1} }{x_{1} }+{\theta_{2} }{x_{2} }+...+{\theta_{n} }{x_{n} } h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n , 这个公式中有n + 1 n+1 n + 1 个参数和n n n 个变量,为了使得公式能够简化一些,引入x 0 = 1 x_{0}=1 x 0 = 1 ,则公式转化为:h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_{\theta} \left( x \right)={\theta_{0} }{x_{0} }+{\theta_{1} }{x_{1} }+{\theta_{2} }{x_{2} }+...+{\theta_{n} }{x_{n} } h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n 此时模型中的参数是一个n + 1 n+1 n + 1 维的向量,任何一个训练实例也都是n + 1 n+1 n + 1 维的向量,特征矩阵X X X 的维度是 m ∗ ( n + 1 ) m*(n+1) m ∗ ( n + 1 ) 。 因此公式可以简化为:h θ ( x ) = θ T X h_{\theta} \left( x \right)={\theta^{T} }X h θ ( x ) = θ T X ,其中上标T T T 代表矩阵转置。
多变量梯度下降与单变量的一样,代价函数是所有建模误差的平方和,即:J ( θ 0 , θ 1 . . . θ n ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left( \theta_{0},\theta_{1}...\theta_{n} \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}\left( h_{\theta} \left(x^{\left( i \right)} \right)-y^{\left( i \right)} \right)^{2} J ( θ 0 , θ 1 . . . θ n ) = 2 m 1 i = 1 ∑ m ( h θ ( x ( i ) ) − y ( i ) ) 2 ,其中:h θ ( x ) = θ T X = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_{\theta}\left( x \right)=\theta^{T}X={\theta_{0} }+{\theta_{1} }{x_{1} }+{\theta_{2} }{x_{2} }+...+{\theta_{n} }{x_{n} } h θ ( x ) = θ T X = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n ,我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。
特征缩放在我们面对多维特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。 以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。解决的方法是尝试将所有特征的尺度都尽量缩放到-1到1之间。 最简单的方法是令:x n = x n − μ n s n x_{n}=\frac{x_{n}-\mu_{n} }{s_{n} } x n = s n x n − μ n ,其中 μ n {\mu_{n} } μ n 是平均值,s n {s_{n} } s n 是标准差。
学习率梯度下降算法的每次迭代受到学习率的影响,如果学习率a a a 过小,则达到收敛所需的迭代次数会非常高;如果学习率a a a 过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。 通常可以考虑尝试些学习率:α = 0.01 , 0.03 , 0.1 , 0.3 , 1 , 3 , 10 \alpha=0.01,0.03,0.1,0.3,1,3,10 α = 0 . 0 1 , 0 . 0 3 , 0 . 1 , 0 . 3 , 1 , 3 , 1 0
特征和多项式回归有时我们需要曲线来适应我们的数据,比如一个二次方模型:h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 h_{\theta}\left( x \right)={\theta_{0} }+{\theta_{1} }{x_{1} }+{\theta_{2} }{x_{2}^2} h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 或者三次方模型: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 + θ 3 x 3 3 h_{\theta}\left( x \right)={\theta_{0} }+{\theta_{1} }{x_{1} }+{\theta_{2} }{x_{2}^2}+{\theta_{3} }{x_{3}^3} h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 + θ 3 x 3 3 。采用多项式回归模型,在运行梯度下降算法时,特征缩放 很重要。
正规方程正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:∂ ∂ θ j J ( θ j ) = 0 \frac{\partial}{\partial{\theta_{j} } }J\left( {\theta_{j} } \right)=0 ∂ θ j ∂ J ( θ j ) = 0 。 假设我们的训练集特征矩阵为 X X X (包含了 x 0 = 1 { {x}_{0} }=1 x 0 = 1 )并且我们的训练集结果为向量 y y y ,则利用正规方程解出向量 θ = ( X T X ) − 1 X T y \theta ={ {\left( {X^T}X \right)}^{-1} }{X^{T} }y θ = ( X T X ) − 1 X T y 。
上标T 代表矩阵转置,上标-1 代表矩阵的逆。设矩阵A = X T X A={X^{T} }X A = X T X ,则:( X T X ) − 1 = A − 1 { {\left( {X^T}X \right)}^{-1} }={A^{-1} } ( X T X ) − 1 = A − 1
对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训练集的数量),正规方程方法是不能用的。
梯度下降与正规方程的比较:
梯度下降 正规方程 需要选择学习率α \alpha α 不需要 需要多次迭代 一次运算得出 当特征数量n n n 大时也能较好适用 需要计算( X T X ) − 1 { {\left( { {X}^{T} }X \right)}^{-1} } ( X T X ) − 1 如果特征数量n较大则运算代价大,因为矩阵逆的计算时间复杂度为O ( n 3 ) O\left( { {n}^{3} } \right) O ( n 3 ) ,通常来说当n n n 小于10000 时还是可以接受的 适用于各种类型的模型 只适用于线性模型,不适合逻辑回归模型等其他模型
总结一下,只要特征变量的数目并不大,标准方程是一个很好的计算参数$\theta $的替代方法。具体地说,只要特征变量数量小于一万,我通常使用标准方程法,而不使用梯度下降法。
逻辑回归在分类问题中,要预测的 y y y 是离散的值,此时采用逻辑回归(Logistic Regression )的学习算法。
以二元分类问题为例,将因变量(dependent variable)可能属于的两个类成为负向类(negative class)和正向类(positive class),则因变量 y ϵ 0 , 1 y\epsilon 0,1 y ϵ 0 , 1 其中 0 表示负向类,1 表示正向类。
逻辑回归算法的实质是:它的输出值永远在 0 和 1 之间,是一种分类算法。
假设函数 假设函数的表示逻辑回归的假设是:h θ = g ( θ T X ) h_{\theta }=g(\theta ^{T}X) h θ = g ( θ T X ) 其中: X X X 代表特征向量;g g g 代表逻辑函数(logistic function),常用的逻辑函数为 S 型函数,公式为 g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z} } g ( z ) = 1 + e − z 1 。
python 代码实现:
import numpy as npdef sigmod (z ): return 1 / (1 + np.exp(-z))
h θ ( x ) h_\theta \left( x \right) h θ ( x ) 的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1的可能性(estimated probablity )即h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_\theta \left( x \right)=P\left( y=1|x;\theta \right) h θ ( x ) = P ( y = 1 ∣ x ; θ )
判定边界决策边界(decision boundary )
S 函数的图像:
在逻辑回归中,我们预测:
当h θ ( x ) > = 0.5 {h_\theta}\left( x \right)>=0.5 h θ ( x ) > = 0 . 5 时,预测 y = 1 y=1 y = 1 。
当h θ ( x ) < 0.5 {h_\theta}\left( x \right)<0.5 h θ ( x ) < 0 . 5 时,预测 y = 0 y=0 y = 0 。
根据上面绘制出的 S 形函数图像,我们知道当
z = 0 z=0 z = 0 时 g ( z ) = 0.5 g(z)=0.5 g ( z ) = 0 . 5
z > 0 z>0 z > 0 时 g ( z ) > 0.5 g(z)>0.5 g ( z ) > 0 . 5
z < 0 z<0 z < 0 时 g ( z ) < 0.5 g(z)<0.5 g ( z ) < 0 . 5
又 z = θ T x z={\theta^{T} }x z = θ T x ,即:θ T x > = 0 {\theta^{T} }x>=0 θ T x > = 0 时,预测 y = 1 y=1 y = 1 θ T x < 0 {\theta^{T} }x<0 θ T x < 0 时,预测 y = 0 y=0 y = 0
代价函数 推导代价函数线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将h θ ( x ) = 1 1 + e − θ T x {h_\theta}\left( x \right)=\frac{1}{1+{e^{-\theta^{T}x} } } h θ ( x ) = 1 + e − θ T x 1 带入到这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convexfunction )。
这意味着我们的代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。
重新定义逻辑回归的代价函数为:J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{ {Cost}\left( {h_\theta}\left( {x}^{\left( i \right)} \right),{y}^{\left( i \right)} \right)} J ( θ ) = m 1 i = 1 ∑ m C o s t ( h θ ( x ( i ) ) , y ( i ) ) ,其中
C o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) ) i f y = 1 − l o g ( 1 − h θ ( x ) ) i f y = 0 Cost(h_{\theta }(x),y) = \left\{\begin{matrix} -log(h_{\theta }(x)) & if y = 1\\ -log(1 - h_{\theta }(x)) & if y = 0 \end{matrix}\right. C o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) ) − l o g ( 1 − h θ ( x ) ) i f y = 1 i f y = 0
h θ ( x ) {h_\theta}\left( x \right) h θ ( x ) 与 C o s t ( h θ ( x ) , y ) Cost\left( {h_\theta}\left( x \right),y \right) C o s t ( h θ ( x ) , y ) 之间的关系如下图所示:
这样构建的C o s t ( h θ ( x ) , y ) Cost\left( {h_\theta}\left( x \right),y \right) C o s t ( h θ ( x ) , y ) 函数的特点是:当实际的 y = 1 y=1 y = 1 且h θ ( x ) {h_\theta}\left( x \right) h θ ( x ) 也为 1 时误差为 0,当 y = 1 y=1 y = 1 但h θ ( x ) {h_\theta}\left( x \right) h θ ( x ) 不为1时误差随着h θ ( x ) {h_\theta}\left( x \right) h θ ( x ) 变小而变大;当实际的 y = 0 y=0 y = 0 且h θ ( x ) {h_\theta}\left( x \right) h θ ( x ) 也为 0 时代价为 0,当y = 0 y=0 y = 0 但h θ ( x ) {h_\theta}\left( x \right) h θ ( x ) 不为 0时误差随着 h θ ( x ) {h_\theta}\left( x \right) h θ ( x ) 的变大而变大。 将构建的 C o s t ( h θ ( x ) , y ) Cost\left( {h_\theta}\left( x \right),y \right) C o s t ( h θ ( x ) , y ) 简化如下:
cost ( h θ ( x ) , y ) = − y × log ( h θ ( x ) ) − ( 1 − y ) × log ( 1 − h θ ( x ) ) \operatorname{cost}\left(h_{\theta}(x), y\right)=-y \times \log \left(h_{\theta}(x)\right)-(1-y) \times \log \left(1-h_{\theta}(x)\right) c o s t ( h θ ( x ) , y ) = − y × log ( h θ ( x ) ) − ( 1 − y ) × log ( 1 − h θ ( x ) )
带入代价函数得到:
J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) log ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J(\theta)=\frac{1}{m} \sum_{i=1}^{m}\left[-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)\right] J ( θ ) = m 1 i = 1 ∑ m [ − y ( i ) log ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ]
即:J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J(\theta)=-\frac{1}{m} \sum_{i=1}^{m}\left[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)\right] J ( θ ) = − m 1 ∑ i = 1 m [ y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ]
python代码实现:
import numpy as np def cost (theta, X, y ): theta = np.matrix(theta) X = np.matrix(X) y = np.matrix(y) first = np.multiply(-y, np.log(sigmoid(X* theta.T))) second = np.multiply((1 - y), np.log(1 - sigmoid(X* theta.T))) return np.sum (first - second) / (len (X))
可以用梯度下降算法来求得能使代价函数最小的参数了。算法为:
Repeat {θ j : = θ j − α ∂ ∂ θ j J ( θ ) \theta_j := \theta_j - \alpha \frac{\partial}{\partial\theta_j} J(\theta) θ j : = θ j − α ∂ θ j ∂ J ( θ ) (simultaneously update all ) }
求导后得到:
Repeat {θ j : = θ j − α ∂ ∂ θ j J ( θ ) \theta_{j} :=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J(\theta) θ j : = θ j − α ∂ θ j ∂ J ( θ ) (simultaneously update all ) }
推导过程:
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 ( θ ) = − m 1 i = 1 ∑ m [ y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] 考虑:h θ ( x ( i ) ) = 1 1 + e − θ T x ( i ) {h_\theta}\left( { {x}^{(i)} } \right)=\frac{1}{1+{ {e}^{-{\theta^T}{ {x}^{(i)} } } } } h θ ( x ( i ) ) = 1 + e − θ T x ( i ) 1 则:y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) { {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) y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) = y ( i ) log ( 1 1 + e − θ T x ( i ) ) + ( 1 − y ( i ) ) log ( 1 − 1 1 + e − θ T x ( i ) ) ={ {y}^{(i)} }\log \left( \frac{1}{1+{ {e}^{-{\theta^T}{ {x}^{(i)} } } } } \right)+\left( 1-{ {y}^{(i)} } \right)\log \left( 1-\frac{1}{1+{ {e}^{-{\theta^T}{ {x}^{(i)} } } } } \right) = y ( i ) log ( 1 + e − θ T x ( i ) 1 ) + ( 1 − y ( i ) ) log ( 1 − 1 + e − θ T x ( i ) 1 ) = − y ( i ) log ( 1 + e − θ T x ( i ) ) − ( 1 − y ( i ) ) log ( 1 + e θ T x ( i ) ) =-{ {y}^{(i)} }\log \left( 1+{ {e}^{-{\theta^T}{ {x}^{(i)} } } } \right)-\left( 1-{ {y}^{(i)} } \right)\log \left( 1+{ {e}^{ {\theta^T}{ {x}^{(i)} } } } \right) = − y ( i ) log ( 1 + e − θ T x ( i ) ) − ( 1 − y ( i ) ) log ( 1 + e θ T x ( i ) )
所以:∂ ∂ θ j J ( θ ) = ∂ ∂ θ j [ − 1 m ∑ i = 1 m [ − y ( i ) log ( 1 + e − θ T x ( i ) ) − ( 1 − y ( i ) ) log ( 1 + e θ T x ( i ) ) ] ] \frac{\partial }{\partial {\theta_{j} } }J\left( \theta \right)=\frac{\partial }{\partial {\theta_{j} } }[-\frac{1}{m}\sum\limits_{i=1}^{m}{[-{ {y}^{(i)} }\log \left( 1+{ {e}^{-{\theta^{T} }{ {x}^{(i)} } } } \right)-\left( 1-{ {y}^{(i)} } \right)\log \left( 1+{ {e}^{ {\theta^{T} }{ {x}^{(i)} } } } \right)]}] ∂ θ j ∂ J ( θ ) = ∂ θ j ∂ [ − m 1 i = 1 ∑ m [ − y ( i ) log ( 1 + e − θ T x ( i ) ) − ( 1 − y ( i ) ) log ( 1 + e θ T x ( i ) ) ] ] = − 1 m ∑ i = 1 m [ − y ( i ) − x j ( i ) e − θ T x ( i ) 1 + e − θ T x ( i ) − ( 1 − y ( i ) ) x j ( i ) e θ T x ( i ) 1 + e θ T x ( i ) ] =-\frac{1}{m}\sum\limits_{i=1}^{m}{[-{ {y}^{(i)} }\frac{-x_{j}^{(i)}{ {e}^{-{\theta^{T} }{ {x}^{(i)} } } } }{1+{ {e}^{-{\theta^{T} }{ {x}^{(i)} } } } }-\left( 1-{ {y}^{(i)} } \right)\frac{x_j^{(i)}{ {e}^{ {\theta^T}{ {x}^{(i)} } } } }{1+{ {e}^{ {\theta^T}{ {x}^{(i)} } } } } }] = − m 1 i = 1 ∑ m [ − y ( i ) 1 + e − θ T x ( i ) − x j ( i ) e − θ T x ( i ) − ( 1 − y ( i ) ) 1 + e θ T x ( i ) x j ( i ) e θ T x ( i ) ] = − 1 m ∑ i = 1 m y ( i ) x j ( i ) 1 + e θ T x ( i ) − ( 1 − y ( i ) ) x j ( i ) e θ T x ( i ) 1 + e θ T x ( i ) ] =-\frac{1}{m}\sum\limits_{i=1}^{m}{ {y}^{(i)} }\frac{x_j^{(i)} }{1+{ {e}^{ {\theta^T}{ {x}^{(i)} } } } }-\left( 1-{ {y}^{(i)} } \right)\frac{x_j^{(i)}{ {e}^{ {\theta^T}{ {x}^{(i)} } } } }{1+{ {e}^{ {\theta^T}{ {x}^{(i)} } } } }] = − m 1 i = 1 ∑ m y ( i ) 1 + e θ T x ( i ) x j ( i ) − ( 1 − y ( i ) ) 1 + e θ T x ( i ) x j ( i ) e θ T x ( i ) ] = − 1 m ∑ i = 1 m y ( i ) x j ( i ) − x j ( i ) e θ T x ( i ) + y ( i ) x j ( i ) e θ T x ( i ) 1 + e θ T x ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{ { {y}^{(i)} }x_j^{(i)}-x_j^{(i)}{ {e}^{ {\theta^T}{ {x}^{(i)} } } }+{ {y}^{(i)} }x_j^{(i)}{ {e}^{ {\theta^T}{ {x}^{(i)} } } } }{1+{ {e}^{ {\theta^T}{ {x}^{(i)} } } } } } = − m 1 i = 1 ∑ m 1 + e θ T x ( i ) y ( i ) x j ( i ) − x j ( i ) e θ T x ( i ) + y ( i ) x j ( i ) e θ T x ( i ) = − 1 m ∑ i = 1 m y ( i ) ( 1 + e θ T x ( i ) ) − e θ T x ( i ) 1 + e θ T x ( i ) x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{ { {y}^{(i)} }\left( 1\text{+}{ {e}^{ {\theta^T}{ {x}^{(i)} } } } \right)-{ {e}^{ {\theta^T}{ {x}^{(i)} } } } }{1+{ {e}^{ {\theta^T}{ {x}^{(i)} } } } }x_j^{(i)} } = − m 1 i = 1 ∑ m 1 + e θ T x ( i ) y ( i ) ( 1 + e θ T x ( i ) ) − e θ T x ( i ) x j ( i ) = − 1 m ∑ i = 1 m ( y ( i ) − e θ T x ( i ) 1 + e θ T x ( i ) ) x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{({ {y}^{(i)} }-\frac{ { {e}^{ {\theta^T}{ {x}^{(i)} } } } }{1+{ {e}^{ {\theta^T}{ {x}^{(i)} } } } })x_j^{(i)} } = − m 1 i = 1 ∑ m ( y ( i ) − 1 + e θ T x ( i ) e θ T x ( i ) ) x j ( i ) = − 1 m ∑ i = 1 m ( y ( i ) − 1 1 + e − θ T x ( i ) ) x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{({ {y}^{(i)} }-\frac{1}{1+{ {e}^{-{\theta^T}{ {x}^{(i)} } } } })x_j^{(i)} } = − m 1 i = 1 ∑ m ( y ( i ) − 1 + e − θ T x ( i ) 1 ) x j ( i ) = − 1 m ∑ i = 1 m [ y ( i ) − h θ ( x ( i ) ) ] x j ( i ) =-\frac{1}{m}\sum\limits_{i=1}^{m}{[{ {y}^{(i)} }-{h_\theta}\left( { {x}^{(i)} } \right)]x_j^{(i)} } = − m 1 i = 1 ∑ m [ y ( i ) − h θ ( x ( i ) ) ] x j ( i ) = 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x j ( i ) =\frac{1}{m}\sum\limits_{i=1}^{m}{[{h_\theta}\left( { {x}^{(i)} } \right)-{ {y}^{(i)} }]x_j^{(i)} } = m 1 i = 1 ∑ m [ h θ ( x ( i ) ) − y ( i ) ] x j ( i )
梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有:共轭梯度 (Conjugate Gradient ),局部优化法 (Broyden fletcher goldfarb shann,BFGS )和有限内存局部优化法 (LBFGS ) 。
简化的代价函数和梯度下降由上面的推导可以得到代价函数C o s t ( h θ ( x ) , y ) = − y × l o g ( h θ ( x ) ) − ( 1 − y ) × l o g ( 1 − h θ ( x ) ) Cost\left( {h_\theta}\left( x \right),y \right)=-y\times log\left( {h_\theta}\left( x \right) \right)-(1-y)\times log\left( 1-{h_\theta}\left( x \right) \right) C o s t ( h θ ( x ) , y ) = − y × l o g ( h θ ( x ) ) − ( 1 − y ) × l o g ( 1 − h θ ( x ) ) 即,逻辑回归的代价函数:C o s t ( h θ ( x ) , y ) = − y × l o g ( h θ ( x ) ) − ( 1 − y ) × l o g ( 1 − h θ ( x ) ) Cost\left( {h_\theta}\left( x \right),y \right)=-y\times log\left( {h_\theta}\left( x \right) \right)-(1-y)\times log\left( 1-{h_\theta}\left( x \right) \right) C o s t ( h θ ( x ) , y ) = − y × l o g ( h θ ( x ) ) − ( 1 − y ) × l o g ( 1 − h θ ( x ) ) = − 1 m ∑ i = 1 m [ y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] =-\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)]} = − m 1 i = 1 ∑ m [ y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] 试图找尽量让J ( θ ) J\left( \theta \right) J ( θ ) 取得最小值的参数$\theta $,即 min θ J ( θ ) \underset{\theta}{\min }J\left( \theta \right) θ min J ( θ )
最小化代价函数的方法,是使用梯度下降法 (gradient descent )。这是我们的代价函数: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 ( θ ) = − m 1 i = 1 ∑ m [ y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ]
根据梯度下降算法可以得到 θ \theta θ 的更新公式:
θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) {\theta_j}:={\theta_j}-\alpha \frac{1}{m}\sum\limits_{i=1}^{m}{({h_\theta}({ {x}^{(i)} })-{ {y}^{(i)} }){x_{j} }^{(i)} } θ j : = θ j − α m 1 i = 1 ∑ m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i )
若有n n n 个特征,则需要同步更新所有的 θ j , j = 0.. n \theta_{j}, j=0..n θ j , j = 0 . . n 。
可以发现,逻辑回归算法和线性回归算法的 θ \theta θ 的更新规则是一样的,但是两者的假设函数是不同的。
线性回归的假设函数为 h θ ( x ) = θ T X = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n {h_\theta}\left( x \right)={\theta^T}X={\theta_{0} }{x_{0} }+{\theta_{1} }{x_{1} }+{\theta_{2} }{x_{2} }+...+{\theta_{n} }{x_{n} } h θ ( x ) = θ T X = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n
逻辑回归的假设函数为 h θ ( x ) = 1 1 + e − θ T X {h_\theta}\left( x \right)=\frac{1}{1+{ {e}^{-{\theta^T}X} } } h θ ( x ) = 1 + e − θ T X 1
可以向量化的方式来同时更新所有的 θ \theta θ 。
若特征范围差距很大的话,采用特征缩放的方式可以提高梯度下降的收敛速度。
高级优化梯度下降并不是我们可以使用的唯一算法,还有其他一些算法,更高级、更复杂。如果我们能用这些方法来计算代价函数J ( θ ) J\left( \theta \right) J ( θ ) 和偏导数项∂ ∂ θ j J ( θ ) \frac{\partial }{\partial {\theta_j} }J\left( \theta \right) ∂ θ j ∂ J ( θ ) 两个项的话,那么这些算法就是为我们优化代价函数的不同方法,共轭梯度法 BFGS (变尺度法 ) 和L-BFGS (限制变尺度法 ) 就是其中一些更高级的优化算法,它们需要有一种方法来计算 J ( θ ) J\left( \theta \right) J ( θ ) ,以及需要一种方法计算导数项,然后使用比梯度下降更复杂的算法来最小化代价函数。
这三种算法有许多优点,其中一个就是不需要手动选择学习率 α \alpha α ,所以对于这些算法的一种思路是,给出计算导数项和代价函数的方法,可以认为算法有一个智能的内部循环,称为线性搜索 (line search )算法,它可以自动尝试不同的学习速率 α \alpha α ,并自动选择一个好的学习速率 a a a ,因此它甚至可以为每次迭代选择不同的学习速率,那么就不需要自己选择。这些算法实际上在做更复杂的事情,不仅仅是选择一个好的学习速率,所以它们往往最终比梯度下降收敛得快多了。
多类别分类:一对多逻辑回归 (logistic regression )可以用来来解决多类别分类问题,“一对多” (one-vs-all ) 的分类算法。如何进行一对多的分类工作,有时这个方法也被称为"一对余"方法。
我们先从用三角形代表的类别1开始,实际上我们可以创建一个,新的"伪"训练集,类型2和类型3定为负类,类型1设定为正类,我们创建一个新的训练集,如下图所示的那样,我们要拟合出一个合适的分类器。
将多个类中的一个类标记为正向类(y = 1 y=1 y = 1 ),然后将其他所有类都标记为负向类,这个模型记作h θ ( 1 ) ( x ) h_\theta^{\left( 1 \right)}\left( x \right) h θ ( 1 ) ( x ) 。接着,类似地第我们选择另一个类标记为正向类(y = 2 y=2 y = 2 ),再将其它类都标记为负向类,将这个模型记作 h θ ( 2 ) ( x ) h_\theta^{\left( 2 \right)}\left( x \right) h θ ( 2 ) ( x ) ,依此类推。最后得到一系列的模型简记为: h θ ( i ) ( x ) = p ( y = i ∣ x ; θ ) h_\theta^{\left( i \right)}\left( x \right)=p\left( y=i|x;\theta \right) h θ ( i ) ( x ) = p ( y = i ∣ x ; θ ) 其中:i = ( 1 , 2 , 3.... k ) i=\left( 1,2,3....k \right) i = ( 1 , 2 , 3 . . . . k )
要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。训练这个逻辑回归分类器:h θ ( i ) ( x ) h_\theta^{\left( i \right)}\left( x \right) h θ ( i ) ( x ) , 其中 i i i 对应每一个可能的 y = i y=i y = i ,在三个分类器里面输入 x x x ,选择一个让 h θ ( i ) ( x ) h_\theta^{\left( i \right)}\left( x \right) h θ ( i ) ( x ) 最大的$ i, 即 ,即 , 即 \max {i} h {\theta}^{(i)}(x)$。
正则化(Regualrization) 过拟合问题 问题提出在实际使用线性回归和逻辑回归应用到特定的问题中会出现过拟合(over-fitting )。下面以回归问题作为例子:
第一个模型是线性模型,欠拟合,不能很好的适应训练集;第三个模型是四次方的模型,过于强调拟合原始数据而忽略了预测新数据的功能;中间的模型最合适。
如何解决过拟合的问题?
代价函数上面的回归问题中的假设为h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 + θ 3 x 3 3 + θ 4 x 4 4 {h_\theta}\left( x \right)={\theta_{0} }+{\theta_{1} }{x_{1} }+{\theta_{2} }{x_{2}^2}+{\theta_{3} }{x_{3}^3}+{\theta_{4} }{x_{4}^4} h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 + θ 3 x 3 3 + θ 4 x 4 4 ,可以看出正是高次项导致了过拟合的产生,如果高次项的参数 θ \theta θ 接近0,则可以很好的拟合。
正则化的基本方法是在一定程度上减少参数 θ \theta θ 的值。要减少 θ 3 {\theta_{3} } θ 3 和 θ 4 {\theta_{4} } θ 4 的大小,需要修改代价函数,在其中θ 3 {\theta_{3} } θ 3 和θ 4 {\theta_{4} } θ 4 设置一点惩罚。在最小化代价时也需要将这个惩罚纳入考虑中,最终导致选择较小一些的θ 3 {\theta_{3} } θ 3 和θ 4 {\theta_{4} } θ 4 。修改后的代价函数如下:min θ 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + 1000 θ 3 2 + 10000 θ 4 2 ] \underset{\theta }{\mathop{\min } }\,\frac{1}{2m}[\sum\limits_{i=1}^{m}{ { {\left( { {h}_{\theta } }\left( { {x}^{(i)} } \right)-{ {y}^{(i)} } \right)}^{2} }+1000\theta _{3}^{2}+10000\theta _{4}^{2}]} θ min 2 m 1 [ i = 1 ∑ m ( h θ ( x ( i ) ) − y ( i ) ) 2 + 1 0 0 0 θ 3 2 + 1 0 0 0 0 θ 4 2 ] 。
带有正则化的代价函数为:J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] J(\theta)=\frac{1}{2 m}\left[\sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda \sum_{j=1}^{n} \theta_{j}^{2}\right] J ( θ ) = 2 m 1 [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] ,其中$\lambda 又 称 为 正 则 化 参 数 ( ∗ ∗ R e g u l a r i z a t i o n P a r a m e t e r ∗ ∗ ) 。 注 : 根 据 惯 例 , 我 们 不 对 又称为正则化参数(**Regularization Parameter**)。 注:根据惯例,我们不对 又 称 为 正 则 化 参 数 ( ∗ ∗ R e g u l a r i z a t i o n P a r a m e t e r ∗ ∗ ) 。 注 : 根 据 惯 例 , 我 们 不 对 {\theta_{0}}$进行惩罚。
经过正则化后的对比:
令 λ \lambda λ 的值很大的话,为了使Cost Function 尽可能的小,所有的 $\theta $ 的值(不包括θ 0 {\theta_{0} } θ 0 )都会在一定程度上减小。若λ \lambda λ 的值太大了,那么$\theta ( 不 包 括 (不包括 ( 不 包 括 {\theta_{0} }$)都会趋近于0,模型变成 h θ ( x ) = θ 0 {h_\theta}\left( x \right)={\theta_{0} } h θ ( x ) = θ 0 。对于正则化,我们要取一个合理的 λ \lambda λ 的值,这样才能更好的应用正则化。
正则化线性回归对于线性回归问题的求解,有两种学习算法:基于梯度下降,基于正归方程。
正则化线性回归的代价函数为:J ( θ ) = 1 2 m ∑ i = 1 m [ ( ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ) ] J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{[({ {({h_\theta}({ {x}^{(i)} })-{ {y}^{(i)} })}^{2} }+\lambda \sum\limits_{j=1}^{n}{\theta _{j}^{2} })]} J ( θ ) = 2 m 1 i = 1 ∑ m [ ( ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ j = 1 ∑ n θ j 2 ) ] 。
因未对 θ 0 \theta_{0} θ 0 进行正则化,所以梯度下降法分两种情况:
R e p e a t Repeat R e p e a t u n t i l until u n t i l c o n v e r g e n c e convergence c o n v e r g e n c e {
θ 0 : = θ 0 − a 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) ) {\theta_0}:={\theta_0}-a\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({ {x}^{(i)} })-{ {y}^{(i)} })x_{0}^{(i)} }) θ 0 : = θ 0 − a m 1 i = 1 ∑ m ( ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) )
θ j : = θ j − a [ 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] {\theta_j}:={\theta_j}-a[\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({ {x}^{(i)} })-{ {y}^{(i)} })x_{j}^{\left( i \right)} }+\frac{\lambda }{m}{\theta_j}] θ j : = θ j − a [ m 1 i = 1 ∑ m ( ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + m λ θ j ] f o r for f o r j = 1 , 2 , . . . n j=1,2,...n j = 1 , 2 , . . . n
}
上面算法中$ j=1,2,…,n$ 时的更新式子进行调整可得:
θ j : = θ j ( 1 − a λ m ) − a 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) {\theta_j}:={\theta_j}(1-a\frac{\lambda }{m})-a\frac{1}{m}\sum\limits_{i=1}^{m}{({h_\theta}({ {x}^{(i)} })-{ {y}^{(i)} })x_{j}^{\left( i \right)} } θ j : = θ j ( 1 − a m λ ) − a m 1 i = 1 ∑ m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i )
同样,可以利用正规方程求解正则化线性回归,
θ = ( X T X + λ [ 0 1 1 ⋱ 1 ] ) − 1 X T y \theta =\left ( X^{T}X + \lambda \begin{bmatrix} 0 & & & & \\ &1 & & & \\ & & 1 & & \\ & & &\ddots & \\ & & & 1& \end{bmatrix} \right )^{^{-1} }X^{T}y θ = ⎝ ⎜ ⎜ ⎜ ⎜ ⎛ X T X + λ ⎣ ⎢ ⎢ ⎢ ⎢ ⎡ 0 1 1 ⋱ 1 ⎦ ⎥ ⎥ ⎥ ⎥ ⎤ ⎠ ⎟ ⎟ ⎟ ⎟ ⎞ − 1 X T y
公式中矩阵的维度为( n + 1 ) ∗ ( n + 1 ) (n+1) * (n+1) ( n + 1 ) ∗ ( n + 1 ) 。
正则化逻辑回归对于逻辑回归问题,有两种优化算法:一种使用梯度下降法来优化代价函数J ( θ ) J\left( \theta \right) J ( θ ) ,另一种使用更高级的优化算法,需要自己设计代价函数J ( θ ) J\left( \theta \right) 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 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 ( θ ) = m 1 i = 1 ∑ m [ − y ( i ) log ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] + 2 m λ j = 1 ∑ n θ j 2
Python 代码:
import numpy as npdef costReg (theta, X, y, learningRate ): theta = np.matrix(theta) X = np.matrix(X) y = np.matrix(y) first = np.multiply(-y, np.log(sigmoid(X*theta.T))) second = np.multiply((1 - y), np.log(1 - sigmoid(X*theta.T))) reg = (learningRate / (2 * len (X))* np.sum (np.power(theta[:,1 :theta.shape[1 ]],2 )) return np.sum (first - second) / (len (X)) + reg
最小化该代价函数,通过求导得到梯度下降算法:
R e p e a t Repeat R e p e a t u n t i l until u n t i l c o n v e r g e n c e convergence c o n v e r g e n c e {
θ 0 : = θ 0 − a 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) ) {\theta_0}:={\theta_0}-a\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({ {x}^{(i)} })-{ {y}^{(i)} })x_{0}^{(i)} }) θ 0 : = θ 0 − a m 1 i = 1 ∑ m ( ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) ) θ j : = θ j − a [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] {\theta_j}:={\theta_j}-a[\frac{1}{m}\sum\limits_{i=1}^{m}{({h_\theta}({ {x}^{(i)} })-{ {y}^{(i)} })x_{j}^{\left( i \right)} }+\frac{\lambda }{m}{\theta_j}] θ j : = θ j − a [ m 1 i = 1 ∑ m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + m λ θ j ] f o r for f o r j = 1 , 2 , . . . n j=1,2,...n j = 1 , 2 , . . . n
}
线性回归的作业用 python 实现,见Github中代码:ex1