目录
第1关:逻辑回归算法大体思想
什么是逻辑回归
当一看到“回归”这两个字,可能会认为逻辑回归是一种解决回归问题的算法,然而逻辑回归是通过回归的思想来解决二分类问题的算法。
那么问题来了,回归的算法怎样解决分类问题呢?其实很简单,逻辑回归是将样本特征和样本所属类别的概率联系在一起,假设现在已经训练好了一个逻辑回归的模型为f(x),模型的输出是样本
x
的标签是1
的概率,则该模型可以表示成p^=f(x)。若得到了样本x
属于标签1
的概率后,很自然的就能想到当p^>0.5时x
属于标签1
,否则属于标签0
。所以就有$$\hat y=\begin{cases} 0 & \hat p <0.5 \ 1 & \hat p >0.5 \end{cases}(其中\hat y$$为样本x根据模型预测出的标签结果,标签0
和标签1
所代表的含义是根据业务决定的,比如在癌细胞识别中可以使0
代表良性肿瘤,1
代表恶性肿瘤)。由于概率是0到1的实数,所以逻辑回归若只需要计算出样本所属标签的概率就是一种回归算法,若需要计算出样本所属标签,则就是一种二分类算法。
那么逻辑回归中样本所属标签的概率怎样计算呢?其实和线性回归有关系,学习了线性回归的同学肯定知道线性回归无非就是训练出一组参数WT和b来拟合样本数据,线性回归的输出为y^=WTx+b。不过y^的值域是(−∞,+∞),如果能够将值域为(−∞,+∞)的实数转换成(0,1)的概率值的话问题就解决了。**要解决这个问题很自然地就能想到将线性回归的输出作为输入,输入到另一个函数中,这个函数能够进行转换工作,假设函数为σ,转换后的概率为p^,则逻辑回归在预测时可以看成p^=σ(WTx+b)**。 σ其实就是接下来要介绍的
sigmoid
函数。sigmoid 函数
sigmoid
函数的公式为:σ(t)=1/1+e−t
函数图像如下图所示:
从sigmoid函数的图像可以看出当t趋近于−∞时函数值趋近于
0
,当t趋近于+∞时函数值趋近于1
。可见sigmoid
函数的值域是(0,1),满足我们要将(−∞,+∞)的实数转换成(0,1)的概率值的需求。因此逻辑回归在预测时可以看成p^=1/(1+e−WTx+b)
编程要求
根据提示,在右侧编辑器补充 python 代码,实现
sigmoid
函数。底层代码会调用您实现的sigmoid
函数来进行测试。(提示: numpy.exp() 函数可以实现e的幂运算)测试说明
测试用例:
输入:
1
预期输出:
0.73105857863
输入:
-2
预期输出:
0.119202922022
#encoding=utf8
import numpy as np
#sigmoid函数
def sigmoid(t):
#输入:负无穷到正无穷的实数
#输出:转换后的概率值
#********** Begin **********#
result = 1.0 / (1 + np.exp(-t))
#********** End **********#
return round(result,12)
if __name__ == '__main__':
pass
第2关:逻辑回归的损失函数
根据上一节实训中所学习到的知识,我们已经知道了逻辑回归计算出的样本所属类别的概率p^=σ(WTx+b),样本所属列表的判定条件为$$\hat y=\begin{cases} 0 & \hat p <0.5 \ 1 & \hat p >0.5 \end{cases}。很明显,在预测样本属于哪个类别时取决于算出来的\hat p。从另外一个角度来说,假设现在有一个样本的真实类别为\hat p$$有关。
当然逻辑回归的损失函数不仅仅与p^有关,它还与真实类别有关。假设现在有两种情况,情况A:现在有个样本的真实类别是
0
,但是模型预测出来该样本是类别1
的概率是0.7
(也就是说类别0的概率为0.3
);情况B:现在有个样本的真实类别是0
,但是模型预测出来该样本是类别1
的概率是0.6
(也就是说类别0
的概率为0.4
);请你思考2