3.0-逻辑回归原理和学习(LR)LogisticRegression(决策边界,多项式逻辑回归,逻辑回归解决多分类问题)

it2022-05-05  204

逻辑回归:

即可以看做回归算法,也可以看做分类算法。一般当做分类算法来用,解决二分类问题,如果要解决多分类问题,需要自己改进。

 看下逻辑回归的问题点,对于逻辑回归来说,解决二分类问题。我们需要加入一个sigmoid函数求出我们的概率P,然后将结果分类为1和0两类

对于我们的逻辑回归来说,我们也采用梯度下降法的进行模型的构建。所以我们还是需要对我们的损失函数J进行求导操作

下面附上推导公式,具体的推导公式我进行了手写,实在敲不出来了

对推导过程没什么兴趣的话,直接看我们图的第二张纸方框中的结果,逻辑回归推导到最后,和我们线性模型的损失函数求导值基本一样。r然后我们将我们的y'使用sigmoid函数去替代,得出最后的我们的dJ 函数为

 

接下去的代码我就不贴了,和线性代数的代码基本一样,只要将我们的def J  和def dJ 修改下就好了,具体的梯度下降法的函数是不用动的,通过梯度下降法求出我们的theta值即可。所以对我们的fit操作,是和线性回归的代码是一样的,对于我们的predict操作。我们只需要带入sigmoid函数求出具体的P,通过P去判断y属于1还是0中的哪一类即可

下面我们来看看我们逻辑回归的决策边界

我们的决策边界就是 我们的分割面

 

当然我们的逻辑回归也可以进行模型的正则化和模型采用多项式特征方式

模型的正则化我们在损失函数J前面引入一个超参数C,后面正常加上L1或者L2范式

我们看看在scikit-learn中的代码使用

图中使我们没有采用多项式的方式,得出的决策边界,显然是欠拟合的。我们加入多项式

 

最后一点内容就是关于逻辑回归怎么实现多分类的问题 

 

由上图我们可以看到,逻辑回归解决多分类的问题,

第一种思路就是提取出其中的一个分类,将另外所有的类别归为另一个类,这样我们采用逻辑回归得出每个类别的概率,然后将新样本进行多次分类。最后新样本在哪个模型得分最高,我们就将新样本分类到哪个类别里面去

第二种思路就是我们将所有类别,分别取出其中两个类别作比较,也就是一共要做C(n,2) 次类别的比较=n*(n-1) / 2 

然后每个类别分别得出不同的类别的概率,将新样本在每个类别中做分类,最后得出新样本在这么多次比较中,得到的分类类别最多次的类别作为最后分类结果

所以OVO方式的效率是要比ovr要低的

在sklearn中默认采用的multi-class=‘ovr’方式,如果我们需要采用ovo的方式,我们需要改成OVO的方式,我们需要这样修改multi-class的值为ovo,另外,我们还需要修改solver="newton-cg",具体的solve值取多少,可以自行查阅文档

log_reg = LogisticRegression(multi_class="multinomial", solver="newton-cg")

 

 


最新回复(0)