逻辑回归 Logistic Regression
1 原理
1.1 分类问题
目标是面对某种事物,估计它的可能性,判断属于哪种已知的样本类,比如买不买某种东西、是不是垃圾邮件等。类别的数量可以有很多,所以按数量可以分为二分类(binary classification)和多元分类(multiclass classification)。但是对于多分类问题也可以通过OvR、OvO等一些策略方法转为二分类问题。
1.1.1 OvR(One vs Rest)
一对剩余的所有,也可能叫OvA。总之思路就是假如有四个类别,选中一个类别One,剩余的三个都看作是其他类别Rest,于是四个类别的问题就变成了One和Rest的问题。因此,每有一个这样的One就会有对应的一个二分类,所以按照假设,我们得到了四个二分类问题。
进一步的,在训练过程中,将数据集分成4份,每一份都转换为对应的二分类数据集。然后将每一份都使用一个单独的分类器进行训练,就会得到相对应的测试样本为对应的One的概率。最后,我们选取概率值最大的类别作为测试样本的最终类别。
1.1.2 OvO(One vs One)
一对一。思路是假如有四个类别,直接挑出两个,然后对这两个进行二分类。于是,就会有
1.1.3 逻辑回归
OvO和OvR根据任务数量在时间上有差异;OvO分类结果会更加准确,因为其保留了真实的类别信息,而OvR将剩余的类别都保留混淆了类别信息。
#sklearn的逻辑回归模型的multi_class超参数可设置分类方式
逻辑回归是一种解决二分类问题的机器学习方法,即给定输入的x,判断它的标签是A还是B。
1.2 具体过程
1.2.1 如何二分类
可以设置一个阈值,如果预测的数值大于阈值,那么就属于A;反之属于B。
还可以去预测标签为A的概率,若概率大于0.5,则认为是A;反之是B。
1.2.2 如何得到概率
概率的区间是[0,1],但线性模型
1.2.3 Sigmoid函数
公式如下:
函数图像如下:
由图像可以看出,sigmoid函数是一个值域为[0,1]的“s”形曲线,且
求导有:
1.2.4 逻辑回归模型
将
2 损失函数
为了得到训练好的参数w,我们应该最优化模型的损失函数。
2.1 似然(likelihood)
概率是特定环境下某种事件发生的可能性,是在结果产生之前的预测。
似然与其相反,是在确定的结果下推测产生这个结果的可能环境即参数。
比如抛硬币,根据硬币均匀的性质我们推测任何一面朝上的概率均为50%。当随机抛掷一枚硬币1000次,结果500次朝上,500次朝下,那么就容易判断这枚硬币性质均匀,两面朝上概率50%。
因此,设
机器学习中更关注似然函数最大值,因为我们的目的是预测某种事件发生的概率,因此我们希望得到导致这个概率的最有可能的条件,即根据已知的事件来找出产生这种结果的最有可能的参数,即似然函数最大值。
2.2 损失函数
损失函数衡量当前的模型输出结果跟实际的输出结果之间的差距,那么根据似然和概率的关系,这里的损失函数的值等于事件发生的总概率,损失函数就是似然函数,因为我们更关注似然函数的最大值,但损失的含义和最大有点不搭,所以给似然函数前加个负号,这样似然函数取最大即损失函数最小。
由于标签只有0和1,因此对于输入的一个样本,看成一个事件的话,设标签为1的概率是p,则
那么事件发生的概率就是:
即
因此,当有一组采集得到的N个数据
两边取对数有:
3 梯度下降法求解
为求出
3.1 梯度下降法
多元函数
不难看出梯度方向是函数增长速度最快的方向,反之是函数减少速度最快的方向,因为它是由函数对各个x求偏导(在对应x上的切线方向)得到的。
因此如果要计算一个函数的最小值,可以从一个初始点
因此,
迭代关系为:
3.2 求解
为消除样本个数的影响,损失函数的形式稍微改变为损失函数除以样本个数:
根据复合函数的链式求导法则:
初始化一个
迭代过程:
4 代码实现
以scikit-learn上的乳腺癌数据集为例:
from