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 graddef oneline(x):y = x/2return ygrad_oneline = grad(oneline)
print(grad_oneline(3.0))

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

(base) G:\push\20220724>python 1.py
0.5

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

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

# 公众号 Python实用宝典
import autograd.numpy as np
from autograd import graddef 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:\push\20220724>python 1.py
0.419974341614026

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

# 公众号 Python实用宝典
import autograd.numpy as np
from autograd import graddef 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.01print("Trained loss:", training_loss(weights))

运行结果如下:

(base) G:\push\20220724>python regress.py
Initial loss: 2.772588722239781
Trained loss: 1.067270675787016

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

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

有兴趣的朋友还可以看官方的更多示例代码:
https://github.com/HIPS/autograd/blob/master/examples/

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应红字验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

点击下方阅读原文可获得更好的阅读体验

Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python 这个神器能自动计算函数斜率和梯度, 还能实现逻辑回归模型!相关推荐

  1. python交叉验证函数_python – 在sklearn中使用交叉验证和AUC-ROC作为逻辑回归模型...

    我正在使用sklearn包来构建逻辑回归模型,然后对其进行评估.具体来说,我想使用交叉验证,但无法通过cross_val_score函数找出正确的方法. 根据我看到的documentation和exa ...

  2. 逻辑回归python sigmoid(z)_python实现吴恩达机器学习练习2(逻辑回归)-data1

    python实现吴恩达机器学习练习2(逻辑回归)-data1 这篇是第一个数据集:这部分练习中,你将建立一个预测学生是否被大学录取的逻辑回归模型. 假如一所大学会每个报名学生进行两项入学考试,根据两项 ...

  3. 数学建模——逻辑回归模型Python代码

    数学建模--逻辑回归模型详解Python代码 程序用到的测试数据: 链接:https://pan.baidu.com/s/1LGD1MAxk2lxO93smSPNyZg 提取码:uukr 代码正文 i ...

  4. python归一化 增大差异_Python逻辑回归模型原理及实际案例应用

    前言 上面我们介绍了线性回归, 岭回归, Lasso回归, 今天我们来看看另外一种模型-"逻辑回归". 虽然它有"回归"一词, 但解决的却是分类问题 目录 1. ...

  5. 逻辑回归模型(Logistic Regression)及Python实现

    逻辑回归模型(Logistic Regression)及Python实现 http://www.cnblogs.com/sumai 1.模型 在分类问题中,比如判断邮件是否为垃圾邮件,判断肿瘤是否为阳 ...

  6. Python梯度下降法实现二元逻辑回归

    Python梯度下降法实现二元逻辑回归 二元逻辑回归假设函数 定义当函数值大于等于0.5时,结果为1,当函数值小于0.5时,结果为0.函数的值域是(0, 1). 二元逻辑回归的损失函数 上图为二元逻辑 ...

  7. 【ML/DL】逻辑回归模型Python实现

    逻辑回归模型python实现 文章目录 逻辑回归模型python实现 注: 0.理论知识 逻辑回归模型 计算公式 1.导入需要的包 lr_utils.py 2. 导入数据集 查看数据集shape 查看 ...

  8. 逻辑回归模型及案例(Python)

    1 简介 逻辑回归也被称为广义线性回归模型,它与线性回归模型的形式基本上相同,最大的区别就在于它们的因变量不同,如果是连续的,就是多重线性回归:如果是二项分布,就是Logistic回归. Logist ...

  9. 用通俗易懂的方式讲解:逻辑回归模型及案例(Python 代码)

    目录 1 简介 2 优缺点 3 适用场景 加入方式 4 案例:客户流失预警模型 4.1 读取数据 4.2 划分特征变量和目标变量 4.3 模型搭建与使用 4.3.1 划分训练集与测试集 4.3.2 模 ...

  10. R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型、分类预测器(分类变量)被自动替换为一组虚拟编码变量、summary函数查看检查模型、使用table函数计算混淆矩阵评估分类模型性能

    R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型(Logistic regression).分类预测器(分类变量)被自动替换为一组虚拟编码变量.summary函数查看检查模型.使用t ...

最新文章

  1. 从0到1,苏宁API网关的演进之路
  2. 股市币市:数据分析与交易所最新公告(20190302)
  3. 096_JavaScript事件
  4. cookie的expires属性和max-age属性
  5. SonarQube6.2源码解析(二)
  6. SAP Cloud Platform integration上创建一个最简单的iFlow
  7. 用Sass创建MetaFizzy效果
  8. 项目疑难杂症记录(五):fragment生命周期都回调了,却不见其页面展示
  9. 嵌入式软件设计第九次实验报告-140201235-陈宇
  10. like 正则 mysql_mysql中使用LIKE,正则_MySQL
  11. MySQL不同数据类型如何表示_MySQL系列(二)--数据类型
  12. java 项目开发日报_CSDN日报191114:Java开发干货分享
  13. android 微信支付:统一下单接口获取
  14. 计算机职业素养论文1500字,【如何提高职业素养1500字】_个人职业素养提升计划1500字范文...
  15. 国考省考行测:言语理解与表达,主旨理解,结构分析法,总分结构
  16. shell 数组及 十六进制转换报错
  17. 载波聚合或双连接的方式进行_一文读懂5G基站和4G基站如何协同工作
  18. yarn下载报错There appears to be trouble with your network connection. Retrying.
  19. FFmpeg 音视频截取
  20. 厦门大学854结构力学(含结构动力学)考研参考书目

热门文章

  1. widows快捷键大全
  2. 【已解决】微信内置浏览器清缓存
  3. Android锁屏的实现与难点总结
  4. 今天公司HR推荐了一个人来应聘财务经理
  5. Rust use of undeclared crate or module和maybe a missing crate?
  6. HTML 表单发送邮件
  7. An exception was thrown while activating xxxxController
  8. 通过periodic_task.periodic_task 实现周期性任务的原理
  9. TYUT太原理工大学2022数据库考试题型大纲
  10. 星际争霸II sc2 台湾版试玩