『科学计算』可视化二元正态分布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)。
『科学计算』可视化二元正态分布3D科学可视化实战相关推荐
- 揭秘『边缘计算』“搅局”沪深股市的背后
资本市场对『边缘计算』的追捧,或许已经提早到来了. 这也符合"边缘计算处于Gartner 2018年云计算炒作周期的高峰期"的论调. 3月以来,与边缘计算相关的概念股纷纷遭遇涨停. ...
- python科学计算基础教程pdf下载-Python科学计算基础教程_PDF电子书
因资源下载地址容易失效,请加微信号359049049直接领取,直接发最新下载地址. 前言 ======================================================= ...
- 阿里重磅开源首款自研科学计算引擎Mars,揭秘超大规模科学计算
日前,阿里巴巴正式对外发布了分布式科学计算引擎 Mars 的开源代码地址,开发者们可以在pypi上自主下载安装,或在Github上获取源代码并参与开发. 此前,早在2018年9月的杭州云栖大会上,阿里 ...
- python 科学计算设计_用Python做科学计算 高清晰PDF
用Python做科学计算一书介绍如何用Python开发科学计算的应用程序,除了介绍数值计算之外,我们还将着重介绍如何制作交互式的2D.3D图像:如何设计精巧的程序界面:如何和C语言所编写的高速计算程序 ...
- python 科学计算设计_用Python做科学计算 pdf版
本书将介绍如何用Python开发科学计算的应用程序,除了介绍数值计算之外,我们还将着重介绍如何制作交互式的2D.3D图像:如何设计精巧的程序界面:如何和C语言所编写的高速计算程序结合:如何编写声音.图 ...
- matlab与科学计算 王沫然,MATLAB与科学计算(第3版) 王沫然著 电子工业出版社 9787121180521...
商品描述: 基本信息 书名:MATLAB与科学计算(第3版) 定价:49.80元 作者:王沫然 编著 出版社:电子工业出版社 出版日期:2012-10-01 ISBN:9787121180521 字数 ...
- python科学计算基础教程pdf下载-Python科学计算 PDF 第2版
给大家带来的一篇关于Python相关的电子书资源,介绍了关于Python.科学计算方面的内容,本书是由清华大学出版社出版,格式为PDF,资源大小59.5 MB,张若愚编写,目前豆瓣.亚马逊.当当.京东 ...
- python科学计算基础教程pdf下载-python科学计算 第二版 PDF 下载
相关截图: 资料简介: 本书详细介绍Python科学计算中最常用的扩展库NumPy.SciPy.matplotlib.Pandas.SymPy.TTK.Mayavi.OpenCV.Cython,涉及数 ...
- python扩展库用于科学计算的有哪些_数据科学必备的十大 Python 库
Python 已成为当今使用最广泛的编程语言之一,尤其是在数据科学领域. Python 是一种高性能的语言,易于学习和调试,并且具有广泛的库支持.这些库都有自己独特的功能,一些专注于数据挖掘,一些专 ...
最新文章
- Static、DynamicResource学习笔记一
- xmanager远程登录
- 重磅!6.7亿美元!F5喜提开源服务器Nginx
- USB OTG ID 检测原理
- Centos之帮助命令
- web browser 发展史
- springboot的起步依赖
- [Ext JS6]包-Package
- 全栈开发永远成不了高级程序员?!
- 常用PAM模块--完全笔记
- PHP踩坑:对象的引用
- ajax调用一般应用程序,【Web前端】---js调用本地应用程序
- Fabric CA 官方用户指南(中文版)
- 神经网络的心得体会,神经网络心得体会
- 计算机实战项目之 [含论文+辩论PPT+源码等]微信小程序社区疫情防控+后台管理|前后分离VUE[包运行成功
- C++ Primer Plus 第九章编程题练习
- MySQL增加、修改、删除字段
- Linux虚拟机如何修改mysql的数据目录位置
- Java相对路径与类路径详解
- 阿ken的HTML、CSS的学习笔记_表单的应用(笔记七)
热门文章
- web前端知识点太多_初学web前端,学习方法容易走偏,这是为什么?
- java bufferedimage颜色_使用BufferedImage进行渐变色操作
- python22期_python学习第22期
- 食堂就餐刷卡系统源码_智慧食堂重新定义你的食堂管理系统
- 7-5 二分法求多项式单根 (20分)
- Java项目:宿舍寝室维修上报管理系统(java+SpringBoot+FreeMarker+Mysql)
- Java项目:宿舍管理系统(java+jsp+SSM+Spring+mysql)
- 【jdbc】兴唐第三十一节课之修改数据和查询数据(使用自己写的DBUtil)
- Swift 条件编译,编译标记
- iOS8底部弹出日期选择或自定义选择器的方法