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

【大数据】机器学习----------强化学习机器学习阶段尾声

一、强化学习的基本概念

注: 圈图与折线图引用知乎博主斜杠青年

1. 任务与奖赏
  • 任务:强化学习的目标是让智能体(agent)在一个环境(environment)中采取一系列行动(actions)以完成一个或多个目标。智能体通过与环境进行交互,根据环境的状态(states)选择动作,并根据环境的反馈调整自己的行为。
  • 奖赏:环境会给智能体一个反馈信号,即奖赏(reward),奖赏是一个标量值,代表智能体采取行动后的即时奖励或惩罚。智能体的目标是最大化累积奖赏,通常使用折扣累积奖赏公式:
    在这里插入图片描述
    ,其中在这里插入图片描述
    是在时刻 在这里插入图片描述
    获得的奖赏,(\gamma\in[0,1]) 是折扣因子,用于平衡短期和长期奖赏,越接近 0 表示越关注短期奖赏,越接近 1 表示越关注长期奖赏。

二、k-摇臂赌博机

1. 基本概念
  • k-摇臂赌博机是强化学习中的一个经典问题,它有 (k) 个摇臂,每个摇臂被拉动时会给出一个随机的奖赏。智能体的任务是通过多次试验找到能带来最大累积奖赏的摇臂。
    在这里插入图片描述
2. 代码示例((\epsilon)-贪心算法)
import numpy as npdef k_arm_bandit(k, num_steps, epsilon):# 初始化每个摇臂的真实奖赏期望,这里假设服从正态分布true_rewards = np.random.normal(0, 1, k)estimated_rewards = np.zeros(k)num_pulls = np.zeros(k)rewards = []for step in range(num_steps):if np.random.rand() < epsilon:# 以 epsilon 的概率随机选择一个摇臂action = np.random.randint(k)else:# 以 1 - epsilon 的概率选择估计奖赏最大的摇臂action = np.argmax(estimated_rewards)# 从选中的摇臂获得一个随机奖赏,假设服从正态分布reward = np.random.normal(true_rewards[action], 1)rewards.append(reward)# 更新估计奖赏和拉动次数num_pulls[action] += 1estimated_rewards[action] += (reward - estimated_rewards[action]) / num_pulls[action]return rewards# 示例运行
k = 10
num_steps = 1000
epsilon = 0.1
rewards = k_arm_bandit(k, num_steps, epsilon)
print("Total rewards:", np.sum(rewards))

三、有模型学习

1. 基本概念
  • 有模型学习中,智能体尝试学习环境的模型,即状态转移概率 (P(s’|s,a))(从状态 (s) 采取动作 (a) 转移到状态 (s’) 的概率)和奖赏函数 (R(s,a))(在状态 (s) 采取动作 (a) 获得的奖赏)。然后可以使用规划算法(如动态规划)来求解最优策略。
2. 数学公式(Bellman 方程)
  • 状态值函数 (V(s)) 的 Bellman 期望方程:

  • 在这里插入图片描述

  • 动作值函数 (Q(s,a)) 的 Bellman 期望方程:在这里插入图片描述
    ,其中 (\pi(a|s)) 是策略,表示在状态 (s) 下采取动作 (a) 的概率。

3. 代码示例(价值迭代)
import numpy as npdef value_iteration(P, R, gamma, theta):num_states = P.shape[0]num_actions = P.shape[1]V = np.zeros(num_states)while True:delta = 0for s in range(num_states):v = V[s]V[s] = max([sum([P[s][a][s_prime] * (R[s][a] + gamma * V[s_prime])for s_prime in range(num_states)]) for a in range(num_actions)])delta = max(delta, abs(v - V[s]))if delta < theta:breakreturn V# 示例运行
# 假设环境的状态转移矩阵 P 和奖赏矩阵 R
P = np.random.rand(3, 2, 3)  # P[s][a][s_prime]
R = np.random.rand(3, 2)  # R[s][a]
gamma = 0.9
theta = 0.001
V = value_iteration(P, R, gamma, theta)
print("Optimal state values:", V)

四、免模型学习

1. 基本概念
  • 免模型学习不尝试学习环境的完整模型,而是直接学习价值函数或策略函数。常见的方法包括蒙特卡洛(Monte Carlo)、时序差分(Temporal Difference,TD)学习等。
2. 数学公式(TD(0) 更新)

在这里插入图片描述
,其中 (S_t) 和 (S_{t+1}) 是连续的状态,(R_{t+1}) 是从 (S_t) 到 (S_{t+1}) 获得的奖赏,(\alpha) 是学习率。

3. 代码示例(TD(0))
import numpy as npdef td_0(env, num_episodes, alpha, gamma):V = np.zeros(env.num_states)for _ in range(num_episodes):state = env.reset()done = Falsewhile not done:action = np.random.randint(env.num_actions)  # 这里使用随机策略next_state, reward, done = env.step(action)V[state] += alpha * (reward + gamma * V[next_state] - V[state])state = next_statereturn Vclass SimpleEnvironment:def __init__(self):self.num_states = 5self.num_actions = 2def reset(self):return 0def step(self, action):# 简单模拟环境的状态转移和奖赏,实际应用中需要根据具体环境定义if action == 0:next_state = np.random.choice(self.num_states)reward = np.random.normal(0, 1)else:next_state = np.random.choice(self.num_states)reward = np.random.normal(1, 1)done = False  # 假设不会结束return next_state, reward, done# 示例运行
env = SimpleEnvironment()
num_episodes = 1000
alpha = 0.1
gamma = 0.9
V = td_0(env, num_episodes, alpha, gamma)
print("Estimated state values:", V)

在这里插入图片描述

五、值函数近似

1. 基本概念
  • 当状态空间很大或连续时,使用表格存储值函数变得不可行,因此使用值函数近似。通常使用函数逼近器(如线性函数、神经网络)来表示 (V(s)) 或 (Q(s,a))。
2. 数学公式(线性值函数近似)
  • (V(s;\theta)=\theta^T\phi(s)),其中 (\theta) 是参数向量,(\phi(s)) 是状态 (s) 的特征向量。
3. 代码示例(线性函数近似)
import numpy as npdef linear_value_approximation(env, num_episodes, alpha, gamma, theta):for _ in range(num_episodes):state = env.reset()done = Falsewhile not done:action = np.random.randint(env.num_actions)  # 随机策略next_state, reward, done = env.step(action)# 特征向量表示phi_state = np.array([state, state**2])phi_next_state = np.array([next_state, next_state**2])target = reward + gamma * np.dot(theta, phi_next_state)delta = target - np.dot(theta, phi_state)theta += alpha * delta * phi_statestate = next_statereturn thetaclass SimpleEnvironment:def __init__(self):self.num_states = 5self.num_actions = 2def reset(self):return 0def step(self, action):# 简单模拟环境的状态转移和奖赏if action == 0:next_state = np.random.choice(self.num_states)reward = np.random.normal(0, 1)else:next_state = np.random.choice(self.num_states)reward = np.random.normal(1, 1)done = False  # 假设不会结束return next_state, reward, done# 示例运行
env = SimpleEnvironment()
num_episodes = 1000
alpha = 0.1
gamma = 0.9
theta = np.random.rand(2)
theta = linear_value_approximation(env, num_episodes, alpha, gamma, theta)
print("Estimated theta:", theta)

六、模仿学习

1. 基本概念
  • 模仿学习旨在让智能体通过模仿专家的行为来学习策略,通常用于解决难以通过奖赏函数定义的任务。包括行为克隆(Behavior Cloning)、逆强化学习(Inverse Reinforcement Learning)等方法。
2. 代码示例(行为克隆)
import numpy as np
from sklearn.linear_model import LogisticRegressiondef behavior_cloning(expert_states, expert_actions):# 假设专家状态和动作是已知的model = LogisticRegression()model.fit(expert_states, expert_actions)return model# 示例运行
expert_states = np.random.rand(100, 2)  # 假设专家状态是二维的
expert_actions = np.random.randint(0, 2, 100)  # 专家动作是 0 或 1
model = behavior_cloning(expert_states, expert_actions)
print("Trained model:", model)

在这里插入图片描述

代码解释

k-摇臂赌博机代码解释:
  • k_arm_bandit 函数:
    • true_rewards:每个摇臂的真实期望奖赏。
    • estimated_rewards:对每个摇臂奖赏的估计。
    • num_pulls:每个摇臂被拉动的次数。
    • 使用 (\epsilon)-贪心算法,以概率 (\epsilon) 随机选择摇臂,以概率 (1 - \epsilon) 选择估计奖赏最高的摇臂。
有模型学习代码解释:
  • value_iteration 函数:
    • P:状态转移矩阵。
    • R:奖赏矩阵。
    • 通过迭代更新状态值函数 (V(s)),直到收敛((\Delta < \theta))。
免模型学习代码解释:
  • td_0 函数:
    • V:状态值函数。
    • 通过 TD(0) 更新规则 (V(S_t)\leftarrow V(S_t)+\alpha(R_{t+1}+\gamma V(S_{t+1})-V(S_t))) 来更新值函数。
值函数近似代码解释:
  • linear_value_approximation 函数:
    • 使用线性函数 (V(s;\theta)=\theta^T\phi(s)) 来近似值函数。
    • 通过更新参数 (\theta) 来学习。
模仿学习代码解释:
  • behavior_cloning 函数:
    • 使用逻辑回归模型来学习专家的状态 - 动作映射。

算法比对

在这里插入图片描述

请注意,上述代码仅为简单示例,在实际应用中可能需要更复杂的环境和算法调整。同时,对于使用的库,如 numpysklearn,你可以使用 pip 安装:

pip install numpy sklearn

在这里插入图片描述

相关文章:

【大数据】机器学习----------强化学习机器学习阶段尾声

一、强化学习的基本概念 注&#xff1a; 圈图与折线图引用知乎博主斜杠青年 1. 任务与奖赏 任务&#xff1a;强化学习的目标是让智能体&#xff08;agent&#xff09;在一个环境&#xff08;environment&#xff09;中采取一系列行动&#xff08;actions&#xff09;以完成一个…...

flink写parquet解决timestamp时间格式字段问题

背景 Apache Parquet 是一种开源的列式数据文件格式,旨在实现高效的数据存储和检索。它提供高性能压缩和编码方案(encoding schemes)来批量处理复杂数据,并且受到许多编程语言和分析工具的支持。 在我们通过flink写入parquet文件的时候,会遇到timestamp时间格式写入的问题。…...

redis实现lamp架构缓存

redis服务器环境下mysql实现lamp架构缓存 ip角色环境192.168.242.49缓存服务器Redis2.2.7192.168.242.50mysql服务器mysql192.168.242.51web端php ***默认已安装好redis&#xff0c;mysql 三台服务器时间同步&#xff08;非常重要&#xff09; # 下载ntpdate yum -y install…...

正则表达式中常见的贪婪词

1. * 含义&#xff1a;匹配前面的元素零次或者多次。示例&#xff1a;对于正则表达式 a*&#xff0c;在字符串 "aaaa" 中&#xff0c;它会匹配整个 "aaaa"&#xff0c;因为它会尽可能多地匹配 a 字符。代码示例&#xff08;Python&#xff09;&#xff1a…...

CF 339A.Helpful Maths(Java实现)

题目分析 输入一串式子&#xff0c;输出从小到大排列的式子 思路分析 如上所说核心思路&#xff0c;但是我要使用笨方法&#xff0c;输入一串式子用split分割开&#xff0c;但是此时需要用到转义字符&#xff0c;即函数内参数不能直接使用“”&#xff0c;而是“\\”。分割开后…...

SQL 指南

SQL 指南 引言 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系数据库系统的标准计算机语言。自1970年代问世以来,SQL已经成为了数据库管理和数据操作的事实标准。本文旨在为初学者和有经验的数据库用户提供一个全面的SQL指南,涵盖SQL的基础知识、高级…...

DDD架构实战第七讲总结:分层模型和代码组织

云架构师系列课程之DDD架构实战第七讲总结:分层模型和代码组织 一、引言 在前几讲中,我们介绍了领域驱动设计(DDD)的基本构造块和生命周期模型中的聚合。本讲将重点讨论如何将这些构造块和代码组织起来,探讨分层架构和六边形模型,以及如何组织代码结构。 二、工厂和资…...

Python “字典” 实战案例:5个项目开发实例

Python “字典” 实战案例&#xff1a;5个项目开发实例 内容摘要 本文包括 5 个使用 Python 字典的综合应用实例。具体是&#xff1a; 电影推荐系统配置文件解析器选票统计与排序电话黄页管理系统缓存系统&#xff08;LRU 缓存&#xff09; 以上每一个实例均有完整的程序代…...

(一)QT的简介与环境配置WIN11

目录 一、QT的概述 二、QT的下载 三、简单编程 常用快捷键 一、QT的概述 简介 Qt&#xff08;发音&#xff1a;[kjuːt]&#xff0c;类似“cute”&#xff09;是一个跨平台的开发库&#xff0c;主要用于开发图形用户界面&#xff08;GUI&#xff09;应用程序&#xff0c;…...

在 Windows 系统上,将 Ubuntu 从 C 盘 迁移到 D 盘

在 Windows 系统上&#xff0c;如果你使用的是 WSL&#xff08;Windows Subsystem for Linux&#xff09;并安装了 Ubuntu&#xff0c;你可以将 Ubuntu 从 C 盘 迁移到 D 盘。迁移过程涉及导出当前的 Ubuntu 发行版&#xff0c;然后将其导入到 D 盘的目标目录。以下是详细的步骤…...

vue2的$el.querySelector在vue3中怎么写

这个也属于直接操作 dom 了&#xff0c;不建议在项目中这样操作&#xff0c;不过我是在vue2升级vue3的时候遇到的&#xff0c;是以前同事写的代码&#xff0c;也没办法 先来看一下对比 在vue2中获取实例是直接通过 this.$refs.xxx 获取绑定属性 refxxx 的实例&#xff0c;并且…...

GPSd定时检测保活TCP GPS源

为了在 TCP GPS 源丢失连接时自动重新连接&#xff0c;可以编写一个监控脚本&#xff0c;定期检查 gpspipe 输出中的 TCP 源数据是否存在。如果检测到丢失&#xff0c;则使用 gpsdctl 或直接命令重新添加 TCP 源。 1、工具 检查并安装必要工具&#xff0c;本例需要使用 gpspi…...

IDEA中Maven使用的踩坑与最佳实践

文章目录 IDEA中Maven使用的踩坑与最佳实践一、环境配置类问题1. Maven环境配置2. IDEA中Maven配置建议 二、常见问题与解决方案1. 依赖下载失败2. 依赖冲突解决3. 编译问题修复 三、效率提升技巧1. IDEA Maven Helper插件使用2. 常用Maven命令配置3. 多模块项目配置4. 资源文件…...

使用 Python 调用 OpenAI 的接口初识

使用 Python 调用 OpenAI 的接口非常简单&#xff0c;以下将结合实际代码示例和使用场景进行详细讲解&#xff0c;步骤如下&#xff1a; 文章目录 1. 安装 OpenAI 官方库2. 准备 API Key3. 基本使用示例&#xff1a;调用 ChatGPT**代码示例&#xff1a;****运行结果&#xff1a…...

2025 最新flutter面试总结

目录 1.Dart是值传递还是引用传递&#xff1f; 2.Flutter 是单引擎还是双引擎 3. StatelessWidget 和 StatefulWidget 在 Flutter 中有什么区别&#xff1f; 4.简述Dart语音特性 5. Navigator 是什么&#xff1f;在 Flutter 中 Routes 是什么&#xff1f; 6、Dart 是不是…...

【MQ】RabbitMq的可靠性保证

消息队列中的可靠性主要是分为三部分&#xff1a; 消息不丢失&#xff1a;确保消息从生产者发送到消费者消息不丢失消息不重复&#xff1a;确保消息不被重复消费消息顺序性&#xff1a;确保消费的顺序性 解决方案主要有以下几部分&#xff1a; 消息不丢失 生产者确认机制持久…...

STM32 GPIO配置 点亮LED灯

本次是基于STM32F407ZET6做一个GPIO配置&#xff0c;实现点灯实验。 新建文件 LED.c、LED.h文件&#xff0c;将其封装到Driver文件中。 双击Driver文件将LED.c添加进来 编写头文件&#xff0c;这里注意需要将Driver头文件声明一下。 在LED.c、main.c里面引入头文件LED.h LED初…...

Flink把kafa数据写入Doris的N种方法及对比。

用Flink+Doris来开发实时数仓,首要解决是如何接入kafka实时流,下面是参考Doris官方文档和代码,在自己项目开发的实践中总结,包括一些容易踩坑的细节。 目录 Routine Load方法 接入kafka实时数据 踩坑的问题细节 Flink Doris Connector方法 完整示例 Routine Load方法…...

Vue - 标签中 ref 属性的使用

在 Vue 3 中&#xff0c;ref 属性用于在模板中引用 DOM 元素或组件实例。通过 ref&#xff0c;可以直接访问这些元素或组件的实例&#xff0c;从而进行更复杂的操作&#xff0c;比如获取元素的尺寸、调用组件的方法等。 基本语法&#xff1a; <template><div ref&qu…...

leetcode-不同路径问题

一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff1f; 看见题目…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...