【大数据】机器学习----------强化学习机器学习阶段尾声
一、强化学习的基本概念
注: 圈图与折线图引用知乎博主斜杠青年
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函数:
- 使用逻辑回归模型来学习专家的状态 - 动作映射。
算法比对

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

相关文章:
【大数据】机器学习----------强化学习机器学习阶段尾声
一、强化学习的基本概念 注: 圈图与折线图引用知乎博主斜杠青年 1. 任务与奖赏 任务:强化学习的目标是让智能体(agent)在一个环境(environment)中采取一系列行动(actions)以完成一个…...
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,mysql 三台服务器时间同步(非常重要) # 下载ntpdate yum -y install…...
正则表达式中常见的贪婪词
1. * 含义:匹配前面的元素零次或者多次。示例:对于正则表达式 a*,在字符串 "aaaa" 中,它会匹配整个 "aaaa",因为它会尽可能多地匹配 a 字符。代码示例(Python):…...
CF 339A.Helpful Maths(Java实现)
题目分析 输入一串式子,输出从小到大排列的式子 思路分析 如上所说核心思路,但是我要使用笨方法,输入一串式子用split分割开,但是此时需要用到转义字符,即函数内参数不能直接使用“”,而是“\\”。分割开后…...
SQL 指南
SQL 指南 引言 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系数据库系统的标准计算机语言。自1970年代问世以来,SQL已经成为了数据库管理和数据操作的事实标准。本文旨在为初学者和有经验的数据库用户提供一个全面的SQL指南,涵盖SQL的基础知识、高级…...
DDD架构实战第七讲总结:分层模型和代码组织
云架构师系列课程之DDD架构实战第七讲总结:分层模型和代码组织 一、引言 在前几讲中,我们介绍了领域驱动设计(DDD)的基本构造块和生命周期模型中的聚合。本讲将重点讨论如何将这些构造块和代码组织起来,探讨分层架构和六边形模型,以及如何组织代码结构。 二、工厂和资…...
Python “字典” 实战案例:5个项目开发实例
Python “字典” 实战案例:5个项目开发实例 内容摘要 本文包括 5 个使用 Python 字典的综合应用实例。具体是: 电影推荐系统配置文件解析器选票统计与排序电话黄页管理系统缓存系统(LRU 缓存) 以上每一个实例均有完整的程序代…...
(一)QT的简介与环境配置WIN11
目录 一、QT的概述 二、QT的下载 三、简单编程 常用快捷键 一、QT的概述 简介 Qt(发音:[kjuːt],类似“cute”)是一个跨平台的开发库,主要用于开发图形用户界面(GUI)应用程序,…...
在 Windows 系统上,将 Ubuntu 从 C 盘 迁移到 D 盘
在 Windows 系统上,如果你使用的是 WSL(Windows Subsystem for Linux)并安装了 Ubuntu,你可以将 Ubuntu 从 C 盘 迁移到 D 盘。迁移过程涉及导出当前的 Ubuntu 发行版,然后将其导入到 D 盘的目标目录。以下是详细的步骤…...
vue2的$el.querySelector在vue3中怎么写
这个也属于直接操作 dom 了,不建议在项目中这样操作,不过我是在vue2升级vue3的时候遇到的,是以前同事写的代码,也没办法 先来看一下对比 在vue2中获取实例是直接通过 this.$refs.xxx 获取绑定属性 refxxx 的实例,并且…...
GPSd定时检测保活TCP GPS源
为了在 TCP GPS 源丢失连接时自动重新连接,可以编写一个监控脚本,定期检查 gpspipe 输出中的 TCP 源数据是否存在。如果检测到丢失,则使用 gpsdctl 或直接命令重新添加 TCP 源。 1、工具 检查并安装必要工具,本例需要使用 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 的接口非常简单,以下将结合实际代码示例和使用场景进行详细讲解,步骤如下: 文章目录 1. 安装 OpenAI 官方库2. 准备 API Key3. 基本使用示例:调用 ChatGPT**代码示例:****运行结果:…...
2025 最新flutter面试总结
目录 1.Dart是值传递还是引用传递? 2.Flutter 是单引擎还是双引擎 3. StatelessWidget 和 StatefulWidget 在 Flutter 中有什么区别? 4.简述Dart语音特性 5. Navigator 是什么?在 Flutter 中 Routes 是什么? 6、Dart 是不是…...
【MQ】RabbitMq的可靠性保证
消息队列中的可靠性主要是分为三部分: 消息不丢失:确保消息从生产者发送到消费者消息不丢失消息不重复:确保消息不被重复消费消息顺序性:确保消费的顺序性 解决方案主要有以下几部分: 消息不丢失 生产者确认机制持久…...
STM32 GPIO配置 点亮LED灯
本次是基于STM32F407ZET6做一个GPIO配置,实现点灯实验。 新建文件 LED.c、LED.h文件,将其封装到Driver文件中。 双击Driver文件将LED.c添加进来 编写头文件,这里注意需要将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 中,ref 属性用于在模板中引用 DOM 元素或组件实例。通过 ref,可以直接访问这些元素或组件的实例,从而进行更复杂的操作,比如获取元素的尺寸、调用组件的方法等。 基本语法: <template><div ref&qu…...
leetcode-不同路径问题
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 看见题目…...
AI短剧的风口来了!无需编程,全程技术支持,助你快速贴牌部署私有化系统
🔥 AI短剧爆火,但你还在因为“没有技术团队”而错失风口? 2024-2025年,AI短剧无疑是内容创业最大的黑马。从AI换脸、AI配音到一键生成剧本,市场的需求呈指数级爆发。 然而,对于大多数手握流量渠道、有客户…...
Wireshark抓包实战:DHCP协议交互全流程解析(附常见问题排查)
Wireshark深度解析:DHCP协议交互全流程与实战排错指南 从零开始理解DHCP协议的本质 想象一下,当你带着笔记本电脑走进一家咖啡馆,连接Wi-Fi的瞬间,设备就自动获得了上网所需的所有配置——IP地址、子网掩码、默认网关、DNS服务器。…...
如何用stressapptest进行高效内存和磁盘压力测试?实战案例分享
如何用stressapptest进行高效内存和磁盘压力测试?实战案例分享 在服务器运维和硬件性能评估中,内存和磁盘的稳定性直接关系到系统的可靠性。想象一下,当你的服务器在凌晨三点突然因为内存错误崩溃,或者磁盘在高峰期出现读写异常&a…...
Taskbar-Lyrics:Windows 11任务栏歌词嵌入终极指南
Taskbar-Lyrics:Windows 11任务栏歌词嵌入终极指南 【免费下载链接】Taskbar-Lyrics BetterNCM插件,在任务栏上嵌入歌词,目前仅建议Windows 11 项目地址: https://gitcode.com/gh_mirrors/ta/Taskbar-Lyrics 在Windows 11上享受沉浸式…...
PHP 8.5 升级生存指南:避免凌晨两点回滚的检查清单
定目标版本,定义内部支持策略在动 CI 或 Composer 之前,先回答一个问题:在你的组织里,这次升级"完成"意味着什么?确定目标和截止日期PHP 分支有两年的活跃支持,然后是两年的安全修复。官方支持表…...
OpenClaw自动化测试:百川2-13B驱动的前端元素定位与交互验证
OpenClaw自动化测试:百川2-13B驱动的前端元素定位与交互验证 1. 从手工测试到智能测试的进化之路 作为一名长期奋战在前端测试一线的开发者,我经历过从纯手工点击到Selenium脚本,再到Playwright框架的技术迭代。每次升级都带来效率提升&…...
AMD显卡福音:实测ROCm7+PyTorch在Windows下跑ComfyUI,比WSL快了多少?
AMD显卡Windows原生AI绘图性能飞跃:ROCm 7与WSL实测对比 当AMD在2025年夏季悄然发布ROCm 7预览版时,很少有人预料到它会给Windows平台的AI绘图体验带来如此显著的改变。作为一名长期在WSL环境下使用AMD显卡进行Stable Diffusion工作的开发者,…...
3步打造极速安全系统:AtlasOS开源优化方案全解析
3步打造极速安全系统:AtlasOS开源优化方案全解析 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/Atl…...
基于智能体(Agent)的自动化图像工作流:Wan2.2-I2V-A14B与任务编排
基于智能体(Agent)的自动化图像工作流:Wan2.2-I2V-A14B与任务编排 1. 引言:当图像生成遇上智能体 想象一下这样的场景:你需要为电商平台制作一组节日主题的广告图,包含特定风格的背景、商品展示和人物互动…...
如何通过FCEUX实现NES游戏高精度模拟?解锁经典游戏的数字化体验
如何通过FCEUX实现NES游戏高精度模拟?解锁经典游戏的数字化体验 【免费下载链接】fceux FCEUX, a NES Emulator 项目地址: https://gitcode.com/gh_mirrors/fc/fceux 你是否曾因找不到可靠的NES模拟器而无法重温童年经典游戏?是否遇到过模拟器兼容…...
