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

    文章

    2484

    浏览量

    46530
  • 数据库
    +关注

    关注

    7

    文章

    3591

    浏览量

    63371
  • 函数
    +关注

    关注

    3

    文章

    3880

    浏览量

    61310
  • 模型
    +关注

    关注

    1

    文章

    2704

    浏览量

    47689
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83467
收藏 人收藏

    评论

    相关推荐

    梯度磁场中磁性微粒的动力学模型研究

    ,得到颗粒在不同初始位置的运动轨迹。将计算结果和现有的解析解对比分析,初步验证了所建数学模型的正确性,为进步的数值计算和试验研究提供理论基础。【关键词】:高
    发表于 05-13 09:11

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

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

    回归预测之入门

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

    浅析逻辑回归

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

    干货 | 这些机器学习算法,你了解几个?

    解释为类概率。 模型本身仍然是“线性的”,所以当你的类是线性可分的(即它们可以被的决策表面分开)时候,逻辑
    发表于 09-22 08:30

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

    回归算法之逻辑回归
    发表于 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

    python建模的脚本-微带天线的模型建立与仿真的过程搞定了

    大多数联合仿真的脚本都是使用的Matlab进行编程,网上也有不少现成的api,因为对python比较熟悉,且python除了数值计算其他的功能也相当强大,并且免费开源,于是决定用python
    发表于 02-19 16:51

    使用KNN进行分类和回归

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

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

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

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

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