第十七周:机器学习
目录
摘要
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…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
