您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页python3 逻辑回归(含推导)

python3 逻辑回归(含推导)

来源:爱玩科技网

1、比率(odds)、概率(probability,可能性)和似然(likelihood)

例如:成功7次,失败5次

  • 比率 =某一类样本数/另一类样本数}=7/5
  • 概率 = 某一类样本数/所有可能情况的样本=7/(7+5)
  • 如果用theta表示环境参数,y表示结果,则概率(可能性)表示为:

注:梯度下降法使用条件是该函数是凸函数,单调可微, 连续

2、伯努利分布与二项分布

伯努利分布(Bernoulli distribution)又叫两点分布或0-1分布。记成功概率为p,失败概率为q=1-p.其中0<p<1.公式:

           也可以写成      

二项分布是n 个的伯努利分布,连乘。

3、极大似然法(maximum  likelihood method)

  • 主要用于求解参数
  • 多个事件的似然函数:
  • 对多项乘积的求导往往非常复杂,但是对于多项求和的求导却要简单的多,对数函数不改变原函数的单调性和极值位置(对数化似然函数(log-likelihood),而且根据对数函数的性质可以将乘积转换为加减式,这可以大大简化求导的过程:

4、逻辑回归

用于分类,不是回归

4.1 联系函数(link function)

表达式:

逻辑回归对y求对数(对数线性转化:log-linear regression):

一般对于任何单调函数g(·)可将非线性函数转化为线性函数并且单调可微, 令:

    or       则该模型称为广义线性模型(generalized linear model),g(·)称为联系函数(link funjction).对数线性回归是广义模型在g(·)=In(·)时的特例。

4.2 单位阶跃函数(unit-step function)

考虑二分类任务,输出标记,,而线性回归模型产生的预测值是实值。于是,将z转化为0/1值。最理想是单位阶跃函数:

                            

即预测值z大于零就判为正例,小于零判为反例,预测值的临界值则可任意判别,如下图所示。

                         

单位阶跃函数是不连续的,因此不可以用作,因此需要找到能在一定程度上近似单位阶跃函数的替代函数(surrogate function),并且单调可微。对数几率函数(logistic function)正是这样一个函数:

对数几率函数是一种‘Sigmoid函数’,S型

4.3 逻辑回归推导

根据对数几率函数可得:

上式中,若将y视为样本x作为正例的可能性,则1-y是其反例可能性,两者的比值=,称为几率(odds),反映了x作为正例的相对可能性。对几率取对数则得到对数几率(log odds,亦称logit)

将y视为类后验概率估计,,则上式可写为:

                             

                     

                                

于是,可通过极大似然法估计w,b,对率回归模型最大化对数似然(以e为底数),i代表第i个样本:

                          

                                      

                                      

                                      

                                      

                                

                                       

                                       

对求极大值,得到w,b的估计。

为了方便,将w,x扩充为, ;在求参数时,最大化,就是对最小化,因此(加负号是为了从对数似然函数最大化问题等价变化到代价函数最小化问题)

求w的一次导数:

                                                        

                                                        

                                                           

                                           or                  

根据梯度定义写成矩阵形式:

                                                                             

令=0,发现没有解析解,只能用数值法(梯度下降,牛顿迭代...)

求w的二次导数:若采用梯度下降则不需计算二阶导,牛顿迭代需要计算二阶导

                        

                                          

                                          

                                          

                                           

                                           

                                                            

数值求解可以用于参数求解(可令偏导数=0,但矩阵方法不可解,所以采用数值求解):

采用牛顿迭代法:

                                                     

                                                               (Hessian Matrix)

   将,,带入Hessian Matrix:

                                         

 最后将  带入 ,计算出概率,通过设定阈值进行分类,采取相关指标进行评价。

 

补充:

解析解与数值解的区别:

  • 解析解(closed-form solution):是指可以通过严格的公式推导出的精确解,如y=ax+b,只需要知道两个点就可以求出参数a,b。
  • 数值解(numerical solution):对于多个数据(n>>2)的情况,这时很有可能不存在解析解,我们只能借助数值方法去优化出一个近似的数值解。
  • 之所以叫优化,是因为计算机的计算速度非常快,我们可以借助强大的计算能力去多次搜索和试错。从而一步步降低误差L。最简单的优化方法就是暴力搜索或随机试验,若找出最合适的a、b,则可以从(部分)实数空间中随机采样任意的a、b,并计算出对应模型的误差值L,然后从测试过的L中挑出最好的L,它所对应的a、b就可以作为要找的最优a、b。

4.4 逻辑回归

l1 正则化:

l2 正则化:

弹性网络正则化:

4.5 多项逻辑回归

上面的逻辑回归模型是二项分类模型,适用于二分类,可将其推广为多项逻辑回归模型(multi-nominal logistic regression model),用于多分类。假设离散型随机变量Y的取值集合是{1,2,...,K},则多项逻辑回归模型是:

                            ,

                           

4.6 python3

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
import numpy as np
import matplotlib.pyplot as plt

X, y = load_iris(return_X_y=True)
X = X[:, :2]  # we only take the first two features
logreg = LogisticRegression(C=1e5, solver='lbfgs', multi_class='multinomial').fit(X, y)

# Plot the decision boundary. For that, we will assign a color to each
# point in the mesh [x_min, x_max]x[y_min, y_max]
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
h = .02  # step size in the mesh
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = logreg.predict(np.c_[xx.ravel(), yy.ravel()])

# put the result into a color plot
Z = Z.reshape(xx.shape)
plt.figure(1, figsize=(4, 3))
plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired)

# plot also the training points
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', cmap=plt.cm.Paired)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.xticks(())
plt.yticks(())
plt.show()

                                                   

 

参考:

           《统计学习方法》- 李航

           《机器学习》- 周志华

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务