最速下降法——实例(有点小错误,帮忙修改一下)

import numpy as np
#import matplotlib.pyplot as plt

def f_function(x):
    data=0.5*x+1.8+np.random.uniform(0.01,0.02,(1,1)) #注意是这样调用
    return  data
###生成带噪音的数据的公式
def use_function():
    x=np.mat(np.linspace(0,100,num=1000))
    y=np.mat(f_function(x))
    return  x,y
##生成噪音
def mse_function(w_current1,b_current1,x,y):
    x=np.mat(x)
    y=np.mat(y)
    ##损失函数
    loss_f=np.mat(np.zeros((1,1000)))
    for i in range(1000):
        x_s=x[0,i]
        real=y[0,i]
        cla=w_current1*x_s+b_current1 #算出每个x对应的y
        loss_f[0,i]=(real-cla)*(real-cla) #这是损失函数
    ##计算出来后,要计算

    loss_real=np.sum(np.array(loss_f))*0.001  #求此时的均误差

    return loss_real,w_current1,b_current1

##计算均方误差
def xiajiang_fun(x_old,y_old,w,b,learnrate1,learnrate2):
    ##对均方误差公式求w,b的导数
    x_old=np.mat(x_old)
    y_old=np.mat(y_old)
    new_w=0
    new_b=0 #每次迭代都进行初始化,因为这只是用来求梯度的
    #new_w=np.mat(np.zeros((1,1000)))
    #new_b=np.mat(np.zeros((1,1000)))
    for i in range(1000):
        x=x_old[0,i]
        y=y_old[0,i]
        new_w  += -2*x*(y-(w*x+b))*0.001
        new_b  += -2*(y-(w*x+b))  *0.001
    #new_w_sum=np.sum(np.array(new_w))    #这里的加法是公式 缘由 前面的loss_real 里面有加法
    #new_b_sum=np.sum(np.array(new_b))   #这里的加法是公式 缘由 全面的loss_real 里面有加法
    ##更新完权重。使用最速下降法
    w_new= (w-learnrate1*new_w)
    b_new= 3.6*(w-learnrate2*new_b)
    return  w_new,b_new
###更新最速法更新权重

###主函数
##生成噪音数据
x,y=use_function()
##初始化w,b
w=13
b=14

iteration=100 #设置迭代次数
for i in range(iteration):
    loss_function_reault,w_old,b_old =  mse_function(w,b,x,y)   #计算一次均方误差
    if loss_function_reault <0.01:
        print('ok',i ,'break')
        break
    else:
        w_new1,b_new1=xiajiang_fun(x,y,w_old,b_old,0.0001,0.0001)   #生成新的w,b,通过调试,得到学习率为,0001最佳
        w=w_new1
        b=b_new1 #生成之后再次更新


print(w,b)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值