当前位置: 首页 > 编程日记 > 正文

『科学计算』可视化二元正态分布3D科学可视化实战

二元正态分布可视化本体

由于近来一直再看kaggle的入门书(sklearn入门手册的感觉233),感觉对机器学习的理解加深了不少(实际上就只是调包能力加强了),联想到假期在python科学计算上也算是进行了一些尝试学习,觉得还是需要学习一下机器学习原理的,所以重新啃起了吴恩达的cs229,上次(5月份的时候?)就是在多元高斯分布这里吃的瘪,看不下去了,这次觉定稳扎稳打,不求速度多实践实践,尽量理解数学原理,所以再次看到这部分时决定把这个分布复现出来,吴恩达大佬用的matlab,我用的python,画的还不错,代码如下,

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
from matplotlib import cm
import matplotlib as mplnum = 200
l = np.linspace(-5,5,num)
X, Y =np.meshgrid(l, l)u = np.array([0, 0])
o = np.array([[1, 0.5],[0.5, 1]])pos = np.concatenate((np.expand_dims(X,axis=2),np.expand_dims(Y,axis=2)),axis=2)a = (pos-u).dot(np.linalg.inv(o))
b = np.expand_dims(pos-u,axis=3)
Z = np.zeros((num,num), dtype=np.float32)
for i in range(num):Z[i] = [np.dot(a[i,j],b[i,j]) for j in range(num)]
Z = np.exp(Z*(-0.5))/(2*np.pi*np.linalg.det(o))
fig = plt.figure()
ax = fig.add_subplot(111,projection='3d')
ax.plot_surface(X, Y, Z, rstride=5, cstride=5, alpha=0.3, cmap=cm.coolwarm)cset = ax.contour(X,Y,Z,10,zdir='z',offset=0,cmap=cm.coolwarm)
cset = ax.contour(X, Y, Z, zdir='x', offset=-5,cmap=mpl.cm.winter)
cset = ax.contour(X, Y, Z, zdir='y', offset= 5,cmap= mpl.cm.winter)
'''
mpl.cm.rainbow
mpl.cm.winter
mpl.cm.bwr  # 蓝,白,红
cm.coolwarm
'''ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show() 

实际操作中,可以看到我在Z生成部分使用了双层循环,我本意是使用numpy广播机制优化掉循环,实际操作不太顺利,(20,20,2)去叉乘(20,20,2,1),结果shape不是我期望的(20,20,1),而是(20,20,20,20,1),也就是说在高维叉乘时其实广播机制不太好用,毕竟实际上两个不同维度矩阵是可以直接叉乘的(虽然对维度有要求),这一点值得注意(高维矩阵叉乘不要依赖numpy的广播机制)。

参数:

u = np.array([0, 0]) 
o = np.array([[1, 0.5],
[0.5, 1]])

参数:

u = np.array([1, 1])
o = np.array([[1, 0],
[0, 1]])

参数:

u = np.array([1, 1])
o = 3*np.array([[1, 0],
[0, 1]])

等高线图添加

我们单独绘制一下等高线图,

# 前面添加图的位置修改如下,
# ax = fig.add_subplot(211,projection='3d')ax2 = fig.add_subplot(212)
cs = ax2.contour(X,Y,Z)
ax2.clabel(cs, inline=1, fontsize=20)

高斯判别分析模型示意图可视化

现在我们在上面代码的基础上可视化吴恩达老大的下一节的图,高斯判别分析模型可视化,这里面我们仅仅可视化基础的双高斯独立分布,代码如下,

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
from matplotlib import cm
import matplotlib as mplnum = 200
l = np.linspace(-5,5,num)
X, Y =np.meshgrid(l, l)
pos = np.concatenate((np.expand_dims(X,axis=2),np.expand_dims(Y,axis=2)),axis=2)u1 = np.array([2, 2])
o1 = 3*np.array([[1, 0],[0, 1]])
a1 = (pos-u1).dot(np.linalg.inv(o1))
b1 = np.expand_dims(pos-u1,axis=3)
Z1 = np.zeros((num,num), dtype=np.float32)u2 = np.array([-2, -2])
o2 = 3*np.array([[1, 0],[0, 1]])
a2 = (pos-u2).dot(np.linalg.inv(o2))
b2 = np.expand_dims(pos-u2,axis=3)
Z2 = np.zeros((num,num), dtype=np.float32)for i in range(num):Z1[i] = [np.dot(a1[i,j],b1[i,j]) for j in range(num)]Z2[i] = [np.dot(a2[i,j],b2[i,j]) for j in range(num)]
Z1 = np.exp(Z1*(-0.5))/(2*np.pi*np.linalg.det(o1))
Z2 = np.exp(Z2*(-0.5))/(2*np.pi*np.linalg.det(o1))Z = Z1 + Z2fig = plt.figure()
ax = fig.add_subplot(211,projection='3d')
ax.plot_surface(X, Y, Z, rstride=5, cstride=5, alpha=0.3, cmap=cm.coolwarm)cset = ax.contour(X,Y,Z,10,zdir='z',offset=0,cmap=cm.coolwarm)
cset = ax.contour(X, Y, Z, zdir='x', offset=-5,cmap=mpl.cm.winter)
cset = ax.contour(X, Y, Z, zdir='y', offset= 5,cmap= mpl.cm.winter)
'''
mpl.cm.rainbow
mpl.cm.winter
mpl.cm.bwr  # 蓝,白,红
cm.coolwarm
'''ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()ax2 = fig.add_subplot(212)
cs = ax2.contour(X,Y,Z)
ax2.clabel(cs, inline=1, fontsize=20)

不过吴老大的图两个高斯分布投影是分开的,所以我们再次小改绘图部分,

cset = ax.contour(X,Y,Z1,10,zdir='z',offset=0,cmap=cm.coolwarm)
cset = ax.contour(X,Y,Z2,10,zdir='z',offset=0,cmap=cm.coolwarm)
cset = ax.contour(X, Y, Z, zdir='x', offset=-5,cmap=mpl.cm.winter)
cset = ax.contour(X, Y, Z, zdir='y', offset= 5,cmap= mpl.cm.winter)
'''
mpl.cm.rainbow
mpl.cm.winter
mpl.cm.bwr  # 蓝,白,红
cm.coolwarm
'''ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()ax2 = fig.add_subplot(212)
cs = ax2.contour(X,Y,Z1)
ax2.clabel(cs, inline=1, fontsize=20)
cs2 = ax2.contour(X,Y,Z2)
ax2.clabel(cs2, inline=1, fontsize=20)

显示如下,框子不够标准导致圆有点变形,不过这个可以通过手动拉伸得到优化,所以问题不大,

有关多元正态分布的数学原理建议自行百度(cs229的学习不会在博客上更新,主要是因为我非常非常讨厌打数学公式233)。

相关文章:

继中美之后,欧盟会成为下一个 AI 超级体吗?

美国和中国已经是毋庸置疑的AI超级体了,那么欧盟有可能成为下一个吗?德国总理安格拉默克尔以冷酷无情著称,但需要的时候她也可以很幽默。在最近一次由科技杂志《Ada》举办的季度会议上,有人问她是否认为机器人应当拥有权利&#x…

Transformer新型神经网络在机器翻译中的应用 | 公开课笔记

嘉宾 | 于恒来源 | AI科技大本营在线公开课编辑 | Jane于恒:直播间的朋友大家好!欢迎大家来到本次AI科技大本营公开课,我是本次讲师于恒。在讲课开始之前先简短的做个自我介绍,我是博士毕业于中国科学院计算技术研究所&#xff0c…

linux终端vi退出命令,如何从命令行关闭vim?

问题描述我知道这更像是一个普通的linux问题,但是没有。因此,当我在命令提示符下输入类似vim的程序时,它会显示文件中的所有文本,我可以编辑它等等。但是我无法弄清楚如何关闭或保存文件并返回命令提示符而不会被杀死这个过程。任…

Mysql 小数点后最多保留两位数

CAST(money/100 as DECIMAL(10,2)) AS num 转载于:https://www.cnblogs.com/moxiaoping/p/7611090.html

这次拿下Python全靠它了!一个交互式的学习资源!

你的假期余额已不足!在假期的最后一天,我们给大家介绍一本非常 nice 的 Python 学习书——Project Python。Project Python是一本免费的交互式书籍,它通过使用图形、动画和游戏来教你用 Python编写代码。后面你还将学到解决经典计算机科学问题…

linux启动sql server数据库,SQL Server数据库启动过程详解及启动不起来的问题分析及解决方法...

第五步、启动系统数据库modelmodel系统数据库同样也是SQL Server启动过程中用到的一个非常关键的数据库,如果这个库损坏,SQL Server启动也会失败,关于model数据不能启动的原因基本和master的类似,同样也是两种:1、数据…

navicat对mysql的备份

1:备份位置:_3306的“连接信息”可以看到。或者点:前往设置保存路径 2:建议一定时间点进行备份或者命令执行;转载于:https://blog.51cto.com/q168988/1969780

上当记,收国外快递时,注意相关责任定义

刚才在收到M$从米国寄来的包裹时,一时大意给了送快递的1百多的税钱,后来想想不对,在包裹上看到DDP字样(Delivery duty paid),上网一查DDP: “完税后交货(……指定目的地&…

python远程登录linux命令,Python+requests通过paramiko远程登录Linux执行sh命令

在做自动化测试过程中, 偶尔需要登录Linux服务器执行一些sh命令。Python的paramiko模块, 遵循SSH2协议, 支持以加密和认证的方式远程连接服务器, 可用来连接远程linux主机, 然后执行Linux命令或者通过SFTP传输文件封装的方法import paramikoclass Operate_Server():def __init_…

2017-09-29 前端日报

2017-09-29 前端日报 精选 被誉为神器的requestAnimationFrame我是怎样让网站用上HTML5 ManifestReact 的性能优化(一)当 PureComponent 遇上 ImmutableJSJavaScript 异步队列实现及拓展CSS Grid Gotchas And Stumbling BlocksAbortable fetchAlloyTeam …

Apache Kylin v2.5.0正式发布,开源分布式分析引擎

文章转载自开源中国,作者 Apache Kylin 社区日前,Apache Kylin 社区宣布,Apache Kylin v2.5.0 正式发布。Apache Kylin 是一个开源的分布式分析引擎,旨在为极大数据集提供 SQL 接口和多维分析(OLAP)的能力。…

不同职业阶段的修炼: 多与少

有多才有少 开学第一天,教室里挤满来选修“领导”课程的学生,这一群两年后就会变成企业竞相争取的名校MBA,心中难免兴奋地等待教授的出现。教室门被推开后,走进三个人,教授后面跟着一个年轻的陌生人,还有一…

underscorejs之 _.indexBy(list, iteratee, [context])

语法 _.indexBy(list, iteratee, [context]) 说明 给定一个list,和 一个用来返回一个在列表中的每个元素键 的iterator 函数(或属性名), 返回一个每一项索引的对象。和groupBy非常像,但是当你知道list的key是唯一的时候…

linux shell $0怎么输出,linux shell中$0,$?,$!等的特殊用法

一、Shell脚本中$0、$?、$!、$$、$*、$#、$等的意义说明(1)$$Shell本身的PID(ProcessID,即脚本运行的当前进程ID号)(2)$!Shell最后运行的后台Process的PID(后台运行的最后一个进程的进程ID号)(3)$?最后运行的命令的结束代码(返回值)即执行上一个指令的返回值 (显示…

云从科技完成B+轮超10亿元融资,多个国家基金进入

10 月 8 日,中国人工智能国家队云从科技宣布正式完成新一轮超 10 亿元人民币融资,除元禾原点、越秀金控,刘益谦等原有股东继续跟投外,本轮新增了多家中国国家战略投资者,其中不乏知名地方政府基金,包括中国…

12×××求职经过-之求职信

求职信: 鼠:本地户口,以前在武钢工地打过工,转移过一部分钢材的所有权,被当做失足青年挽救三年。擅长上夜班,会开麻木,求社区服务,家政等职。 牛:身体好,能吃…

面向对象三大特性一一封装(encapsulation)

为什么要封装? 我们看电视,只要按一下开关和换台就行了。有必要了解电视的内部结构吗?有必要了解显像管吗? 封装是为了隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性&a…

云计算赋能人工智能,未来的红利在哪?

“云”这个概念对于身处于信息时代的我们而言越来越熟悉,而云计算平台作为对计算机软硬件资源进行集中存储、管理的平台,已经不再是一个遥远的 IT 概念,它开始渗透到各行各业,未来将会像水和电一样,作为基础设施&#…

pxe linux 配置文件,Linux PXE 部署

一、基础环境准备Linux配置静态IP-192.168.5.1# vim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICEeth0ONBOOTyesBOOTPROTOstaticIPADDR192.168.5.1NETMASK255.255.255.0:x --保存退出#service network restart#service iptables stop二、准备安装镜像#mount /dev/cdrom /m…

Keras还是TensorFlow?深度学习框架选型实操分享

译者| 王天宇、林椿眄责编| Jane、琥珀出品| AI科技大本营深度学习发展势头迅猛,但近两年涌现的诸多深度学习框架让初学者无所适从。如 Google 的 TensorFlow、亚马逊的 MXNet、Facebook 支持的 PyTorch、Theano、Caffe、CNTK、Chainer、百度的 PaddlePaddle、DSSTN…

Android -- queryIntentActivities

某些时候你想要知道某个APP是否有注册了一个明确的intent,比如说你想要检查某个receiver是否存在,然后根据是否存在来这个receiver来在你的AP里面enable某些功能。我们可以通过PackageManager来check它。 code public boolean isIntentAvailable(Context…

吉大c语言程序设计作业一,吉林大学历年C语言程序设计试题及答案.doc

吉林大学历年C语言程序设计试题及答案吉林大学历年C语言程序设计试题及答案(5)END2000年试题答案一、(1)解题思想&#xff1a; 用5个数 a,b,c,d,e,来回替换&#xff0c;最终f(n)算出。设计程序如下&#xff1a;int F(int n){ if(n <5) return n ;int temp,a1;b2;c3;d4;e5;fo…

忍不住心中的激动

天天上自行车旅行网&#xff0c;看到别人的出行游记&#xff0c;心里很羡慕&#xff0c;也很冲动&#xff0c;想想还有1个多月就可以出发了&#xff0c;不知道能坚持到哪里&#xff0c;恒心是有的&#xff0c;可身体就不知道&#xff0c;不过这次时间可以不用那么紧&#xff0c…

程序员入错行怎么办?

程序员应该选择什么技术领域才能获得最高的回报&#xff1f;本文详细解读了 2018 年最热门的五大领域&#xff0c;对行业现状、薪资概况及具体的技能要求给出了深入的分析&#xff0c;希望给担心“入错行”的你提供些指导。七天国庆黄金周转眼就过&#xff0c;退散的除了出游热…

关于局域网共享访问问题总结

Windows网上邻居互访的基本条件&#xff1a;  1) 双方计算机打开&#xff0c;且设置了网络共享资源&#xff1b;  2) 双方的计算机添加了 "Microsoft 网络文件和打印共享" 服务&#xff1b;  3) 双方都正确设置了网内IP地址&#xff0c;且必须在一个网段中&…

Linq初级班 Linq To XML体验(基础篇)

LINQ To XML体验(基础) 这两天开始学习LINQ to XML的知识,我会继续把自己的感想和示例发布给初学者们学习的,一样欢迎高手们多多指点,请勿使用过激语言,针锋相对,我是个初学者,自知还有许多不足的地方,还请高手们多多耐心指导,好了,下面就开始我们的LINQ to XML旅程吧,在此之前…

c语言字符串机考题,2016全国计算机二级《C语言》机考试题及答案

2016全国计算机二级《C语言》机考试题及答案一、程序填空题(共18分)下列给定程序中&#xff0c;函数fun的功能是&#xff1a;求ss所指字符串数组中长度最短的字符串所在的行下标&#xff0c;作为函数值返回&#xff0c;并把其串长放在形参n所指的变量中。ss所指字符串数组中共有…

如何快速优化机器学习的模型参数

作者 | Thomas Ciha译者 | 刘旭坤编辑 | Jane出品 | AI科技大本营【导读】一般来说机器学习模型的优化没什么捷径可循。用什么架构&#xff0c;选择什么优化算法和参数既取决于我们对数据集的理解&#xff0c;也要不断地试错和修正。所以快速构建和测试模型的能力对于项目的推进…

2004-10-26+ 用户输入的安全问题

最近在看一本叫《asp.net安全性高级编程》&#xff0c;把一些感兴趣的东西写成笔记当到这里吧&#xff0c;今天这一篇主要是讲怎么防御注入攻击的。script injection 1.验证内容a.使用regularexpressionvalidator的正则表达式来限制用户输入2.筛选用户输入a.使用string.replace…

在C语言中break语句称为,在C语言中,break语句的功能是退出函数

摘要&#xff1a;燃烧煤中质在中过程所含矿物&#xff0c;语言k语高温和氧化后分解&#xff0c;称为&#xff0c;体残的固留物生成。出函只装锅炉机时称(引风。语言k语锅炉规格都以其公取的常用称压一般为选力和来作阀门上的。...燃烧煤中质在中过程所含矿物&#xff0c;语言k语…