第十七周:机器学习
目录
摘要
Abstract
一、MCMC
1、马尔科夫链采样
step1 状态设定
step2 转移矩阵
step3 马尔科夫链的生成
step4 概率分布的估计
2、蒙特卡洛方法
step1 由一个分布产生随机变量
step2 用这些随机变量做实验
3、MCMC算法
4、参考文章
二、flow-based GAN
1、引入
2、数学基础回顾
总结
摘要
本周主要学习了MCMC算法,其中包含马尔科夫链采样和蒙特卡洛方法。通过视频资料的学习,对以上提到的两种方法进行规律总结以及简单的代码实践。还回顾了flow-based GAN理论的简单数学基础。
Abstract
This week is focused on MCMC algorithm which contains Markov chain sampling and Monte Carlo method. The video material was used to summarize the laws of the two methods mentioned above as well as simple code practice. The simple mathematical foundations of flow-based GAN theory are also reviewed.
一、MCMC
1、马尔科夫链采样
Markov Chains马尔科夫链:未来的状态只取决于前一个状态,而不依赖于更往前的状态。并且所有状态出箭头的概率之和都为1。
随机漫步random walk
问题:行走着无规则的向着四面八方行走,最终形成的各个方向的概率是否收敛于一定值?
解决:稳态分布(平衡状态)
稳态分布:与初始概率分布无关,马尔科夫链在有限次状态转移之后到达的平稳状态分布即为稳态分布。
所得到的向量值代表了某个时刻(第j个时刻)的概率分布值
则代表i个状态的概率分布。由于每个状态的输出之和都为1,所以有

step1 状态设定
一家快餐店售卖三种食物:pizza、buger、hotdog。将每种食物设定为不同状态分别为1、2、3
#定义3种状态
state = {0 : "Burger",1 : "Pizza",2 : "Hotdog"
}
state
step2 转移矩阵
每个数值代表着对应行列的权重,如果两个节点之间用箭头连线连接,那么该数值也叫转移概率
#定义过渡矩阵
A = np.array([[0.2, 0.6, 0.2], [0.3, 0.0, 0.7], [0.5, 0.0, 0.5]])
step3 马尔科夫链的生成
#随机生成马尔科夫链——random walk的过程
n = 15
start_state = 0
curr_state = start_state
print(state[curr_state], "--->", end=" ")while n-1:curr_state = np.random.choice([0, 1, 2], p=A[curr_state])print(state[curr_state], "--->", end=" ")n-=1
print("stop")
随机选定一个初始状态,接着用np库中的random.choice函数在备选状态集中选择下一状态,直至循环到设置最大值。 生成结果如下:

step4 概率分布的估计
法一:Monte Carlo方法
steps = 10**6
start_state = 0 #其中A[curr_state]只有三种状态:pizza、buger、hotgog
curr_state = start_state
pi = np.array([0, 0, 0]) #初始状态均为0
pi[start_state] = 1 #把初始状态开始的state设为1i = 0
while i<steps:curr_state = np.random.choice([0,1,2], p=A[curr_state]) #随机从p中选择一种状态pi[curr_state]+=1i +=1print("π = ", pi/steps)
输出结果如下:
![]()
法二:矩阵连乘法

steps = 10**3 #设置矩阵相乘的次数
A_n = Ai=0
while i<steps:A_n = np.matmul(A_n, A) #矩阵乘法i+=1print("A^n = \n", A_n, "\n")
print("π = ", A_n[0])
输出结果如下:

法三:求解左特征值
pi向量代表各个状态的概率分布,也就是每一行的概率分布

可以看出,上面关于pi的等式要成立,有些类似于线性代数中特征值和特征向量的求解,pi相当于是特征向量,特征值为1
import scipy.linalg
values, left = scipy.linalg.eig(A, right = False, left = True) #计算左特征向量和特征值print("left eigen vectors = \n", left, "\n")
print("eigen values = \n", values)
特征值和特征向量输出结果如下:
将特征向量进行归一化处理:
pi = left[:,0] #提取第一个左特征向量
pi_normalized = [(x/np.sum(pi)).real for x in pi] #归一化第一个左特征向量
pi的向量输出结果如下:

Markov Chains的概率预测
def find_prob(seq, A, pi):start_state = seq[0]prob = pi[start_state]prev_state, curr_state = start_state, start_statefor i in range(1, len(seq)):curr_state = seq[i]prob *= A[prev_state][curr_state]prev_state = curr_statereturn probprint(find_prob([1, 2, 2, 0], A, pi_normalized))
预测一条给定的markov chains的概率P(pizza——>hotdog——>hotdog——>burger)
预测结果如下:
![]()
2、蒙特卡洛方法
step1 由一个分布产生随机变量
step1 分布函数CDF的反函数
#随机线性选取x,得到概率密度f和概率分布F
x = np.linspace(0,3,100) #初始、结束、总数
f = 2*np.exp(-2*x)
F = 1-np.exp(-2*x)#绘图
plt.figure(figsize=(8,3))
plt.plot(x, f, label=r'$f(x)$')
plt.plot(x,F, label=r'$F(x)$')
plt.legend()
plt.xlabel('$x$', fontsize=20)
plt.legend()
plt.show()
上述代码以泊松分布为例

分布函数的反函数
#设定反函数
Us = np.random.rand(10000)
F_inv_Us = -np.log(1-Us)/2#绘图
plt.figure(figsize=(8,3))
plt.plot(x, f, label=r'$f(x)$')
plt.hist(F_inv_Us, histtype='step', color='red', density='norm', bins=100, label='$F^{-1}(u)$')
plt.legend()
plt.xlabel('$x$', fontsize=20)
plt.legend()
plt.show()

step2 查找排序算法
#设定自变量及概率密度和分布函数的定义式
x, y, F1, F2, E1, E2 = smp.symbols('x y F_1 F_2 E_1 E_2', real=True, positive=True)
fs = F1*smp.exp(-smp.sqrt(x/E1)) + F2*smp.exp(-smp.sqrt(x/E2))
Fs = smp.integrate(fs, (x,0,y)).doit()#写成只需要传递参数的函数形式
Fn = smp.lambdify((y, E1, E2, F1, F2), Fs) #目的就是输入前面的数值y, E1, E2, F1, F2)带入后面的式子Fs中去
fn = smp.lambdify((x, E1, E2, F1, F2), fs)#给定参数的实际数值
E1 = E2 = 0.2
F1 = 1.3
F2 = 1.4
x = np.linspace(0,5,1000)
f = fn(x, E1, E2, F1, F2)
F = Fn(x, E1, E2, F1, F2)#绘图
plt.figure(figsize=(8,3))
plt.plot(x,f, label=r'$f(x)$')
plt.plot(x,F, label=r'$F(x)$')
plt.legend()
plt.xlabel('$x$', fontsize=20)
plt.legend()
plt.show()

加入分布函数的反函数
#反函数
F_inv_Us = x[np.searchsorted(F[:-1], Us)]#绘图
plt.figure(figsize=(8,3))
plt.plot(x, f, label=r'$f(x)$')
plt.hist(F_inv_Us, histtype='step', color='red', density='norm', bins=100, label='$F^{-1}(u)$')
plt.legend()
plt.xlabel('$x$', fontsize=20)
plt.legend()
plt.xlim(0,2)
plt.show()
上面的函数分布是正太分布

step3 建立随机变量
#rayleigh分布
r = np.random.rayleigh(size=1000)#绘图
plt.hist(r, bins=100)
plt.show()

step2 用这些随机变量做实验
累积计算detector的energy
N = 100000# Part 1
X = np.random.poisson(lam=4, size=N) #采样泊松分布# Part 2
x = np.linspace(0,5,1000)
F = Fn(x, E1, E2, F1, F2) #分布函数
Us = np.random.rand(X.sum()) #随机生成指定维度的样本数据
E = x[np.searchsorted(F[:-1], Us)] #样本数据在分布函数中的索引,E是分布中的原有数据
在n轮实验之后,检测到的粒子总数净和
idx = np.insert(X.cumsum(), 0, 0)[:-1] #累积求和插入到空列表中
E_10s = np.add.reduceat(E, idx) #分段求和,E是一个完整的数组,ind给出的是分段的位置,然后每一段分别进行求和
#也就是,0-2求和、3-5求和、6-11求和#绘图
plt.figure(figsize=(5,3))
plt.hist(E_10s, bins=100)
plt.xlabel('Energy [GeV]', fontsize=20)
plt.ylabel('# Occurences')
plt.show()
结果绘制如下:

3、MCMC算法
MCMC:该方法将马尔科夫(Markov)过程引入到Monte Carlo模拟中,实现抽样分布随模拟的进行而改变的动态模拟,弥补了传统的蒙特卡罗积分只能静态模拟的缺陷。
4、参考文章
参考视频:https://www.youtube.com/watch?v=i3AkTO9HLXo
https://www.youtube.com/watch?v=U00Kseb6SB4
参考文章: 动态规划之——矩阵连乘(全网最详细博文,看这一篇就够了!)-CSDN博客
原创 | 一文读懂蒙特卡洛算法
二、flow-based GAN
1、引入

问题:一般的GAN无法直接optimize模型的function,也就是无法使得取得最大值
解决:flow-based GAN
2、数学基础回顾
Jacobian matrix

向量z是输入、向量x是输出 ,Jacobian matrix 就是分别在各自位置上进行偏微分操作。由此引申出了Jacobian的逆矩阵。二者互为逆矩阵的关系,有公式如下:
determinant
几何意义的表示如下:
几维向量就代表了该矩阵能够组成几维空间的图形。
change of variable theorem
已知输入z的正态分布以及输出的一个复杂分布
。首先,将z作为输入、x作为输出,f是连接输入输出的函数,体现二者之间的关系;接着,将
对应到
上去,找到
在分布中对应的
;最后,找到两个分布之间的关系。

无论输入输出是什么分布,蓝色方块和绿色方块的面积要保持一致。
总结
本周对GAN的变形算法进行数学基础学习,并且拓展学习了MCMC算法的基本内容和代码。下周将继续学习flow-based GAN算法的基本理论推导,并且对MCMC算法进行总结,找到马尔科夫链和蒙特卡罗方法的关联及在该算法中各自的应用。
相关文章:
第十七周:机器学习
目录 摘要 Abstract 一、MCMC 1、马尔科夫链采样 step1 状态设定 step2 转移矩阵 step3 马尔科夫链的生成 step4 概率分布的估计 2、蒙特卡洛方法 step1 由一个分布产生随机变量 step2 用这些随机变量做实验 3、MCMC算法 4、参考文章 二、flow-based GAN 1、引…...
算法4之链表
概述 链表的题目没有太难的算法,纯看熟练度,是必须会。面试笔试不会是直接挂的,或者给面试官留下不好的印象。 单双链表的反转,单链表实现队列,K个一组反转链表。 单链表反转 链表节点的定义 Data public class Li…...
掌握未来技术:KVM虚拟化安装全攻略,开启高效云端之旅
作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客 目录 前言&#…...
挖矿病毒的处理
前阶段生产服务器又中挖矿病毒了,紧急处理了一波 现象 执行 top命令,查看哪里cpu占用较高 CPU 彪满下不来 解决 1、杀掉进程 kill -9 pid 2、但是,过一会又不行了,说明有定时任务在定时执行这个病毒 3、先找到病毒文件&…...
JVM(HotSpot):GC之G1垃圾回收器
文章目录 一、简介二、工作原理三、Young Collection 跨代引用四、大对象问题 一、简介 1、适用场景 同时注重吞吐量(Throughput)和低延迟(Low latency),默认的暂停目标是 200 ms超大堆内存,会将堆划分为…...
appium文本输入的多种形式
目录 一、send_keys方法 二、press_keycode方法 三、subprocess方法直接通过adb命令输入 一、send_keys方法 这个是最常用的方法,不过通常使用时要使用聚焦,也就是先点击后等待: element wait.until(EC.presence_of_element_located((By…...
springboot095学生宿舍信息的系统--论文pf(论文+源码)_kaic
学生宿舍信息管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了学生宿舍信息管理系统的开发全过程。通过分析学生宿舍信息管理系统管理的不足,创建了一个计算机管理学生宿舍信息管理系统的方…...
使用SQL在PostGIS中创建各种空间数据
#1024程序员节|征文# 一、目录 1. 概述 2. 几何(Geometry)类型 创建点 创建线 创建面 3. 地理(Geography)类型 地理点(GEOGRAPHY POINT) 地理线串(GEOGRAPHY LINESTRINGÿ…...
ArkTS 如何适配手机和平板,展示不同的 Tabs 页签
ArkTS(Ark TypeScript)作为HarmonyOS应用开发的主要语言,提供了丰富的组件和接口来适配不同设备,包括手机和平板。在展示不同的Tabs页签以适应手机和平板时,ArkTS主要依赖于布局和组件的灵活性,以及响应式设…...
Docker下载途径
Docker不是Linux自带的,需要我们自己安装 官网:https://www.docker.com/ 安装步骤:https://docs.docker.com/engine/install/centos/ Docker Hub官网(镜像仓库):https://hub.docker.com/ 在线安装docker 先卸载旧的docker s…...
Windows: 如何实现CLIPTokenizer.from_pretrained`本地加载`stable-diffusion-2-1-base`
参考:https://blog.csdn.net/qq_38423499/article/details/137158458 https://github.com/VinAIResearch/Anti-DreamBooth?tabreadme-ov-file 联网下载没有问题: import osos.environ["HF_ENDPOINT"] "https://hf-mirror.com" i…...
MySQL 9从入门到性能优化-慢查询日志
【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...
ARM学习(33)英飞凌(infineon)PSOC 6 板子学习
笔者来聊一下psoc62 系列板子的知识 1、PSOC62板子介绍 Psoc6-evaluationkit-062S2 与RT-Thread联合推出的一款32位的双core的板子,基于CortexM4以及CortexM0。 管脚兼容Arduio。板载DAP-Link,可以支持调试以及串口,无需外接2MB的Flash以及…...
华为原生鸿蒙操作系统的发布有何重大意义和影响:
#1024程序员节 | 征文# 一、华为原生鸿蒙操作系统的发布对中国的意义可以从多个层面进行分析: 1. 技术自主创新 鸿蒙操作系统的推出标志着中国在操作系统领域的自主创新能力的提升。过去,中国在高端操作系统方面依赖于外国技术,鸿蒙的发布…...
API 接口:连接生活与商业的数字桥梁
在当今数字化高速发展的时代,API(Application Programming Interface,应用程序编程接口)接口正以前所未有的深度和广度影响着我们的日常生活与商业决策。 一、API 接口在日常生活中的应用 智能出行 地图导航应用通过接入各种交通数…...
IEC101 JAVA开发记录
目录 JAVA Demo 仿真工具 平衡式与非平衡式 帧格式 固定帧格式 可变帧格式 单字节 控制域 主站到子站 子站至主站 位组成 链路地址 应用服务数据单元(ASDU) 类型标识TI 可变结构限定词(VSQ) 传送原因(COT) 信息体元素 带品质描述词的单点信息(SIQ) 带品…...
降压恒压150V供电 负载固定5V 持续0.6A电动车仪表供电芯片SL3150H
一、供电能力 高电压输入:SL3150H具备150V的供电能力,这意味着它可以在电动车的复杂电气环境中稳定工作,无论是面对高电压的输入还是电压波动较大的情况,都能保持稳定的输出。固定输出电压与电流:在输出方面ÿ…...
QT 从ttf文件中读取图标
最近在做项目时,遇到需要显示一些特殊字符的需求,这些特殊字符无法从键盘敲出来,于是乎,发现可以从字体库文件ttf中读取显示。 参考博客:QT 图标字体类IconHelper封装支持Font Awesome 5-CSDN博客 该博客封装的很不错…...
JS动态调用变量
当存在多个变量checkbox1、checkbox2、checkbox3、checkbox4的变量时 -常规调用:if(条件A){this.$refs.checkbox1.check true }if(条件B){this.$refs.checkbox2.check true } 或者使用switch case-动态调用: var result 2 // 在dom渲染完成再给checkbox赋值this.$nextTick…...
django restful API
文章目录 项目地址一、django环境安装以及初识restful1.1 安装python 3.10的虚拟环境1.2 创建django工程文件1.3 创建一个book app1.4 序列化(Django JsonResponse)1.4.1创建一个Models1.4.2 创建django的超级用户admin1.4.3 添加serializers.py生成序列化器1.5 FBV创建视图1…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
