打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
深度学习
userphoto

2022.09.07 广东

关注

文章目录

  • 深度学习-常用概率分布及其分布图
    • Laplace分布(拉普拉斯分布)
    • 指数分布
    • 高斯分布
      • 一维
      • 多维

深度学习 第三章第9小节

# utils
import numpy as np


# 写一个装饰器,用来将单个点的计算函数,转成一个数组的计算
def for_numpy(index=0, key=None):
    def out(func):
        def inner(*args, **kwargs):
            x = None
            if isinstance(index, int):
                x = args[index]
                
            elif key:
                x = kwargs.get(key)
            
            if x is not None:
                res = []
                for i in x:
#                     print(i, type(i))
                    new_args = list(args)
                    if isinstance(index, int):
                        new_args[index] = i
                        
                    elif key:
                        kwargs[key] = i
                        
                    r = func(*new_args, **kwargs)
                    res.append(r)
                    
                return np.array(res)
            
            else:
                return func(*args, **kwargs)
            
        return inner   
    return out

Laplace分布(拉普拉斯分布)

import math
import matplotlib.pyplot as plt
import numpy as np


@for_numpy(index=0)
def laplace(x, u=0, l=1):
    a = 1 / (2 * l)
    x = -abs(x - u) / l
    return a * math.exp(x)

x = np.arange(-10, 10, 0.5) # numpy.ndarray
y = laplace(x,u=0,l=1)
plt.grid()
plt.plot(x,y)
[<matplotlib.lines.Line2D at 0x20619060280>]

指数分布

@for_numpy()
def exp_dis(x, l=1):
    return l * math.exp(-l * x) if x >=0 else 0

x = np.arange(-5, 10, 0.001)

y = exp_dis(x, l=2)

plt.grid()
plt.plot(x,y, ".r", markersize=1)
plt.show()

高斯分布

一维

@for_numpy()
def gaus_dis(x, u=0, l=1):
    # u 均值,l 方差
    a = math.sqrt(1 / (2 * math.pi * (l **2)))
    x = -(1/2 * (l **2)) * ((x - u) ** 2)
    return a * math.exp(x)

x = np.arange(-10, 10, 0.1)
y = gaus_dis(x)
plt.grid()
plt.plot(x, y)
plt.show()

多维

@for_numpy()
def gaus_dis_multi(x, u, m, n=None):
    n = x.shape[-1]
    a = (2 * math.pi) ** n * np.linalg.det(m)
    a = np.sqrt( 1 / a)
    
    m_ = np.linalg.inv(m) # 求协方差矩阵m的逆
    
    x = (x - u).T.dot(m_).dot(x-u) * (-0.5)

    return a * np.exp(x)

from matplotlib import cm

m = np.array([[1.0, 0.0],[0.0, 1.0]]) * 5 # 协方差矩阵,对称且正定的矩阵
u = np.zeros((2,))  # 均值矢量
print(m)
print()
print(u)
x = np.random.rand(5000,2) * 20 - 10

y = gaus_dis_multi(x, u, m)
# print(y)
print(y.shape)

d_x = []
d_y = []
d_z = []
for (i,j),k in zip(x, y):
    d_x.append(i)
    d_y.append(j)
    d_z.append(k)

d_x = np.array(d_x)
d_y = np.array(d_y)
d_z = np.array(d_z)

fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(projection='3d')
ax.scatter(d_x, d_y,d_z, s=3) # s 控制散点的大小

[[5. 0.]
 [0. 5.]]

[0. 0.]
(5000,)





<mpl_toolkits.mplot3d.art3d.Path3DCollection at 0x2061b291130>

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
详解sigmoid与softmax, 多分类及多标签分类
Python3画的图表,你见过颜值高的没?
神经网络中常见的激活函数
用Python实现机器学习算法——Softmax 回归算法
用matplotlib画等高线图详解
Python小程序--模拟掷骰子
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服