二元正态分布可视化本体

由于近来一直再看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科学可视化实战相关推荐

  1. 揭秘『边缘计算』“搅局”沪深股市的背后

    资本市场对『边缘计算』的追捧,或许已经提早到来了. 这也符合"边缘计算处于Gartner 2018年云计算炒作周期的高峰期"的论调. 3月以来,与边缘计算相关的概念股纷纷遭遇涨停. ...

  2. python科学计算基础教程pdf下载-Python科学计算基础教程_PDF电子书

    因资源下载地址容易失效,请加微信号359049049直接领取,直接发最新下载地址. 前言 ======================================================= ...

  3. 阿里重磅开源首款自研科学计算引擎Mars,揭秘超大规模科学计算

    日前,阿里巴巴正式对外发布了分布式科学计算引擎 Mars 的开源代码地址,开发者们可以在pypi上自主下载安装,或在Github上获取源代码并参与开发. 此前,早在2018年9月的杭州云栖大会上,阿里 ...

  4. python 科学计算设计_用Python做科学计算 高清晰PDF

    用Python做科学计算一书介绍如何用Python开发科学计算的应用程序,除了介绍数值计算之外,我们还将着重介绍如何制作交互式的2D.3D图像:如何设计精巧的程序界面:如何和C语言所编写的高速计算程序 ...

  5. python 科学计算设计_用Python做科学计算 pdf版

    本书将介绍如何用Python开发科学计算的应用程序,除了介绍数值计算之外,我们还将着重介绍如何制作交互式的2D.3D图像:如何设计精巧的程序界面:如何和C语言所编写的高速计算程序结合:如何编写声音.图 ...

  6. matlab与科学计算 王沫然,MATLAB与科学计算(第3版) 王沫然著 电子工业出版社 9787121180521...

    商品描述: 基本信息 书名:MATLAB与科学计算(第3版) 定价:49.80元 作者:王沫然 编著 出版社:电子工业出版社 出版日期:2012-10-01 ISBN:9787121180521 字数 ...

  7. python科学计算基础教程pdf下载-Python科学计算 PDF 第2版

    给大家带来的一篇关于Python相关的电子书资源,介绍了关于Python.科学计算方面的内容,本书是由清华大学出版社出版,格式为PDF,资源大小59.5 MB,张若愚编写,目前豆瓣.亚马逊.当当.京东 ...

  8. python科学计算基础教程pdf下载-python科学计算 第二版 PDF 下载

    相关截图: 资料简介: 本书详细介绍Python科学计算中最常用的扩展库NumPy.SciPy.matplotlib.Pandas.SymPy.TTK.Mayavi.OpenCV.Cython,涉及数 ...

  9. python扩展库用于科学计算的有哪些_数据科学必备的十大 Python 库

    ​Python 已成为当今使用最广泛的编程语言之一,尤其是在数据科学领域. Python 是一种高性能的语言,易于学习和调试,并且具有广泛的库支持.这些库都有自己独特的功能,一些专注于数据挖掘,一些专 ...

最新文章

  1. Static、DynamicResource学习笔记一
  2. xmanager远程登录
  3. 重磅!6.7亿美元!F5喜提开源服务器Nginx
  4. USB OTG ID 检测原理
  5. Centos之帮助命令
  6. web browser 发展史
  7. springboot的起步依赖
  8. [Ext JS6]包-Package
  9. 全栈开发永远成不了高级程序员?!
  10. 常用PAM模块--完全笔记
  11. PHP踩坑:对象的引用
  12. ajax调用一般应用程序,【Web前端】---js调用本地应用程序
  13. Fabric CA 官方用户指南(中文版)
  14. 神经网络的心得体会,神经网络心得体会
  15. 计算机实战项目之 [含论文+辩论PPT+源码等]微信小程序社区疫情防控+后台管理|前后分离VUE[包运行成功
  16. C++ Primer Plus 第九章编程题练习
  17. MySQL增加、修改、删除字段
  18. Linux虚拟机如何修改mysql的数据目录位置
  19. Java相对路径与类路径详解
  20. 阿ken的HTML、CSS的学习笔记_表单的应用(笔记七)

热门文章

  1. web前端知识点太多_初学web前端,学习方法容易走偏,这是为什么?
  2. java bufferedimage颜色_使用BufferedImage进行渐变色操作
  3. python22期_python学习第22期
  4. 食堂就餐刷卡系统源码_智慧食堂重新定义你的食堂管理系统
  5. 7-5 二分法求多项式单根 (20分)
  6. Java项目:宿舍寝室维修上报管理系统(java+SpringBoot+FreeMarker+Mysql)
  7. Java项目:宿舍管理系统(java+jsp+SSM+Spring+mysql)
  8. 【jdbc】兴唐第三十一节课之修改数据和查询数据(使用自己写的DBUtil)
  9. Swift 条件编译,编译标记
  10. iOS8底部弹出日期选择或自定义选择器的方法