为什么LR要用Sigmoid函数?

  统计/机器学习 监督式学习    浏览次数:7407        分享
3

如题,面试的时候被问到了...

 

今天二面了吗   2019-04-06 18:57



   7个回答 
22

Sigmoid是逻辑回归作为glm的link函数。之所以用它是因为:

1. 线性模型的输出都是在$[-\infty, +\infty]$之间的,而Sigmoid能够把它映射到$[0,1]$之间。正好这个是概率的范围。

2. Sigmoid是连续光滑的。

3. 根据Sigmoid函数,最后推导下来逻辑回归其实就是最大熵模型,根据最大似然估计得到的模型的损失函数就是logloss。这让整个逻辑回归都有理可据。

4. Sigmoid也让逻辑回归的损失函数成为凸函数,这也是很好的性质。

5. 逻辑回归的损失函数是二元分类的良好代理函数,这个也是Sigmoid的功劳。

至于为什么LR不用MSE,看这里

SofaSofa数据科学社区DS面试题库 DS面经

kidd23   2019-04-07 10:38

赞! - TheTheThe   2019-05-16 12:38
13

Sigmoid就是有广义线性模型GLM推出来的。对于分类问题,GLM的基本思想是把输入$X$的线性组合($score_k(x)=\beta_kx$)通过逆link function映射到非线性的概率分布$P(Y=k|x)=P_k(x)=\Phi(\beta_kx)$。$\Phi$是link function的逆函数,有两种选择:一种是logistic function/Sigmoid,是取自然指数后再归一化, $P_k(x)=e^{\beta_kx}/Z$,得到logistic regression,残差是logistic分布;还有一种是正态分布的CDF,得到Probit model,残差是正态分布。

对于二元分类,$Z=e^{\beta_0x}+e^{\beta_1x}$,归一化后只有一组参数$\beta$是独立的:

$$P_1(x)=\frac{e^{\beta_1x}}{e^{\beta_1x}+e^{\beta_0x}}$$

$$=\frac{1}{1+e^{-(\beta_1-\beta_0)x}}$$

$$=\frac{1}{1+e^{-\beta x}}$$

Sigmoid就是softmax 在K=2的特例。

然后是假设数据点都服从独立的伯努利分布,建立似然函数,再用最大似然法求$\beta$,这些都和Sigmoid无关。

SofaSofa数据科学社区DS面试题库 DS面经

Zealing   2019-04-09 02:06

3

我自己补充一下吧 不知正确

是广义线性模型理论和伯努利分布推导出的函数形式和sigmoid函数相同。

具体可以看这个链接https://www.cnblogs.com/zhangyuhang3/p/6873339.html

但为啥推导出了h(x)函数形式,就要用这个形式,还没有理解。


SofaSofa数据科学社区DS面试题库 DS面经

今天二面了吗   2019-04-07 18:49

2

因为交叉熵损失函数只和分类正确的预测结果有关。而平方损失函数还和错误的分类有关,该损失函数除了让正确分类尽量变大,还会让错误分类都变得更加平均,但实际中后面的这个调整使没必要的。但是对于回归问题这样的考虑就显得重要了,因而回归问题上使用交叉熵并不适合。

SofaSofa数据科学社区DS面试题库 DS面经

cabbage   2019-05-19 17:23

2

sigmoid函数输出0,1之间,训练好可模拟概率实现分类

>0.5判定为正例,反之为反例(也是新手,说说自己的理解)

导数好求

SofaSofa数据科学社区DS面试题库 DS面经

塔利班   2019-04-06 19:48

2

欢迎关注SofaSofa的面试题库哦,这个问题已经在卷44: 机器学习中收录了哦。

祝您面试顺利!

SofaSofa数据科学社区DS面试题库 DS面经

SofaSofa梦婕   2019-04-07 11:48

0

二项分布对应的就是sigmoid,多项分布对应的是softmax

SofaSofa数据科学社区DS面试题库 DS面经

桐桐酱   2019-06-04 13:31



  相关讨论

欠采样后概率还原问题

KNN中K值的选择

有序多分类问题

kNN的k=1为什么训练误差为0?

adaboost里的learning rate是什么意思?

怎么理解platt scaling?

MLR分片模型是什么模型?

线性可分是什么意思?

k-NN的k取1会怎么样

stacking模型里每个子模型的权重如何确定?

  随便看看

python(matplotlib)中如何把折线图和柱状图画在一起?

怎么理解surrogate loss function代理损失函数?

plt.show()之后matplotlib图像依然不展示

spark里怎么refresh表?

怎么给plt.subplot加一个主标题?