当前位置: 首页 > news >正文

飞桨机器学习最小实现,出租车计费规则预测

现在面临这样一个任务:

乘坐出租车的时候,会有一个10元的起步价,只要上车就需要收取。出租车每行驶1公里,需要再支付每公里2元的行驶费用。
当一个乘客坐完出租车之后,车上的计价器需要算出来该乘客需要支付的乘车费用。正常的计算方法: total_fee = w * distance_travelled + b

接下来,把问题稍微变换一下,现在知道乘客每次乘坐出租车的公里数,也知道乘客每次下车的时候支付给出租车司机的总费用。
但是并不知道乘车的起步价,以及每公里行驶费用是多少。希望让机器从这些数据当中学习出来计算总费用的规则。
想要让机器学习程序通过数据学习出来下面的公式当中的参数 w 和参数 b(这是一个非常简单的示例,所以w和b都是浮点数,随着对深度学习了解的深入,
你将会知道w和b通常情况下会是矩阵和向量)。这样,当下次乘车的时候,知道了行驶里程distance_travelled的时候,
就可以估算出来用户的总费用total_fee了。

import paddle
print("paddle " + paddle.__version__)

# prepare data
x_data = paddle.to_tensor([[1.], [3.0], [5.0], [9.0], [10.0], [20.0]])
y_data = paddle.to_tensor([[12.], [16.0], [20.0], [28.0], [30.0], [50.0]])

# define calculate model
linear = paddle.nn.Linear(in_features=1, out_features=1)

# prepare run paddle
w_before_opt = linear.weight.numpy().item()
b_before_opt = linear.bias.numpy().item()

print("w before optimize: {}".format(w_before_opt))
print("b before optimize: {}".format(b_before_opt))

"""
how to learn 
衡量差距的函数(一个公式)就是损失函数,用来调整参数的方法就是优化算法。
用最简单的均方误差(mean square error)作为损失函数(paddle.nn.MSELoss);
和最常见的优化算法SGD(stocastic gradient descent)作为优化算法(传给paddle.optimizer.SGD的参数learning_rate,你可以理解为控制每次调整的步子大小的参数)。
"""

mse_loss = paddle.nn.MSELoss()
sgd_optimizer = paddle.optimizer.SGD(learning_rate=0.001, parameters = linear.parameters())

# run optimizer (learning)
total_epoch = 5000
for i in range(total_epoch):
    y_predict = linear(x_data)
    loss = mse_loss(y_predict, y_data)
    loss.backward()
    sgd_optimizer.step()
    sgd_optimizer.clear_grad()

    if i % 1000 == 0:
        print("epoch {} loss {}".format(i, loss.numpy()))

print("finished training, loss {}".format(loss.numpy()))

# result
w_after_opt = linear.weight.numpy().item()
b_after_opt = linear.bias.numpy().item()

print("w after optimize: {}".format(w_after_opt))
print("b after optimize: {}".format(b_after_opt))

运行结果输出:
import imp
paddle 2.3.2
w before optimize: 1.2779237031936646
b before optimize: 0.0
epoch 0 loss [269.062]
epoch 1000 loss [8.225423]
epoch 2000 loss [1.8391448]
epoch 3000 loss [0.4112188]
epoch 4000 loss [0.09194404]
finished training, loss [0.02058855]
w after optimize: 2.0182714462280273
b after optimize: 9.76637077331543

经过机器学习,已经算出了这两个参数值是2.0182714462280273,9.76637077331543
如果样本越多,学习时间越长,就会越接近2和10
这就是最简单的机器学习 Helloword

相关文章:

  • 【andriod】设备APP开发之各种细节部署和操作
  • 矩阵论习题1.1
  • OAuth2-单点-多点-三方登录
  • SSO 基于token vue + element ui spring boot前端分离
  • pandas:jupyter notebook笔记(更新中)
  • 牛客网刷题——JAVA
  • Tpflow V6.0.8 正式版发布
  • 中缀转后缀表达式(思路分析) [数据结构][Java]
  • WhatsApp Business 与 Google My Business:它们的运作方式和不同之处
  • 【网络】网络基础知识点(MAC、IP、通讯模式、通信方式、集线器、交换机、路由器、冲突域/广播域、ARP、VLAN等)
  • Windows 应用商店无法打开解决办法
  • Jupyter Notebook与Pycharm代码在Docker容器中运行
  • 【组成原理-IO系统】IO控制方式
  • JAVA毕业设计的工资管理系统计算机源码+lw文档+系统+调试部署+数据库
  • OBS 安装与考试参数设置及屏幕无法完全捕获、录屏不完整的解决方法
  • Angular 响应式表单 基础例子
  • AWS实战 - 利用IAM对S3做访问控制
  • CEF与代理
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaScript学习总结——原型
  • Java基本数据类型之Number
  • Java应用性能调优
  • js对象的深浅拷贝
  • uni-app项目数字滚动
  • vue.js框架原理浅析
  • 服务器之间,相同帐号,实现免密钥登录
  • 回顾 Swift 多平台移植进度 #2
  • 解析带emoji和链接的聊天系统消息
  • 聊聊flink的TableFactory
  • 前端知识点整理(待续)
  • 如何优雅地使用 Sublime Text
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 阿里云API、SDK和CLI应用实践方案
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 如何在招聘中考核.NET架构师
  • ​linux启动进程的方式
  • "无招胜有招"nbsp;史上最全的互…
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • ${factoryList }后面有空格不影响
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (安卓)跳转应用市场APP详情页的方式
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (利用IDEA+Maven)定制属于自己的jar包
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (转)winform之ListView
  • (转载)从 Java 代码到 Java 堆
  • .net 4.0发布后不能正常显示图片问题
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET 依赖注入和配置系统