Logistic Regression 逻辑回归(简单介绍)

发布于:2022-11-13 ⋅ 阅读:(5439) ⋅ 点赞:(4)

逻辑回归也称作logistic回归分析,是一种广义的线性回归分析模型,属于机器学习中的监督学习。其推导过程与计算方式类似于回归的过程,但实际上主要是用来解决二分类问题(也可以解决多分类问题)。通过给定的n组数据(训练集)来训练模型,并在训练结束后对给定的一组或多组数据(测试集)进行分类。其中每一组数据都是由p 个指标构成。

--从别人那里搬运来的

(1)逻辑回归所处理的数据

逻辑回归进行分类给数据来判断哪个类别,先知道n个人的身高体重和类别

训练一个(一条直线或者一个平面的)模型。将散点分到平面的两侧

(2)算法原理

首先,我们处理二分类问题。由于分成两类,我们便让其中一类标签为0,另一类为1。

输入x,映射到0-1,大于0.5一类,小于0.5一类,使用sigmoid函数

\sigma (x)=\frac{1}{1+e^{-x}}

设为

h(\textup{x}^{i})=\frac{1}{1+e^{-(\textup{w}^{T}\textup{x}^{i}+b)}}

这里是测试集第i个数据,是p维列向量\begin{pmatrix} x^{i}_{1}&x^{i}_{2}&...&x^{i}_{p}\end{}^{T}

w是p维列向量,\textbf{w}=\begin{pmatrix}w_{1}&w_{2}&...&w_{p} \end{}^{T}为待求参数;

b是一个数,也是待求参数。

我们发现,对于w^{T}x+b,其结果是w_{1}x_{1}+w_{2}x_{2}+...+w_{p}x_{p}+b。所以我们可以把

 w写成\begin{pmatrix}w_{1}&w_{2}&...&w_{p}&b \end{}^{T},x写成\begin{pmatrix}x_{1}^{i}&x_{2}^{i}&...&x_{p}^{i}&1 \end{}^{T}w^{T}x+b就可以写成,则:

 h(\mathbf{x}^{i})=\frac{1}{1+e^{-\textbf{w}^{T}\textbf{x}^{i}}}

这样就可以把另一个参数b合并到w中。后面推导也方便很多。当然,我们也可以用用第一种形式来做,本质是相同的。之后就是根据训练样本来求参数w了。

(3)求解参数

(1)极大似然估计

即为一个事情发生则概率为最大

样本iy_{i}\epsilon (0,1),把h(\mathbf{x}_{i})看成是一种概率。yi对应是1时,概率是h(xi),即xi属于1的可能性;yi对应是0时,概率是1-h(\mathbf{x}_{i}),即xi属于0的可能性 。那么它构造极大似然函数

\prod _{i=1}^{i=k}h(x_{i})\prod _{i=k+1}^{n}(1-h(x_{i}))

.其中i从0到k是属于类别1的个数k,i从k+1到n是属于类别0的个数n-k。由于y是标签0或1,所以上面的式子也可以写成:

                                                         \prod _{i=1}^{n} h(\mathbf{x}_{i})^{y_{i}}(1-h(\textbf{x}_{i}))^{1-y_{i}}

 无论y是0还是1,有一个是0次方,也就是1,为了方便。取对数,为了求最大值,将式子乘以负一取最小值。对于n个数据累加后值很大,使用

L(\textbf{w})=\frac{1}{n}\sum _{i=1}^{n} -y_{i}ln(h(\mathbf{x}_{i}))-(1-y_{i})ln(1-h(\textbf{x}_{i}))

 求最小值方法很多,机器学习中常用梯度下降系列方法。也可以采用牛顿法,或是求导数为零时w的数值等。

(2)损失函数

常用交叉熵,或平方损失函数

讲解一下逻辑思蒂回归当中的一些参数

LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='liblinear', max_iter=100, multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)

1.penalty:str类型,正则化项的选择。正则化主要有两种:l1和l2,默认为l2正则化。罚项 正则项 了路。liblinear两个支持,newton-cg和IBfgs,sag支持l2正则化

2dual:

bool(True、False), default:False

如果为True,则求解对偶形式,只有在penalty='l2' 且solver='liblinear' 时有对偶形式;通常样本数大于特征数的情况下,默认为False,求解原始形式。

3.tol : float, default:1e-4

停止求解的标准,默认误差不超过1e-4时,停止进一步的计算

可以设置跌倒到那哪一步

4.C

float,default:1.0

正则化系数λ的倒数; 必须是大于0的浮点数。 与SVM一样,值越小正则化越强,通常默认为1。

5.fit_intercept:bool(True、False),default:True

是否存在截距,默认为True。

6.intercept_scaling :float,default :1.0

仅在使用solver为“liblinear”且fit_intercept=True时有用。 在这种情况下,x变为[x,intercept_scaling],即具有等于intercept_scaling的常数值的“合成”特征被附加到实例矢量。 截距变成了intercept_scaling * synthetic_feature_weight. 注意: 合成特征权重与所有其他特征一样经受l1 / l2正则化。 为了减小正则化对合成特征权重(并因此对截距)的影响,必须增加intercept_scaling。相当于人造一个特征出来,该特征恒为 1,其权重为b。

特征提取,很有用的

7.class_weight :dict or ‘balanced’,default:None

class_weight参数用于标示分类模型中各种类型的权重,可以不输入,即不考虑权重,或者说所有类型的权重一样。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者我们自己输入各个类型的权重,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%。

如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。当class_weight为balanced时,类权重计算方法如下:n_samples / (n_classes * np.bincount(y))(n_samples为样本数,n_classes为类别数量,np.bincount(y)会输出每个类的样本数)

8.random_state:int,default:None

随机数种子,int类型,可选参数,默认为无,仅在正则化优化算法为sag,liblinear时有用。

9.solver :‘newton-cg’,‘lbfgs’,‘liblinear’,‘sag’,'saga',default:liblinear

liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。

lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。

newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。

sag:随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。

saga:线性收敛的随机优化算法。

对于小型数据集,可以选择‘liblinear’,而’sag’和’saga’对于大型数据集更快。

对于多类问题,只有’newton-cg’,‘sag’,'saga’和’lbfgs’处理多项损失;'liblinear’仅限于一项损失(就是用liblinear的时候,如果是多分类问题,得先把一种类别作为一个类别,剩余的所有类别作为另外一个类别。依次类推,遍历所有类别,进行分类。)。

‘newton-cg’、'lbfgs’和’sag’这三种优化算法只处理L2惩罚(这三算法都需要损失函数的一阶或者二阶连续导数),而’liblinear’和’saga’可以处理L1和L2惩罚。

10.max_iter:int ,default:100

仅适用于newton-cg,sag和lbfgs求解器。 求解器收敛的最大迭代次数。

11.multi_class:str,{‘ovr’, ‘multinomial’},default:‘ovr’

'ovr' :采用 one-vs-rest 策略,'multinomial':直接采用多分类逻辑回归策略。

如果选择ovr,则4种损失函数的优化方法liblinear,newton-cg,lbfgs和sag都可以选择。但是如果选择multinomial,则只能选择newton-cg, lbfgs和sag。

12.verbose:int,default:0

日志冗长度,用于开启/关闭迭代中间输出的日志。

13.warm_start:bool(True、False),default:False

热启动参数,如果为True,那么使用前一次训练结果继续训练,否则从头开始训练。对于liblinear解算器没用。

14.n_jobs:int,default:1

并行数,int类型,默认为1。1的时候,用CPU的一个内核运行程序,2的时候,用CPU的2个内核运行程序。为-1的时候,用所有CPU的内核运行程序。

总结:
Logistic回归的目的是寻找一个非线性函数Sigmoid的最佳拟合参数,求解过程可以由最优化算法完成。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到