0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python 梯度计算模块如何实现一个逻辑回归模型

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-21 11:01 次阅读

AutoGrad 是一个老少皆宜的 Python 梯度计算模块。

对于初高中生而言,它可以用来轻易计算一条曲线在任意一个点上的斜率。

对于大学生、机器学习爱好者而言,你只需要传递给它Numpy这样的标准数据库下编写的损失函数,它就可以自动计算损失函数的导数(梯度)。

我们将从普通斜率计算开始,介绍到如何只使用它来实现一个逻辑回归模型。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。

**(可选1) **如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

**(可选2) **此外,推荐大家用VSCode编辑器,它有许多的优点:Python 编程的最好搭档—VSCode 详细指南

请选择以下任一种方式输入命令安装依赖

  1. Windows 环境 打开 Cmd (开始-运行-CMD)。
  2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
  3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install autograd

2.计算斜率

对于初高中生同学而言,它可以用来轻松计算斜率,比如我编写一个斜率为0.5的直线函数:

# 公众号 Python实用宝典
import autograd.numpy as np
from autograd import grad


def oneline(x):
    y = x/2
    return y

grad_oneline = grad(oneline)
print(grad_oneline(3.0))

运行代码,传入任意X值,你就能得到在该X值下的斜率:

(base) G:push20220724 >python 1.py
0.5

由于这是一条直线,因此无论你传什么值,都只会得到0.5的结果。

那么让我们再试试一个tanh函数:

# 公众号 Python实用宝典
import autograd.numpy as np
from autograd import grad

def tanh(x):
    y = np.exp(-2.0 * x)
    return (1.0 - y) / (1.0 + y)
grad_tanh = grad(tanh)
print(grad_tanh(1.0))

此时你会获得 1.0 这个 x 在tanh上的曲线的斜率:

(base) G:push20220724 >python 1.py
0.419974341614026

我们还可以绘制出tanh的斜率的变化的曲线:

# 公众号 Python实用宝典
import autograd.numpy as np
from autograd import grad


def tanh(x):
    y = np.exp(-2.0 * x)
    return (1.0 - y) / (1.0 + y)
grad_tanh = grad(tanh)
print(grad_tanh(1.0))

import matplotlib.pyplot as plt
from autograd import elementwise_grad as egrad
x = np.linspace(-7, 7, 200)
plt.plot(x, tanh(x), x, egrad(tanh)(x))
plt.show()

图片

图中蓝色的线是tanh,橙色的线是tanh的斜率,你可以非常清晰明了地看到tanh的斜率的变化。非常便于学习和理解斜率概念。

3.实现一个逻辑回归模型

有了Autograd,我们甚至不需要借用scikit-learn就能实现一个回归模型:

逻辑回归的底层分类就是基于一个sigmoid函数:

import autograd.numpy as np
from autograd import grad

# Build a toy dataset.
inputs = np.array([[0.52, 1.12, 0.77],
                   [0.88, -1.08, 0.15],
                   [0.52, 0.06, -1.30],
                   [0.74, -2.49, 1.39]])
targets = np.array([True, True, False, True])

def sigmoid(x):
    return 0.5 * (np.tanh(x / 2.) + 1)

def logistic_predictions(weights, inputs):
    # Outputs probability of a label being true according to logistic model.
    return sigmoid(np.dot(inputs, weights))

从下面的损失函数可以看到,预测结果的好坏取决于weights的好坏,因此我们的问题转化为怎么优化这个 weights 变量:

def training_loss(weights):
    # Training loss is the negative log-likelihood of the training labels.
    preds = logistic_predictions(weights, inputs)
    label_probabilities = preds * targets + (1 - preds) * (1 - targets)
    return -np.sum(np.log(label_probabilities))

知道了优化目标后,又有Autograd这个工具,我们的问题便迎刃而解了,我们只需要让weights往损失函数不断下降的方向移动即可:

# Define a function that returns gradients of training loss using Autograd.
training_gradient_fun = grad(training_loss)

# Optimize weights using gradient descent.
weights = np.array([0.0, 0.0, 0.0])
print("Initial loss:", training_loss(weights))
for i in range(100):
    weights -= training_gradient_fun(weights) * 0.01

print("Trained loss:", training_loss(weights))

运行结果如下:

(base) G:push20220724 >python regress.py
Initial loss: 2.772588722239781
Trained loss: 1.067270675787016

由此可见损失函数以及下降方式的重要性,损失函数不正确,你可能无法优化模型。损失下降幅度太单一或者太快,你可能会错过损失的最低点。

总而言之,AutoGrad是一个你用来优化模型的一个好工具,它可以给你提供更加直观的损失走势,进而让你有更多优化想象力。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块
    +关注

    关注

    7

    文章

    2695

    浏览量

    47431
  • 数据库
    +关注

    关注

    7

    文章

    3794

    浏览量

    64362
  • 函数
    +关注

    关注

    3

    文章

    4327

    浏览量

    62571
  • 模型
    +关注

    关注

    1

    文章

    3226

    浏览量

    48807
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84627
收藏 人收藏

    评论

    相关推荐

    分享自己写的机器学习线性回归梯度下降算法

    单变量线性回归算法,利用Batch梯度梯度下降算法迭代计算得到误差最小的代价函数theta0,theta1。调节学习率a可以观察拟合得到的函数和代价函数误差收敛情况。
    发表于 10-02 21:48

    回归预测之入门

    式子吧,不然看些相关的论文可就看不懂了,这个系列主要将会着重于去机器学习的数学描述这个部分,将会覆盖但不定局限于回归、聚类、分类等算法。回归
    发表于 10-15 10:19

    浅析逻辑回归

    ML-逻辑回归-公式推导- 多种实现
    发表于 04-25 15:35

    回归算法之逻辑回归的介绍

    回归算法之逻辑回归
    发表于 05-21 16:25

    回归算法有哪些,常用回归算法(3种)详解

    随机梯度下降来估计系数。损失函数通常被定义为交叉熵项: 逻辑回归用于分类问题,例如,对于给定的医疗数据,可以使用逻辑回归判断
    发表于 07-28 14:36

    TensorFlow实现简单线性回归

    节点,可以看到它需要 7 输入并使用 GradientDescentOptimizer 计算梯度,对权重和偏置进行更新:(点此查看高清大图)总结本节进行了简单的线性回归,但是如何定义
    发表于 08-11 19:34

    TensorFlow实现多元线性回归(超详细)

    在 TensorFlow 实现简单线性回归的基础上,可通过在权重和占位符的声明中稍作修改来对相同的数据进行多元线性回归。在多元线性回归的情况下,由于每个特征具有不同的值范围,归
    发表于 08-11 19:35

    TensorFlow逻辑回归处理MNIST数据集

    。mnist.train.images 的每项都是范围介于 0 到 1 的像素强度: 在 TensorFlow 图中为训练数据集的输入 x 和标签 y 创建占位符: 创建学习变量、权重和偏置: 创建逻辑
    发表于 08-11 19:36

    TensorFlow逻辑回归处理MNIST数据集

    。mnist.train.images 的每项都是范围介于 0 到 1 的像素强度: 在 TensorFlow 图中为训练数据集的输入 x 和标签 y 创建占位符: 创建学习变量、权重和偏置: 创建逻辑
    发表于 08-11 19:36

    使用KNN进行分类和回归

    般情况下k-Nearest Neighbor (KNN)都是用来解决分类的问题,其实KNN是种可以应用于数据分类和预测的简单算法,本文中我们将它与简单的线性回归进行比较。KNN模型
    发表于 10-28 14:44

    文看懂常用的梯度下降算法

    的。梯度下降算法背后的原理:目标函数 关于参数 的梯度将是目标函数上升最快的方向。对于最小化优化问题,只需要将参数沿着梯度相反的方向前进
    发表于 12-04 18:17 1801次阅读

    掌握logistic regression模型,有必要先了解线性回归模型梯度下降法

    先回想下线性回归,线性回归模型帮助我们用最简单的线性方程实现了对数据的拟合,然而,这只能完成回归
    的头像 发表于 06-04 11:31 7592次阅读
    掌握logistic regression<b class='flag-5'>模型</b>,有必要先了解线性<b class='flag-5'>回归</b><b class='flag-5'>模型</b>和<b class='flag-5'>梯度</b>下降法

    数学推导+纯Python实现机器学习算法

    跟上讲写线性模型样,在实际动手写之前我们需要理清楚思路。要写完整的逻辑
    的头像 发表于 10-16 16:12 2744次阅读
    数学推导+纯<b class='flag-5'>Python</b><b class='flag-5'>实现</b>机器学习算法

    详谈Python的数据模型和对象模型

    Python官方文档说法是“Python数据模型”,大多数Python书籍作者说法是“Python对象
    的头像 发表于 02-10 15:59 2545次阅读
    详谈<b class='flag-5'>Python</b>的数据<b class='flag-5'>模型</b>和对象<b class='flag-5'>模型</b>

    Logistic回归数学推导以及python实现

    Logistic回归数学推导以及python实现
    发表于 02-25 14:48 7次下载