逻辑回归解释 (Logistic Regression)
文章目录
- 什么是逻辑回归算法?
- 可视化曲线python 代码
- 最大似然估计
- 梯度下降法
- Python代码简单实现(批量梯度下降法)
- 优缺点
- 什么时候用
- 多分类
- 应用场景
- 总结
什么是逻辑回归算法?
Logistic 回归是二分类任务的首选方法。它输出一个 0 到 1 之间的离散二值结果。简单来说,它的结果不是 1 就是 0。公式
f(x)=11+e−xf(x) = \frac{1}{1+e^{-x}} f(x)=1+e−x1
数学常数 e 的真正含义,可以解释为什么是常数 e , 而不是 π\piπ 之类的。
以下猜想:
什么是 e ? 简单说, e 就是增长的极限, 数值为 2.71828…
在单位时间内,持续的翻倍增长所能达到的极限值
这个值是自然增长的极限,因此以 e 为低的对数, 叫做自然对数。存在:
e=limn→∞(1+1n)ne = \lim _{n \rightarrow \infty}(1+\frac{1}{n})^{n} e=n→∞lim(1+n1)n
摘自维基百科二项式定理证明
视 n 为存在的数值,所以用二项式定理可证明 e 为 2.71828…
e=limn→∞(1+1n)n=limn→∞∑i=0nCin1n−i(1n)i=limn→∞[C0n1n(1n)0+C1n1n−1(1n)1+C2n1n−2(1n)2+C3n1n−3(1n)3+...+Cnn10(1n)n]=limn→∞[1×1+n×1n+n!(n−2)!2!×1n2+n!(n−3)!3!×1n3+...+1×1nn]=limn→∞[1+1+n×(n−1)2n2+n×(n−1)(n−2)3×2n3+...+1nn]=2+12+16+...=2.71828...e = \lim_{n\to\infty} \left(1+\frac{1}{n}\right)^n \\ = \lim_{n\to\infty} \sum_{i=0}^{n}C_{i}^{n}1^{n-i}\left(\frac{1}{n}\right)^i \\ =\lim_{n\to\infty} \left[C_{0}^{n}1^{n}\left(\frac{1}{n}\right)^0+C_{1}^{n}1^{n-1}\left(\frac{1}{n}\right)^1+C_{2}^{n}1^{n-2}\left(\frac{1}{n}\right)^2+C_{3}^{n}1^{n-3}\left(\frac{1}{n}\right)^3+...+C_{n}^{n}1^0\left(\frac{1}{n}\right)^n\right] \\ =\lim_{n\to\infty} \left[1\times 1+n\times \frac{1}{n}+\frac{n!}{\left(n-2\right)!2!}\times \frac{1}{n^2}+\frac{n!}{\left(n-3\right)!3!}\times \frac{1}{n^3}+...+1\times \frac{1}{n^n}\right] \\ =\lim_{n\to\infty} \left[1+1+\frac{n\times \left(n-1\right)}{2n^2}+\frac{n\times \left(n-1\right)\left(n-2\right)}{3\times 2n^3}+...+\frac{1}{n^n}\right] \\ =2+\frac{1}{2}+\frac{1}{6}+... \\ =2.71828... e=n→∞lim(1+n1)n=n→∞limi=0∑nCin1n−i(n1)i=n→∞lim[C0n1n(n1)0+C1n1n−1(n1)1+C2n1n−2(n1)2+C3n1n−3(n1)3+...+Cnn10(n1)n]=n→∞lim[1×1+n×n1+(n−2)!2!n!×n21+(n−3)!3!n!×n31+...+1×nn1]=n→∞lim[1+1+2n2n×(n−1)+3×2n3n×(n−1)(n−2)+...+nn1]=2+21+61+...=2.71828...
Python代码实现求 e:
import math
def e(n):# factorial 阶乘return sum(1.0 / math.factorial(i) for i in range(n))print(exp(100))
# 输出: 2.7182818284590455
e 是自然对数,逻辑回归的模型依赖自然对数,自然是 e , 而不是什么数了。范围 0 到 1之间。
还是说重点,什么是逻辑回归?
逻辑回归,英文: logistic regression 翻译成中文的译本却是有几个,逻辑回归(大家常说的),对数几率回归(周志华机器学习书籍),逻辑斯谛回归(Understanding Machine Learning:From Theory to Algorithms中译本)。
虽然名字有回归两字,但是它不是一个需要预测连续结果的回归算法
比如垃圾邮件,Logistic 回归算法输入,就是判断它是否是垃圾邮件(1)或者是正常邮件(0)
逻辑回归公式, logistic 函数,也是 sigmoid 函数:
f(x)=11+e−xf(x) = \frac{1}{1+e^{-x}} f(x)=1+e−x1
可以看出主要是用来解决(0 / 1) 二分类的问题,延伸
P(y=1∣x;θ)=f(x;θ)=11+e−θTxP(y=1 | x ; \theta)=f(x ; \theta)=\frac{1}{1+e^{-\theta^{T} x}} P(y=1∣x;θ)=f(x;θ)=1+e−θTx1
这里:
- x;θx;\thetax;θ 为输入的两个参数
- θTx=θ0+θ1x1+θ2x2+θ3x3+…\theta^{T} x=\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\theta_{3} x_{3}+\dotsθTx=θ0+θ1x1+θ2x2+θ3x3+…
- θ=[θ0,θ1,θ2,θ3,…]\theta=\left[\theta_{0}, \theta_{1}, \theta_{2}, \theta_{3}, \ldots\right]θ=[θ0,θ1,θ2,θ3,…]
- x=[1,x1,x2,x3,…]x=\left[1, x_{1}, x_{2}, x_{3}, \ldots\right]x=[1,x1,x2,x3,…]
- 当 P(y=1∣x)P(y=1|x)P(y=1∣x) 的值大于 0.5 , 输出 1, 否则输出 0
[外链图片转存失败(img-aAeF95D9-1562465173138)(./img/sigmoid.png)]
可视化曲线python 代码
import math
import matplotlib.pyplot as plt
import numpy as np
import mpl_toolkits.axisartist as axisartist# 原函数
def sigmoid(input_x):return 1.0 / (1.0 + np.exp(-input_x))# 画图
def Axis(fig, ax):#将绘图区对象添加到画布中fig.add_axes(ax)# 隐藏坐标抽ax.axis[:].set_visible(False)# new_floating_axis 创建新的坐标ax.axis["x"] = ax.new_floating_axis(0, 0)# 给 x 轴创建箭头线,大小为1.0ax.axis["x"].set_axisline_style("->", size = 1.0)# 给 x 轴箭头指向方向ax.axis["x"].set_axis_direction("top")# 同理,创建 y 轴ax.axis["y"] = ax.new_floating_axis(1, 0)ax.axis["y"].set_axisline_style("->", size = 1.0)ax.axis["y"].set_axis_direction("right")# 返回间隔均匀的100个样本,计算间隔为[start, stop]。
x = np.linspace(-10, 10, 100)
y = [sigmoid(x[i]) for i in range(len(x))]#创建画布
fig = plt.figure(figsize=(12, 12))#创建绘图对象ax
ax = axisartist.Subplot(fig, 222)
Axis(fig, ax)# 设置x, y轴范围
plt.ylim((-0.5, 1))
plt.xlim((-6, 6))
plt.yticks((-0.5, 1, 0.5))
plt.plot(x, y, color='red', label='sigmoid')
plt.legend()plt.show()
最大似然估计
你可以使用不同的方法(如优化算法)来最大化概率。牛顿法也是其中一种,可用于查找许多不同函数的最大值(或最小值),包括似然函数。也可以用梯度下降法代替牛顿法。这里描述使用梯度下降法
推导求参数 θ\thetaθ
类别 1 的概率
P=11+e−θTxP =\frac{1}{1+e^{-\theta^{T} x}} P=1+e−θTx1类别 0 的概率
1−P=1+e−θTx−11+e−θTx=11+eθTx1-P=\frac{1+e^{-\theta^{T} x}-1}{1+e^{-\theta^{T} x}}=\frac{1}{1+e^{\theta^{T} x}} 1−P=1+e−θTx1+e−θTx−1=1+eθTx1类别 1 与 类别 0 的概率
P1−P=eθTx\frac{P}{1-P}=e^{\theta^{T} x} 1−PP=eθTx类别 1 与 类别 0 概率比值的自然对数
lnP1−P=θTx\ln \frac{P}{1-P}=\theta^{T} x ln1−PP=θTx
可以看到等式右边是线性回归模型的函数y=wTx+by = w^Tx + by=wTx+b , (求导过程不会保留常数b), logistic regresssion 就是用线性预测结果去逼近真实标记的对数几率。
- 等式转换
lnp(y=1∣x;θ)p(y=0∣x;θ)=θTx\ln \frac{p(y=1 | x;\theta )}{p(y=0 | x;\theta)}=\theta^{T} x lnp(y=0∣x;θ)p(y=1∣x;θ)=θTx
p(y=1∣x;θ)=eθTx1+eθTx=P=11+e−θTxp(y=0∣x;θ)=11+eθTx\begin{aligned} p(y=1 | x;\theta) &=\frac{e^{\theta^{T} x}}{1+e^{\theta^{T} x}} = P =\frac{1}{1+e^{-\theta^{T} x}} \\ \ \\ p(y=0 | x; \theta) &=\frac{1}{1+e^{\theta^{T} x}} \end{aligned} p(y=1∣x;θ) p(y=0∣x;θ)=1+eθTxeθTx=P=1+e−θTx1=1+eθTx1
ln 是log 底数为 e 的简写。
现在可以用 “极大似然法” 估计 θ\thetaθ 的值,极大似然估计的目的就是:利用已知的样本结果,反推最大概率(最有可能)导致这样结果的参数值。
类别 1 的概率为 P, 则类别为 0 概率为 1 - P , 的得到概率为
p(yi)=Py(i)∗(1−P)1−y(i)p(y_i) = P^{y^{(i)}} * (1-P)^{1 - y^{(i)}} p(yi)=Py(i)∗(1−P)1−y(i)
这样可得到极大似然函数
L(θ)=∏i∈{1,…,N}Py(i)∗(1−P)1−y(i)L(\theta)=\prod_{i \in\{1, \ldots, N\}} P^{y^{(i)}} * (1-P)^{1-y^{(i)}} L(θ)=i∈{1,…,N}∏Py(i)∗(1−P)1−y(i)
取自然对数
L(θ)=∑i=1N(y(i)×lnP+(1−y(i))×ln(1−P))L(\theta) = \sum_{i=1}^{N}\bigg ( y^{(i)}\times lnP + (1-y^{(i)}) \times ln(1-P) \bigg) L(θ)=i=1∑N(y(i)×lnP+(1−y(i))×ln(1−P))
梯度下降法
似然函数,可化简:
L(θ)=∑i=1N(y(i)×lnP+(1−y(i))×ln(1−P))=∑i=1N(y(i)(lnP−ln(1−P))+ln(1−P))=∑i=1N(y(i)lnP1−P+ln(1−P))L(\theta) = \sum_{i=1}^{N}\bigg ( y^{(i)}\times lnP + (1-y^{(i)}) \times ln(1-P) \bigg) \\= \sum_{i=1}^{N}\bigg ( y^{(i)}(lnP - ln(1-P)) + ln(1-P) \bigg) \\= \sum_{i=1}^{N}\bigg ( y^{(i)}ln\frac{P}{1-P} + ln(1-P) \bigg ) L(θ)=i=1∑N(y(i)×lnP+(1−y(i))×ln(1−P))=i=1∑N(y(i)(lnP−ln(1−P))+ln(1−P))=i=1∑N(y(i)ln1−PP+ln(1−P))
由上面类别的概率
lnP1−P=θTx,1−P=11+eθTx\ln \frac{P}{1-P}=\theta^{T} x \ \ \ \ \ \ , \ \ \ \ 1-P=\frac{1}{1+e^{\theta^{T} x}} ln1−PP=θTx , 1−P=1+eθTx1
继续化简:
L(θ)=∑i=1N(y(i)×(θx)+ln11+eθTx)=∑i=1N(y(i)×(θx)+ln((1+eθTx)−1))=∑i=1N(y(i)×(θx)−ln(1+eθTx))L(\theta) = \sum_{i=1}^{N} \bigg ( y^{(i)}\times (\theta x) + ln\frac{1}{1+e^{\theta^{T} x}}\bigg) \\ = \sum_{i=1}^{N} \bigg ( y^{(i)}\times (\theta x) + ln(({1+e^{\theta^{T} x}})^{-1})\bigg) \\ = \sum_{i=1}^{N} \bigg ( y^{(i)}\times (\theta x) - ln({1+e^{\theta^{T} x}})\bigg) L(θ)=i=1∑N(y(i)×(θx)+ln1+eθTx1)=i=1∑N(y(i)×(θx)+ln((1+eθTx)−1))=i=1∑N(y(i)×(θx)−ln(1+eθTx))
负梯度,求得最小值,即最小损失值
J(θ)=−L(θ)=−∑i=1N(y(i)×(θx)−ln(1+eθTx))J(\theta) = -L(\theta) = -\sum_{i=1}^{N} \bigg ( y^{(i)}\times (\theta x) - ln({1+e^{\theta^{T} x}})\bigg) J(θ)=−L(θ)=−i=1∑N(y(i)×(θx)−ln(1+eθTx))
对 θ\thetaθ 求导:
dJdθ=−∑i=1N(y(i)×x−11+eθTx×eθTx×x)\frac{dJ}{d\theta} = - \sum_{i=1}^{N}\bigg( y^{(i)} \times x - \frac{1}{1+e^{\theta^Tx}} \times e^{\theta ^Tx}\times x \bigg) dθdJ=−i=1∑N(y(i)×x−1+eθTx1×eθTx×x)
由上面的式子:
p(y=1∣x;θ)=eθTx1+eθTx=11+e−θTx=P\begin{aligned} p(y=1 | x;\theta) &=\frac{e^{\theta^{T} x}}{1+e^{\theta^{T} x}} = \frac{1}{1+e^{-\theta^{T} x}}=P \end{aligned} p(y=1∣x;θ)=1+eθTxeθTx=1+e−θTx1=P
最后可化简得
∇θJ(θ)=dJdθ=−∑i=1Nx(y(i)−P)\nabla_{\theta} J(\theta) = \frac{dJ}{d\theta} = -\sum_{i=1}^{N}x(y^{(i)}-P) ∇θJ(θ)=dθdJ=−i=1∑Nx(y(i)−P)
梯度下降更新权值:
θnew=θold−α∇θJ(θ)=θold−α∑ix(i)(f(x(i);θ)−y(i))\theta_{new} = \theta_{old} - \alpha \nabla_{\theta} J(\theta) \\ = \theta_{old} - \alpha\sum_{i}x^{(i)}(f(x^{(i)};\theta)-y^{(i)}) θnew=θold−α∇θJ(θ)=θold−αi∑x(i)(f(x(i);θ)−y(i))
这里:
θold\theta_{old}θold 为权值旧的值
f(x(i);θ)f(x^{(i)}; \theta)f(x(i);θ) 为预测类别 1 的概率
$\alpha $ 为学习率
y(i)y^{(i)}y(i) 已知类别的值
x(i)x^{(i)}x(i) 特征的值
Python代码简单实现(批量梯度下降法)
import numpy as np# sigmoid 函数
def sigmoid(input_x):return 1.0 / (1.0 + np.exp(-input_x))# 损失函数
def loss(P, y):return (P - y)# 更新权值
def update_theta(alpha, X, error, theta):grad = np.dot(X.T, error)theta -= alpha * gradreturn theta# 保存记录目标函数的值,以便观察是否越接近损失 0
def save_cost(P, y, N):j = -np.sum(y * np.log(P) + (1 - y) * np.log(1 - P))return (1 / N) * j
测试是否 θ\thetaθ 已经是最优:
from sklearn import datasets
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from numpy.linalg import inviris = datasets.load_iris()
X = iris.data[:100, :]
y = iris.target[:100].reshape((100, -1))N, M = X.shape
# 学习率
alpha = 0.0003
# 参数矩阵
theta = np.random.random((n, 1))
# 循环
maxLoop = 30
# 创建Series
J = pd.Series(np.arange(maxLoop))for i in range(maxLoop):# sigmoid 预测函数P = sigmoid(np.dot(X, theta)) # 损失error = loss(P, y)# 保存目标函数的值J[i] = save_cost(P, y, N)# 更新权值theta = update_theta(alpha, X, error, theta)
print(theta)
J.plot()
plt.show()
优缺点
优点:
- 简单实现,模型的可解释性很好。
- 训练速度快。计算的量只和特征的数目有关,不需要缩放输入特征等等。
- 资源占用小。因为只需要存储各个维度的特征值。
缺点:
- 准确率不是很高,就是因为模型(非常类似线性模型),很难拟合数据的真实分布,容易导致过拟合。
- 难处理数据不平衡的问题。
- 逻辑回归本身无法解决非线性问题,因为它的决策边界是线性的。
- 高度依赖正确的数据表示。
什么时候用
当 Y 变量只有两个值时,当你面临分类问题时,可以考虑使用逻辑回归。逻辑回归也用于多分类别分类。
多分类
有很多种多分类算法,如随机森林分类器或者朴素贝叶斯分类器等等。逻辑回归也可以用于多分类任务。可以通过一些技巧,分两种策略。
一对多策略
基本思想是将第 i 种类型的所有样本作为正例,将剩下的所有样本作为负例。进行训练得出一个分类器。这样,我们就得到 N 个分类器。预测的时候,将样本给 N个分类器,获得 N 个结果,选择其中概率值最大的那个作为结果。
一对一策略
这种策略,假设有 N 个类别,不同的类别之间,训练一个分类器,训练得到的结果有 CN2C_{N}^{2}CN2 种不同的分类器。
预测的时候,将样本给所有的分类器,会有 N(N−1)个结果N(N-1) 个结果N(N−1)个结果, 最终结果通过**“投票”**产生。
应用场景
- 垃圾邮件分类,垃圾(1), 正常邮件(0)
- 广告点击预测,点击(1), 不点击(0)
- 医疗效果预测,比如是否患癌症(1),或没有患癌症(0)
总结
在这里可以了解常数 e 的基本含义,可视化逻辑回归曲线图实现,逻辑回归推导实现。了解了似然函数,梯度下降法推理参数过程。
参考资料
https://github.com/GreedyAIAcademy/Machine-Learning/tree/master/3.LinearRegression.LogisticRegression
https://juejin.im/post/5a9507196fb9a06351729cd5
https://www.cnblogs.com/ModifyRong/p/7739955.html
https://blog.csdn.net/zengxiantao1994/article/details/72787849
逻辑回归解释 (Logistic Regression)相关推荐
- [机器学习] Coursera ML笔记 - 逻辑回归(Logistic Regression)
引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等.主要学习资料来自Standford Andrew N ...
- logisticregression参数_通俗地说逻辑回归【Logistic regression】算法(二)sklearn逻辑回归实战...
前情提要: 通俗地说逻辑回归[Logistic regression]算法(一) 逻辑回归模型原理介绍 上一篇主要介绍了逻辑回归中,相对理论化的知识,这次主要是对上篇做一点点补充,以及介绍sklear ...
- 机器学习算法与Python实践之逻辑回归(Logistic Regression)
转载自:http://blog.csdn.net/zouxy09/article/details/20319673 机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书. ...
- 线性回归(Linear Regression)和逻辑回归(Logistic Regression)
先举两个简单的例子,看上面的图片. 线性回归主要功能是拟合数据. 逻辑回归主要功能是区分数据,找到决策边界. 线性回归的代价函数常用平方误差函数. 逻辑回归的代价函数常用交叉熵. 参数优化的方法都是常 ...
- 逻辑回归(Logistic Regression, LR)简介
逻辑回归(Logistic Regression, LR)简介 标签(空格分隔): 机器学习 **机器学习最通俗的解释就是让机器学会决策.**对于我们人来说,比如去菜市场里挑选芒果,从一堆芒果中拿出一 ...
- 使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logistic Regression)的数据预处理步骤实战
使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logistic Regression)的数据预处理步骤实战 目录
- 逻辑回归模型(Logistic Regression, LR)基础
逻辑回归模型(Logistic Regression, LR)基础 逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函数, ...
- 逻辑回归模型(Logistic Regression, LR)基础 - 文赛平
逻辑回归模型(Logistic Regression, LR)基础 - 文赛平 时间 2013-11-25 11:56:00 博客园精华区 原文 http://www.cnblogs.com/ ...
- Python机器学习算法 — 逻辑回归(Logistic Regression)
逻辑回归--简介 逻辑回归(Logistic Regression)就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型 ...
- 牛顿法python代码_python 牛顿法实现逻辑回归(Logistic Regression)
本文采用的训练方法是牛顿法(Newton Method). 代码 import numpy as np class LogisticRegression(object): ""&q ...
最新文章
- shell 统计一个词出现的概率_如何在Mac上设置系统范围的字数统计服务
- 36. Valid Sudoku数独判断
- mysql cte 表不存在_使用CTE解决复杂查询的问题_MySQL
- RabbitMQ管理(1)——多租户与权限
- mysql数据库导入导出_MySQL数据库导入导出详解
- centOS 及 ubuntu 下载地址记录
- PTA-7-8 删除重复字符 (20分)(C语言)
- java回忆录—输入输出流详细讲解(入门经典)
- Android开发学习之路-机器学习库(图像识别)、百度翻译
- 饿了么监控系统 EMonitor 与美团点评 CAT 的对比
- 自然语言处理——TF-IDF文本表示
- 如何优雅的调用第三方接口
- 【Hoxton.SR1版本】Spring Cloud Stream消息驱动
- 微服务架构【技术点3】--- [初级] windows下zookeeper的配置+dubbo服务提供者端+dubbo消费者端配置
- 【微信小程序】flex布局
- MYSQL选修课的心得体会_选修课心得体会
- Scrapped or attached views may not be recycled. isScrap:false isAttached:true android.support.v7.wid
- ESXi虚拟机磁盘格式转换与减小硬盘容量的方法
- 终于可以舒服的看电子书了
- 使用Excel打造一款个人日志系统
热门文章
- delphi xe mysql_Delphi XE中使用dbExpress连接MySQL数据库疑难问题解决(对三层的例子配置有帮助)...
- 实现权限控制_SpringCloud 微服务实现数据权限控制
- 微信获取用户列表的json字符串解析
- 基于springboot的微信公众号管理系统(支持多公众号接入)
- 宇宙是设计好的,结构像齿轮一样精准
- 定了,我决定用十年的时间来陪跑
- SQL Server 2019的安装与使用
- 毕业论文参考文献格式CSL的生成(有鱼也有渔)
- 安卓12鸿蒙,安卓12,鸿蒙OS2相继发布,微软Windows也坐不住了!
- 【实训】第二期实训结课项目——外卖小程序