Ng深度学习--绘制指数加权平均数

吴恩达老师在深度学习课程第二课2.3节指数加权平均中讲了,指数加权平均的近视值可看作是最近(1/(1-B))天气温的平均值,故而绘制指数加权平均和近视值的图像,给出直观感觉;另外给出对指数加权平均修正偏差后的图像和最普通的气温平均值的图像。

导入相关模块:

import numpy as np
import matplotlib.pyplot as plt
#将图表嵌入Notebook
%matplotlib inline
#使用inline模式的图表在Notebook中会自动关闭,使用以下魔法命令可以在多个单元格内操作同一幅图表
%config InlineBackend.close_figures = False
plt.rcParams['figure.dpi'] = 200 #设置分辨率

创建数据:

X = np.arange(1, 366, 1) #365天,np.arange分配在[1,366)步长为1的等差数列
y1 = np.linspace(20, 38, 200) #20°-38°,np.linspace在[20,38)区间分配内200个数的等差数列
y2 = np.linspace(38, 0, 165) #38°-0°
Y = np.append(y1, y2) + np.random.normal(3, 2, (365,)) #将两个数组拼接起来,并加上一个标准差为3,方差为2的正态分布的数组

绘制气温的散点图(默认蓝色):

plt.scatter(X, Y,s = 1)
plt.show()

在这里插入图片描述

指数加权平均:

# B属于[0,1]
def exponentlyWeightAverages(Y,B = 0.9):
    '''指数加权平均'''
    # 超参数 B = 0.9, y = 0
    y = 0
    newY = []
    for theta in Y:
        y = B * y + (1 - B) * theta
        newY.append(y)
    return newY

绘制指数加权平均的曲线图(红色):

newY = exponentlyWeightAverages(Y)
plt.plot(X, newY, c = 'r', linewidth = 2)
plt.show()

在这里插入图片描述

可以看到前面几天的数据有很大的bias(偏差):

print(Y[0])
print(newY[0])
#结果是
#22.64442208583385
#2.264442208583384

刚好相差10倍,下面进行偏差修正。

偏差修正:

def biasCorrection(Y, B = 0.9):
    '''偏差修正'''
    c = 0
    newC = []
    for i in range(Y.shape[0]):
        c = B * c + (1 - B) * Y[i]
        bc = c / (1 - B**(i+1))
        newC.append(bc)
    return newC

绘制偏差修正后的曲线图(黑色):

newC = biasCorrection(Y)
plt.plot(X, newC, c = 'black', linewidth = 1)
plt.show()

在这里插入图片描述

指数加权平均的近视值:

def approximation(Y, B = 0.9):
    '''指数加权平均的近视值可看作是最近(1/(1-B))天的平均值'''
    num = int(1/(1-B))
    k = 0
    newK = []
    for i in range(Y.shape[0]):
        sum = 0
        for j in range(num):
            if i>= j:
                sum = sum + Y[i-j]
        if i < num:
            sum /= (i+1)
        else:
            sum /= num
        newK.append(sum)
    return newK

绘制近视值的曲线图(绿色):

newK = approximation(Y)
plt.plot(X, newK, c = 'g', linewidth = 2)
plt.show()

在这里插入图片描述

平均值:

def averages(Y):
    '''前面所有天气温的平均值'''
    m = 0
    newM = []
    for i in range(Y.shape[0]):
        m = (m * i + Y[i]) / (i+1)
        newM.append(m)
    return newM

绘制平均值的曲线图(黄色):

newM = averages(Y)
plt.plot(X, newM, c = 'y', linewidth = 1)
plt.show()

在这里插入图片描述

参考文章

通俗理解指数加权平均
Python绘制指数加权平均线

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值