python实现逻辑回归代码_逻辑回归理解及代码实现
github:代码实现之逻辑回归
本⽂算法均使⽤python3实现
1. 什么是逻辑回归
《机器学习实战》⼀书中提到:
利⽤逻辑回归进⾏分类的主要思想是:根据现有数据对分类边界线建⽴回归公式,以此进⾏分类(主要⽤于解决⼆分类问题)。
由以上描述我们⼤概可以想到,对于使⽤逻辑回归进⾏分类,我们⾸先所需要解决的就是寻分类边界线。那么什么是分类边界线呢?
以上两幅图分别对应着,当分类样本具有两个特征值 $ x_1, x_2 $ 时,样本可进⾏线性可分,以及⾮线性可分的情况。⽽分类边界,便是图中所⽰的绿⾊直线与绿⾊曲线。(本⽂中只针对线性可分且特征数为 $ n $ 的情况进⾏介绍)
⽽使⽤逻辑回归进⾏分类,就是要到这样的分类边界,使其能够尽可能地对样本进⾏正确分类,也就是能够尽可能地将两种样本分隔开来。于是我们可以⼤胆猜测,可以构造这样⼀个函数(图⼀中特征数为2,分类边界为直线,当特征数为 $ n $ 时分类边界为“超平⾯”),来对样本集进⾏分隔:
\[z(x^{(i)}) = \theta_0 + \theta_1 x^{(i)}_1 + \theta_2 x^{(i)}_2 + ... + \theta_n x^{(i)}_n
\]
其中 $ i=1,2,...m $ ,表⽰第 $ i $ 个样本, $ n $ 表⽰特征数,当 $ z(x^{(i)}) > 0 $ 时,对应着样本点位于分界线上⽅,可将其分为"1"类;当 $ z(x^{(i)}) < 0 $ 时 ,样本点位于分界线下⽅,将其分为“0”类。
python新手代码及作用我们很容易联想到前⾯介绍过的线性回归,该算法同样是构造函数 $ h_\theta(x^{(i)}) = \theta_0 + \theta_1 x^{(i)}_1 + \theta_2
x^{(i)}_2 + ... + \theta_n x^{(i)}_n $ ,但与逻辑回归不同的是,线性回归模型输⼊⼀个待预测样本的特征值 $ x^{(i)}=[
x{(i)}_1,x{(i)}_2,...,x^{(i)}_n ]^T $ ,输出则为预测值。⽽逻辑回归作为分类算法,它的输出是0/1。那么如何将输出值转换成0/1呢?在此介绍⼀下 $ sigmoid $ 函数。
1.1 $ sigmoid $ 函数
$ sigmoid $ 函数定义如下:
\[g(z) = \frac{1}{1+e^{-z}}
\]
其函数图像为:
由函数图像可以看出, $ sigmoid $ 函数可以很好地将 $ (-\infty , \infty) $ 内的数映射到 $ (0 , 1) $ 上。于是我们可以将 $
g(z)\geq0.5 $ 时分为"1"类, $ g(z)<0.5 $ 时分为"0"类。即:
\[y = \begin{cases} 1, & \text {if $g(z) \geq 0.5$ } \\ 0, & \text{otherwise} \end{cases}
\]
其中 $ y $ 表⽰分类结果。$ sigmoid $ 函数实际表达的是将样本分为“1”类的概率,这将在本⽂的最后⼀部分进⾏详细解释。
2. 逻辑回归模型函数
在了解了分类边界:
\[z(x^{(i)}) = \theta_0 + \theta_1 x^{(i)}_1 + \theta_2 x^{(i)}_2 = \theta^T x^{(i)}
\]
其中,
\[\theta = \begin{bmatrix} \theta_0 \\ \theta_1 \\ \theta_2 \\ \vdots \\ \theta_n \\ \end{bmatrix} , x^{(i)} =
\begin{bmatrix} x^{(i)}_0 \\ x^{(i)}_1 \\ x^{(i)}_2 \\ \vdots \\x^{(i)}_n \\ \end{bmatrix}
\]
⽽ $ x_0^{(i)} = 1 $ 是偏置项(具体解释见线性回归), $ n $ 表⽰特征数,$ i=1,2,...,m $ 表⽰样本数。
以及 $ sigmoid $ 函数 :
\[g(z) = \frac{1}{1+e^{-z}}
\]
我们可以构造出逻辑回归模型函数:
\[h_\theta(x^{(i)}) = g(z) = g( \theta^T x^{(i)} ) = \frac{1}{1+e^{-\theta^T x^{i}}}
\]
使得我们可以对于新样本
\[x^{new} = [x^{new}_1, x^{new}_2,...,x^{new}_n]^T
\]
进⾏输⼊,得到函数值 $ h_\theta(x^{new}) $ , 根据 $ h_\theta(x^{new}) $ 与0.5的⽐较来将新样本进⾏分类。
3. 逻辑回归代价函数
回想在线性回归中,我们是利⽤均⽅误差来作为代价函数:
\[J(\theta) = \frac{1}{2m} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2
\]
同样的,假设我们仍旧使⽤均⽅误差来作为逻辑回归⼤家函数,会出现什么效果呢?将 $ g(z) = \frac{1}{1+e^{-z}} $ 带⼊上式,我们会发现, $ J(\theta) $ 为⼀个⾮凸函数,也就是说该函数存在许多局部最⼩值点,在求解参数的过程中很容易陷⼊局部最⼩值点,⽽⽆法求得真正的最⼩值点。
我们不妨换⼀个思路来求解这个问题。在上⼀节中提到:$ sigmoid $ 函数实际表达的是将样本分为“1”类的概率,也就是说,使⽤ $ sigmoid $ 函数求解出来的值为类1的后验估计 $ p(y=1|x,\theta) $ ,故我们可以得到:
\[p(y=1|x,\theta) = h_\theta(\theta^T x)
\]
\[p(y=0|x,\theta) = 1- h_\theta(\theta^T x)
\]
其中 $ p(y=1|x,\theta) $ 表⽰样本分类为 $ y=1 $ 的概率,⽽ $ p(y=0|x,\theta) $ 表⽰样本分类为 $ y=0 $ 的概率。针对以上⼆式,我们可将其整理为:
\[p(y|x,\theta)=p(y=1|x,\theta)^y p(y=0|x,\theta)^{(1-y)} = h_\theta(\theta^T x)^y (1- h_\theta(\theta^T x))^{(1-y)}
\]
我们可以得到其似然函数为:
\[L(\theta) = \prod^m_{i=1} p(y^{(i)}|x^{(i)},\theta) = \prod ^m_{i=1}[ h_\theta(\theta^T x^{(i)})^{y^{(i)}} (1-
h_\theta(\theta^T x^{(i)}))^{1-y^{(i)}}]
\]
对数似然函数为:
\[\log L(\theta) = \sum_{i=1}^m [y^{(i)} \log{h_\theta(\theta^T x^{(i)})} +(1-y^{(i)}) \log{(1- h_\theta(\theta^T x^{(i)}))}]
\]
于是,我们便得到了代价函数,我们可以对求 $ \log L(\theta) $ 的最⼤值来求得参数 $ \theta $ 的值。为了便于计算,将代价函数做了以下改变:
\[J(\theta) = - \frac{1}{m} \sum_{i=1}^m [y^{(i)} \log{h_\theta(\theta^T x^{(i)})} + (1-y^{(i)}) \log{(1- h_\theta(\theta^T
x^{(i)}))}]
\]
此时,我们只需对 $ J(\theta) $ 求最⼩值,便得可以得到参数 $ \theta $。
本节中逻辑回归代价函数是利⽤极⼤似然法进⾏的推导
4. 优化算法
对于以上所求得的代价函数,我们采⽤梯度下降的⽅法来求得最优参数。
3.1 梯度下降法(gradient descent)
梯度下降法过程为:
repeat {
$ \theta_j := \theta_j - \alpha \frac{\Delta J(\theta)}{\Delta \theta_j} $
}
其中 $ \alpha $ 为学习率(learning rate),也就是每⼀次的“步长”; $ \frac{\Delta J(\theta)}{\Delta \theta_j} $ 是梯度,$ j =
1,2,...,n $ 。
接下来我们对梯度进⾏求解:
其中:
⽽⼜因为:
则:
因此:
故:
由以上我们可以得到梯度下降过程为:
repeat {
$ \theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^m (h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)} $
}
其中 $ i = 1,2,...,m,表⽰样本数 ; j = 1,2,..,n,表⽰特征数 $
通过观察我们可以发现,逻辑回归梯度下降中参数的更新公式同线性回归的⼀样。
5. 理解sigmoid函数
⼆项逻辑斯蒂回归模型(binomial logistic regression model)是⼀种分类模型,由条件概率分布 $ p(Y|X) $ 表⽰,形式为参数化的逻辑斯蒂分布。这⾥,随机变量 $ X $ 取值为实数,随机变量 $ Y $ 取值为 $ 1或0 $。可通过监督学习的⽅法来估计模型参数。
⼆项逻辑斯蒂回归模型是如下的条件概率分布:
\[p(Y=1|x) = \frac{e^{\theta^Tx}}{1+e^{\theta^Tx}}
\]
\[p(Y=0|x) = \frac{1}{1+e^{\theta^Tx}}
\]
其中, $ x \in R^n $ 是输⼊, $ Y \in \lbrace 0,1 \rbrace $ 是输出, $ \theta $ 是参数。
对于 $ Y=1 $ :
\[p(Y=1|x) = \frac{e^{\theta^Tx}}{1+e^{\theta^Tx}}
\]
⽽ $ e{\thetaTx} \neq 0 $ ,故上式可推导为:
\[p(Y=1|x) = \frac{1}{1+e^{-\theta^Tx}}
\]
即逻辑回归模型函数:
\[h_\theta(x^{(i)}) = \frac{1}{1+e^{-\theta^Tx^{(i)}}}
\]
表⽰为分类结果为“1”的概率
写在最后:本⽂参考以上资料进⾏整合与总结,属于原创,⽂章中可能出现理解不当的地⽅,若有所见解或异议可在下⽅评论,谢谢!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。