Python 这个神器能自动计算函数斜率和梯度, 还能实现逻辑回归模型!
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 这个神器能自动计算函数斜率和梯度, 还能实现逻辑回归模型!相关推荐
- python交叉验证函数_python – 在sklearn中使用交叉验证和AUC-ROC作为逻辑回归模型...
我正在使用sklearn包来构建逻辑回归模型,然后对其进行评估.具体来说,我想使用交叉验证,但无法通过cross_val_score函数找出正确的方法. 根据我看到的documentation和exa ...
- 逻辑回归python sigmoid(z)_python实现吴恩达机器学习练习2(逻辑回归)-data1
python实现吴恩达机器学习练习2(逻辑回归)-data1 这篇是第一个数据集:这部分练习中,你将建立一个预测学生是否被大学录取的逻辑回归模型. 假如一所大学会每个报名学生进行两项入学考试,根据两项 ...
- 数学建模——逻辑回归模型Python代码
数学建模--逻辑回归模型详解Python代码 程序用到的测试数据: 链接:https://pan.baidu.com/s/1LGD1MAxk2lxO93smSPNyZg 提取码:uukr 代码正文 i ...
- python归一化 增大差异_Python逻辑回归模型原理及实际案例应用
前言 上面我们介绍了线性回归, 岭回归, Lasso回归, 今天我们来看看另外一种模型-"逻辑回归". 虽然它有"回归"一词, 但解决的却是分类问题 目录 1. ...
- 逻辑回归模型(Logistic Regression)及Python实现
逻辑回归模型(Logistic Regression)及Python实现 http://www.cnblogs.com/sumai 1.模型 在分类问题中,比如判断邮件是否为垃圾邮件,判断肿瘤是否为阳 ...
- Python梯度下降法实现二元逻辑回归
Python梯度下降法实现二元逻辑回归 二元逻辑回归假设函数 定义当函数值大于等于0.5时,结果为1,当函数值小于0.5时,结果为0.函数的值域是(0, 1). 二元逻辑回归的损失函数 上图为二元逻辑 ...
- 【ML/DL】逻辑回归模型Python实现
逻辑回归模型python实现 文章目录 逻辑回归模型python实现 注: 0.理论知识 逻辑回归模型 计算公式 1.导入需要的包 lr_utils.py 2. 导入数据集 查看数据集shape 查看 ...
- 逻辑回归模型及案例(Python)
1 简介 逻辑回归也被称为广义线性回归模型,它与线性回归模型的形式基本上相同,最大的区别就在于它们的因变量不同,如果是连续的,就是多重线性回归:如果是二项分布,就是Logistic回归. Logist ...
- 用通俗易懂的方式讲解:逻辑回归模型及案例(Python 代码)
目录 1 简介 2 优缺点 3 适用场景 加入方式 4 案例:客户流失预警模型 4.1 读取数据 4.2 划分特征变量和目标变量 4.3 模型搭建与使用 4.3.1 划分训练集与测试集 4.3.2 模 ...
- R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型、分类预测器(分类变量)被自动替换为一组虚拟编码变量、summary函数查看检查模型、使用table函数计算混淆矩阵评估分类模型性能
R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型(Logistic regression).分类预测器(分类变量)被自动替换为一组虚拟编码变量.summary函数查看检查模型.使用t ...
最新文章
- 从0到1,苏宁API网关的演进之路
- 股市币市:数据分析与交易所最新公告(20190302)
- 096_JavaScript事件
- cookie的expires属性和max-age属性
- SonarQube6.2源码解析(二)
- SAP Cloud Platform integration上创建一个最简单的iFlow
- 用Sass创建MetaFizzy效果
- 项目疑难杂症记录(五):fragment生命周期都回调了,却不见其页面展示
- 嵌入式软件设计第九次实验报告-140201235-陈宇
- like 正则 mysql_mysql中使用LIKE,正则_MySQL
- MySQL不同数据类型如何表示_MySQL系列(二)--数据类型
- java 项目开发日报_CSDN日报191114:Java开发干货分享
- android 微信支付:统一下单接口获取
- 计算机职业素养论文1500字,【如何提高职业素养1500字】_个人职业素养提升计划1500字范文...
- 国考省考行测:言语理解与表达,主旨理解,结构分析法,总分结构
- shell 数组及 十六进制转换报错
- 载波聚合或双连接的方式进行_一文读懂5G基站和4G基站如何协同工作
- yarn下载报错There appears to be trouble with your network connection. Retrying.
- FFmpeg 音视频截取
- 厦门大学854结构力学(含结构动力学)考研参考书目
热门文章
- widows快捷键大全
- 【已解决】微信内置浏览器清缓存
- Android锁屏的实现与难点总结
- 今天公司HR推荐了一个人来应聘财务经理
- Rust use of undeclared crate or module和maybe a missing crate?
- HTML 表单发送邮件
- An exception was thrown while activating xxxxController
- 通过periodic_task.periodic_task 实现周期性任务的原理
- TYUT太原理工大学2022数据库考试题型大纲
- 星际争霸II sc2 台湾版试玩