逻辑回归
什么是逻辑回归?
逻辑回归是用来做分类的算法,处理离散型的数据
我们在了解了线性回归之后,其实逻辑回归就很简单啦,线性回归是什么,其实说白了就是一个线性组合比如说wx+b,而逻辑回归是什么呀,最终的输出值是不是只有0,1,或者说是【0,1】的一个概率值,那我们就想是不是可以找到一个激活函数去给这个线性组合做一个映射,而在逻辑回归中采用的这个映射的激活函数就是sigmoid。
怎么做的分类?
把输出的结果,带入到sigmoid激活函数中,取值范围[0,1],同时呢这个也可以看作是概率,如果我们设置了一个阈值0.5,那么大于0.5的值可以看做正样本,小于0.5的可以看做负样本,这就进行了分类。
什么是sigmoid函数?
公式:1 /(1+e-z)
我们也可以带入一下,如果z=∞的时候,结果值是不是很接近1,如果z=0的时候,值是不是=0.5,如果z=-∞的时候,那么结果是不是接近0.,那么得出的图像就像下图一样。
我们知道,逻辑回归是线性回归通过一个映射关系的来的,这个映射关系又是sigmoid,那么此时的逻辑回归模型可以表达成什么?
Y = sigmoid(wx+b)
发现模型中的参数其实就是w,问题来啦,在做线性回归的时候,只对模型进行建模之后,模型求出来的值直接就是预测值,然后真实值直接去对比就可以了,就可以得出来误差,但是逻辑回归并不能,但是思路应该是一样的
p是预测出来的概率值,那么通过这个概率值的出来相应的预测值y,可以看出来,我们这个公式是分成两种情况的对不对,那么代价是不是也可以分为两种情况,1.如果真实值的y=1的时候,预测出来的p越小,代价是不是就越大,如果预测出来的p越大那么代价是不是就会越小,2.如果真实值y=0的情况下,如果预测出来的p越大,说明我预测成1的概率也就越大,那这很明显又是很大的概率会出错,因此代价也是会更大。
那么既然知道它们之间有这个关系,是不是我们将这个关系表示出来就可以进行求解了?
那么应该如何去表示?
那么cost=-log(p),是不是就是把上边的图像反过来就好了,又因为其中的变量p(概率)的取值肯定实在(0,1)之间的,因此得到的函数如下:
同理是不是也可以画出来cost=-log(1-p)的函数图像:
那么到现在可以理解为什么要使用log函数去作为惩罚函数
但是写成两个函数的话总归是很不方便的,同时我们考虑它是不是也可以写成一个函数:
他们这两个式子是等价的,假设说y=1是,前半部分就是log(p),后半部分就是0。
然后拓展到m个样本上:
然后将p带入:
这个式子就是我们最终的道德逻辑回归的代价公式,那么这个这么复杂的式子肯定不能像线性回归的正规方程那样直接求出解,不能直接求出最优的参数,不过虽然不能直接的进行求解,但是可以使用梯度下降法进行求解。
接下来说逻辑回归做的经典任务就是二分类问题,那么它可不可以去实现多分类问题?
可以,比如说有三类,可以将class1作为1类,另外的两类作为0类,进行划分,然后将class2作为1类,其他两类作为0类,进行划分,最终的出如下结果:
为什么逻辑回归的处理要进行离散化?
以分类算法为例,假设班里有50个同学,其中男生30个,女生20个,我们根据身高、体重、头发长度、声音分贝等等特征,想找到所有女生,比如已经有这样一个分类器了,得到结果如下:
这里我们是要找到所有女同学,故把女同学作为正样本(positive),男同学作为负样本(Negative),预测结果正确为True,预测结果错误为False。基于此,我们结合上面的数据给出如下定义和值:
TP(True Positive): 真实是女生,预测结果也是女生的数量(18个)
FN(False Negative): 真实是女生,预测结果是男生的数量(2个)
TN(True Negative): 真实是男生,预测结果也是男生(25个)
FP(False Postive): 真实是男生,预测结果是女生(5个)