文章目录

  • 什么是逻辑回归算法?
  • 可视化曲线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=lim⁡n→∞(1+1n)ne = \lim _{n \rightarrow \infty}(1+\frac{1}{n})^{n} e=n→∞lim​(1+n1​)n
摘自维基百科二项式定理证明

视 n 为存在的数值,所以用二项式定理可证明 e 为 2.71828…

e=lim⁡n→∞(1+1n)n=lim⁡n→∞∑i=0nCin1n−i(1n)i=lim⁡n→∞[C0n1n(1n)0+C1n1n−1(1n)1+C2n1n−2(1n)2+C3n1n−3(1n)3+...+Cnn10(1n)n]=lim⁡n→∞[1×1+n×1n+n!(n−2)!2!×1n2+n!(n−3)!3!×1n3+...+1×1nn]=lim⁡n→∞[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→∞lim​i=0∑n​Cin​1n−i(n1​)i=n→∞lim​[C0n​1n(n1​)0+C1n​1n−1(n1​)1+C2n​1n−2(n1​)2+C3n​1n−3(n1​)3+...+Cnn​10(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​+θ1​x1​+θ2​x2​+θ3​x3​+…
  • θ=[θ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 概率比值的自然对数
    ln⁡P1−P=θTx\ln \frac{P}{1-P}=\theta^{T} x ln1−PP​=θTx

可以看到等式右边是线性回归模型的函数y=wTx+by = w^Tx + by=wTx+b , (求导过程不会保留常数b), logistic regresssion 就是用线性预测结果去逼近真实标记的对数几率。

  • 等式转换
    ln⁡p(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))
由上面类别的概率
ln⁡P1−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∑N​x(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()

优缺点

优点:

  1. 简单实现,模型的可解释性很好。
  2. 训练速度快。计算的量只和特征的数目有关,不需要缩放输入特征等等。
  3. 资源占用小。因为只需要存储各个维度的特征值。

缺点:

  1. 准确率不是很高,就是因为模型(非常类似线性模型),很难拟合数据的真实分布,容易导致过拟合。
  2. 难处理数据不平衡的问题。
  3. 逻辑回归本身无法解决非线性问题,因为它的决策边界是线性的。
  4. 高度依赖正确的数据表示。

什么时候用

当 Y 变量只有两个值时,当你面临分类问题时,可以考虑使用逻辑回归。逻辑回归也用于多分类别分类。

多分类

有很多种多分类算法,如随机森林分类器或者朴素贝叶斯分类器等等。逻辑回归也可以用于多分类任务。可以通过一些技巧,分两种策略。

  1. 一对多策略

    基本思想是将第 i 种类型的所有样本作为正例,将剩下的所有样本作为负例。进行训练得出一个分类器。这样,我们就得到 N 个分类器。预测的时候,将样本给 N个分类器,获得 N 个结果,选择其中概率值最大的那个作为结果。

  2. 一对一策略

    这种策略,假设有 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)相关推荐

  1. [机器学习] Coursera ML笔记 - 逻辑回归(Logistic Regression)

    引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等.主要学习资料来自Standford Andrew N ...

  2. logisticregression参数_通俗地说逻辑回归【Logistic regression】算法(二)sklearn逻辑回归实战...

    前情提要: 通俗地说逻辑回归[Logistic regression]算法(一) 逻辑回归模型原理介绍 上一篇主要介绍了逻辑回归中,相对理论化的知识,这次主要是对上篇做一点点补充,以及介绍sklear ...

  3. 机器学习算法与Python实践之逻辑回归(Logistic Regression)

    转载自:http://blog.csdn.net/zouxy09/article/details/20319673 机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书. ...

  4. 线性回归(Linear Regression)和逻辑回归(Logistic Regression)

    先举两个简单的例子,看上面的图片. 线性回归主要功能是拟合数据. 逻辑回归主要功能是区分数据,找到决策边界. 线性回归的代价函数常用平方误差函数. 逻辑回归的代价函数常用交叉熵. 参数优化的方法都是常 ...

  5. 逻辑回归(Logistic Regression, LR)简介

    逻辑回归(Logistic Regression, LR)简介 标签(空格分隔): 机器学习 **机器学习最通俗的解释就是让机器学会决策.**对于我们人来说,比如去菜市场里挑选芒果,从一堆芒果中拿出一 ...

  6. 使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logistic Regression)的数据预处理步骤实战

    使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logistic Regression)的数据预处理步骤实战 目录

  7. 逻辑回归模型(Logistic Regression, LR)基础

    逻辑回归模型(Logistic Regression, LR)基础 逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函数, ...

  8. 逻辑回归模型(Logistic Regression, LR)基础 - 文赛平

     逻辑回归模型(Logistic Regression, LR)基础 - 文赛平 时间 2013-11-25 11:56:00 博客园精华区 原文  http://www.cnblogs.com/ ...

  9. Python机器学习算法 — 逻辑回归(Logistic Regression)

    逻辑回归--简介 逻辑回归(Logistic Regression)就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型 ...

  10. 牛顿法python代码_python 牛顿法实现逻辑回归(Logistic Regression)

    本文采用的训练方法是牛顿法(Newton Method). 代码 import numpy as np class LogisticRegression(object): ""&q ...

最新文章

  1. shell 统计一个词出现的概率_如何在Mac上设置系统范围的字数统计服务
  2. 36. Valid Sudoku数独判断
  3. mysql cte 表不存在_使用CTE解决复杂查询的问题_MySQL
  4. RabbitMQ管理(1)——多租户与权限
  5. mysql数据库导入导出_MySQL数据库导入导出详解
  6. centOS 及 ubuntu 下载地址记录
  7. PTA-7-8 删除重复字符 (20分)(C语言)
  8. java回忆录—输入输出流详细讲解(入门经典)
  9. Android开发学习之路-机器学习库(图像识别)、百度翻译
  10. 饿了么监控系统 EMonitor 与美团点评 CAT 的对比
  11. 自然语言处理——TF-IDF文本表示
  12. 如何优雅的调用第三方接口
  13. 【Hoxton.SR1版本】Spring Cloud Stream消息驱动
  14. 微服务架构【技术点3】--- [初级] windows下zookeeper的配置+dubbo服务提供者端+dubbo消费者端配置
  15. 【微信小程序】flex布局
  16. MYSQL选修课的心得体会_选修课心得体会
  17. Scrapped or attached views may not be recycled. isScrap:false isAttached:true android.support.v7.wid
  18. ESXi虚拟机磁盘格式转换与减小硬盘容量的方法
  19. 终于可以舒服的看电子书了
  20. 使用Excel打造一款个人日志系统

热门文章

  1. delphi xe mysql_Delphi XE中使用dbExpress连接MySQL数据库疑难问题解决(对三层的例子配置有帮助)...
  2. 实现权限控制_SpringCloud 微服务实现数据权限控制
  3. 微信获取用户列表的json字符串解析
  4. 基于springboot的微信公众号管理系统(支持多公众号接入)
  5. 宇宙是设计好的,结构像齿轮一样精准
  6. 定了,我决定用十年的时间来陪跑
  7. SQL Server 2019的安装与使用
  8. 毕业论文参考文献格式CSL的生成(有鱼也有渔)
  9. 安卓12鸿蒙,安卓12,鸿蒙OS2相继发布,微软Windows也坐不住了!
  10. 【实训】第二期实训结课项目——外卖小程序