15 回归算法 - Logistic回归 - Logit函数

简介:

=== Logit函数 ===

Odds:比值比(优势比),用来衡量特征中分类之间关联的一种方式。
指的是该事件发生的概率与该事件不发生的概率的比值: p/1-p

Logit函数,logit(p) = log(Odds)
Logit函数

我们假设:logit (p) 和 X 之间服从一个线性关系,因为当他们之间呈现线性关系的时候,可以帮助我们做分类。

为什么可以这样假设?
其实就像 hθ(x) = θTX一样,我们假设其呈现线性关系,然后求出θ值,最后建立模型一个道理。

搞清楚后以上的思路后,我们继续演绎。对于logit (p)可以做如下的转化:

最后得到的公式,我们称为 Logistic/sigmoid函数:
Logistic/sigmoid函数

Logistic函数的图像:
图像

重点:
Odds:比值比(优势比),用来衡量特征中分类之间关联的一种方式。指的是该事件发生的概率与该事件不发生的概率的比值: p/1-p

我们最终得到的是一个θTx 和p之间的映射。
在图像中的体现是: p(θTx ) + p(-θTx ) = 1

通过把θTx 传输到函数中后,我们可以得到的返回值在0~1之间。
在θTx =0这一点的时候,p=0.5;
θTx越小,p趋向于0;
θTx越大,p趋向于1;

===Logistic回归 ===

Logistic函数的“定义域”和“值域” :

Logistic回归的中心目标是求解二元分类的问题。
所以值域中,我们设y的取值为0或1。
接下来分析一下p和y的关系。

y:最终分类的结果。y=1 or y=0
p:指的是该事件发生的概率。即y=1的概率。

我们可以自定义一个事情发生概率的阈值 h
如果y=1的概率大于h,我们认为预测的结果y^是1
如果y=1的概率小于h,我们认为预测的结果y^是0

__但是__如果加入了自定义阈值设定的话,意味着我们人为的经验被纳入运算的过程中了,那么会导致最终的预测结果产生一定的偏差,所以不建议使用。
就根据sigmoid函数的对称轴 h=0.5 作为分类的阈值即可。


Logistic/sigmoid函数:

令:z = θTx

链式法则求导: g'(z) = g(z)*(1-g(z))
这个结论很重要,因为在用梯度下降法求极值的时候需要用到原函数的导数。


对于y的值不是取1就是去0的情况,满足数学里的__伯努利分布__亦称__零一分布__、__两点分布__。

p:也就是y=1的概率。

Logistic回归满足的两个假设:
1、某一点观测值随机变量 y|x 服从伯努利分布。
2、各个观测值y之间独立。

1、假设:

2、似然函数:

思路:
首先,因为观测值是独立同分布的,所以可以用联合概率密度函数,即连乘所有单个样本发生 y=x 情况的概率。

对于所有观测值x中发生了y的概率,连乘求出联合概率密度函数:
联合密度函数

似然函数体现了一种可能性,即当前有一组参数θ,使得观测值X达到上面这种联合概率密度函数值的可能性最大。那么这组θ值就是我想要的。

例子

最后,求解θ的问题转化为求似然函数最大值的问题了。
即θ为何值时,L(θ)最大。
当最大似然函数最大时,对应的θ值就是最优解。

3、对数似然函数:

求函数的最大值,首先要对函数进行求导。然后利用梯度下降的算法求解最小值。
要对原来的最大似然函数求导十分困难,但我们知道函数对应的对数函数,其凹凸性、极值点和原函数是相同的。
而且对数函数的求导会比原函数方便一点,所以我们先取得对数似然函数。

4、对数似然函数求导:

上面的公式是基于假设 [p: y=1] [1-p : y=0 ] 形成的。
如果 [p: y=1] [1-p : y=-1 ]时,对应的似然函数和对数似然是什么?

5、Logistic回归θ参数的求解过程为(类似梯度下降法):

由于我们要求最大似然函数的随机梯度,需要找函数的极大值。
θnew = θold + α* ∂L(θ) / ∂θ
因为是找最大值,所以本质上应该称为梯度上升法。
目标函数 => 对数似然函数 L(θ)的极大值

最大似然函数的随机梯度
上述公式是Logistic回归θ参数的求解 本质,需要重点理解。

6、Logistic回归的损失函数):

机器学习中都需要构造一个损失函数,来衡量系统好坏的函数。损失函数越小,系统越优秀。
但现在我们的目标函数是一个越大越优秀的函数,我们做一个什么操作才能使其成为Logistic回归的损失函数呢?
显然加上一个负号即可。
损失函数

相关文章
|
4月前
|
算法 JavaScript 前端开发
JavaScript算法和数据结构:写一个二分查找的函数。
JavaScript算法和数据结构:写一个二分查找的函数。
32 0
|
4月前
|
搜索推荐 算法 Python
如何实现归并排序算法? 要求:编写一个Python函数,输入一个无序列表,返回排序后的列表。
如何实现归并排序算法? 要求:编写一个Python函数,输入一个无序列表,返回排序后的列表。
|
2月前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
73 0
|
30天前
|
机器学习/深度学习 算法 大数据
基于PyTorch对凸函数采用SGD算法优化实例(附源码)
基于PyTorch对凸函数采用SGD算法优化实例(附源码)
29 3
|
3月前
|
机器学习/深度学习 存储 算法
【程序员必须掌握的算法】【Matlab智能算法】GRNN神经网络-遗传算法(GRNN-GA)函数极值寻优——非线性函数求极值
【程序员必须掌握的算法】【Matlab智能算法】GRNN神经网络-遗传算法(GRNN-GA)函数极值寻优——非线性函数求极值
|
3月前
|
算法 Java C++
数据结构与算法面试题:实现一个函数 fill(int[] a, int n, int v),使其将大小为 n 的数组 a 填满为 v。
数据结构与算法面试题:实现一个函数 fill(int[] a, int n, int v),使其将大小为 n 的数组 a 填满为 v。
16 0
|
3月前
|
算法 C++
数据结构和算法面试题:实现一个函数,将一棵二叉树转换为它的镜像。(递归或者非递归实现)
数据结构和算法面试题:实现一个函数,将一棵二叉树转换为它的镜像。(递归或者非递归实现)
15 0
|
3月前
|
算法 Java C++
数据结构与算法面试题:实现一个函数,判断一个链表是否为回文链表。(提示:反转后半部分链表比对前半部分)
数据结构与算法面试题:实现一个函数,判断一个链表是否为回文链表。(提示:反转后半部分链表比对前半部分)
21 0
|
4月前
|
算法 调度 开发者
FreeRTOS入门教程(空闲任务和钩子函数及任务调度算法)
FreeRTOS入门教程(空闲任务和钩子函数及任务调度算法)
75 0
|
4月前
|
算法 Java
给定一个字符串数组,如何找到其中最长的回文子串? 要求:编写一个Java函数,输入一个字符串数组,输出其中最长的回文子串。要求时间复杂度为O(n^2)。可以考虑使用动态规划或中心扩展的方法来优化算法。
给定一个字符串数组,如何找到其中最长的回文子串? 要求:编写一个Java函数,输入一个字符串数组,输出其中最长的回文子串。要求时间复杂度为O(n^2)。可以考虑使用动态规划或中心扩展的方法来优化算法。
41 1