【机器学习 - 9】:关于梯度的调试

文章介绍了如何调试梯度,通过在参数theta的两侧取微小变化来近似求导数。同时,展示了使用numpy实现梯度下降算法的过程,该算法用于优化模型参数。文章以随机生成的数据为例,应用了梯度调试函数dj_debug和梯度下降函数gradient_descent。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

关于梯度的调试


调试方法,即求theta的方法不同,对于每一个theta,在其左右两边各取一个极小的值,然后两个值相减,求导数。
在这里插入图片描述

import numpy as np

X = np.random.random(size=(1000,10))
X_b = np.hstack([np.ones((len(X),1)), X])

true_theta = np.arange(1, 12, dtype='float')
y = X_b.dot(true_theta) + np.random.normal(size=len(X))

def j(theta,X_b,y):
    try:
        return np.sum((X_b.dot(theta)-y)**2)/len(X_b)
    except:
        return float('inf')

def dj_math(theta,X_b,y):
    return X_b.T.dot(X_b.dot(theta)-y)*2./len(X_b)

def dj_debug(theta,X_b,y):
    res=np.empty(len(theta))
    epsilon = 0.01
    for i in range(len(theta)):
        theta1 = theta.copy()
        theta2 = theta.copy()
        theta1[i] +=epsilon
        theta2[i] -=epsilon
        res[i] = (j(theta1,X_b,y)-j(theta2,X_b,y))/(2*epsilon)
    return res


def gradient_descent(dj,X_b,y,eta,initial_theta,n_iters=1e4,epsilon=1e-8):
    theta = initial_theta
    i_iter = 1
    while i_iter<n_iters:
        last_theta = theta
        theta =theta- eta*dj(theta,X_b,y)
        if abs(j(theta,X_b,y)-j(last_theta,X_b,y))<epsilon:
            break
        i_iter+=1
    return theta

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街 三 仔

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值