机器学习~从入门到精通(三)梯度下降法

这篇具有很好参考价值的文章主要介绍了机器学习~从入门到精通(三)梯度下降法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、梯度下降法

#   梯度下降不是一种算法,是一种最优化方法
#   上节课讲解的梯度下降的案例  是一个简单的一元二次方程
#    最简单的线性回归:只有一个特征的线性回归,有两个theta
#    

二、在多元线性回归中使用梯度下降求解

机器学习~从入门到精通(三)梯度下降法,机器学习,人工智能
机器学习~从入门到精通(三)梯度下降法,机器学习,人工智能
机器学习~从入门到精通(三)梯度下降法,机器学习,人工智能
机器学习~从入门到精通(三)梯度下降法,机器学习,人工智能

三、### R squared error

机器学习~从入门到精通(三)梯度下降法,机器学习,人工智能

使用真实数据来进行梯度下降的过程

机器学习~从入门到精通(三)梯度下降法,机器学习,人工智能
机器学习~从入门到精通(三)梯度下降法,机器学习,人工智能

#  如果特征数多,样本数少,梯度下降法占优
#  如果特征数少,样本数多,梯度下降法的效率会比较低
import numpy as np


def r2_score(y_true, y_predict):
    return 1 - ((np.sum((y_true - y_predict) ** 2) / len(y_true)) / np.var(y_true))


class MyLinearGression:
    def __init__(self):
        self._theta = None  # theta参数
        self.coef_ = None  # 系数
        self.interception_ = None  # 截距

    def fit_gd(self, X_train, y, eta=0.01, n_iters=1e3, epsilon=1e-8):  # 使用梯度下降的方式来训练数据
        def j(theta, X_b, y):
            try:
                return np.sum((y - X_b.dot(theta)) ** 2) / len(X_b)
            except:
                return float('inf')

        def dj(theta, X_b, y):
            # res = np.empty(len(theta))
            # res[0] = np.sum((X_b.dot(theta) - y))
            # for i in range(1, len(theta)):
            #     res[i] = (X_b.dot(theta) - y).dot(X_b[:, i])
            # return res * 2 / len(X_b)
            return X_b.T.dot(X_b.dot(theta) - y)

        def gradient_descent(X_b, y, eta, initial_theta, n_iters=1e3, 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

        # eta = 0.01
        X_b = np.hstack([np.ones(len(X_train)).reshape(-1, 1), X_train])
        initial_theta = np.zeros(X_b.shape[1])
        self._theta = gradient_descent(X_b, y, eta, initial_theta)
        self.interception_ = self._theta[0]
        self.coef_ = self._theta[1:]
        return self

    def __repr__(self):
        return "MyLinearGression()"

    def score(self, X_predict, y_test):
        y_predict = self.predict(X_predict)
        return r2_score(y_test, y_predict)

    def predict(self, X_predict):
        X_b = np.hstack([np.ones(len(X_predict)).reshape(-1, 1), X_predict])
        return X_b.dot(self._theta)

四、总结

knn算法 线性回归 数据的预处理(标准化) 模型好坏的校验

机器学习~从入门到精通(三)梯度下降法,机器学习,人工智能
机器学习~从入门到精通(三)梯度下降法,机器学习,人工智能
机器学习~从入门到精通(三)梯度下降法,机器学习,人工智能

五 梯度下降法

# 梯度下降不是一个机器学习算法,既不是再做监督学习,也不是在做非监督学习,是一种基于搜索的最优化方法
# 作用:最小化一个损失函数
# 梯度上升法:最大化一个效用函数
#  eta叫做学习率,learning rate
#  eta的取值影响我们求得最优解的速度
#  eta如果取值过小,收敛太慢
#  eta取值过大,可能甚至得不到最优解
#  eta他是梯度下降法的一个超参数

#  并不是所有的函数都有唯一的极值点

#  线性回归的损失函数具有唯一的最优解
#  gradient inscent 
import numpy as np
import matplotlib.pyplot as plt
plt_x = np.linspace(-1,6,141)
plt_y = (plt_x-2.5)**2-1
plt.plot(plt_x,plt_y)
plt.show()

机器学习~从入门到精通(三)梯度下降法,机器学习,人工智能

def dj(theta):  
    return 2*(theta-2.5) #  传入theta,求theta点对应的导数

def j(theta):
    return (theta-2.5)**2-1  #  传入theta,获得目标函数的对应值
eta = 0.1
theta =0.0
epsilon = 1e-8
while True:
    gradient = dj(theta)
    last_theta = theta
    theta = theta-gradient*eta 
    if np.abs(j(theta)-j(last_theta))<epsilon:
        break
        
print(theta)
print(dj(theta))
print(j(theta))
eta = 0.1
theta =0.0
epsilon = 1e-8
theta_history = [theta]
while True:
    gradient = dj(theta)
    last_theta = theta
    theta = theta-gradient*eta 
    theta_history.append(theta)
    if np.abs(j(theta)-j(last_theta))<epsilon:
        break
        
print(theta)
print(dj(theta))
print(j(theta))

len(theta_history)

plt.plot(plt_x,plt_y)
plt.plot(theta_history,[(i-2.5)**2-1 for i in theta_history],color='r',marker='+')
plt.show()
def gradient_descent(eta,initial_theta,n_iters=1e3,epsilon = 1e-8):
    theta = initial_theta
    theta_history = [initial_theta]
    i_iter = 1
    def dj(theta):  
        try:
            return 2*(theta-2.5) #  传入theta,求theta点对应的导数
        except:
            return float('inf')
    def j(theta):
        return (theta-2.5)**2-1  #  传入theta,获得目标函数的对应值
    while i_iter<=n_iters:
        gradient = dj(theta)
        last_theta = theta
        theta = theta-gradient*eta 
        theta_history.append(theta)
        if np.abs(j(theta)-j(last_theta))<epsilon:
            break
        i_iter+=1
    return theta_history

def plot_gradient(theta_history):
    plt.plot(plt_x,plt_y)
    plt.plot(theta_history,[(i-2.5)**2-1 for i in theta_history],color='r',marker='+')
    plt.show()
eta = 0.1
theta =0.0
plot_gradient(gradient_descent(eta,theta))
eta = 0.01  #  eta越小,迭代次数越多,耗时越久
theta =0.0
theta_history = gradient_descent(eta,theta)
plot_gradient(theta_history)
len(theta_history)
eta = 0.8   #  说明eta的取值不是特别准确,也可以得到正确的结果
theta =0.0
plot_gradient(gradient_descent(eta,theta))
eta = 1.1  #  说明eta取值太大
theta =0.0
plot_gradient(gradient_descent(eta,theta))

六、sklearn中使用梯度下降法

机器学习~从入门到精通(三)梯度下降法,机器学习,人工智能文章来源地址https://www.toymoban.com/news/detail-801550.html

到了这里,关于机器学习~从入门到精通(三)梯度下降法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【初学人工智能原理】【3】梯度下降和反向传播:能改(上)

    本文教程均来自b站【小白也能听懂的人工智能原理】,感兴趣的可自行到b站观看。 本文【原文】章节来自课程的对白,由于缺少图片可能无法理解,故放到了最后,建议直接看代码(代码放到了前面)。 dataset.py 事实上三种方法的效果图是差不多的,所以只放出两张图 上一

    2024年02月06日
    浏览(29)
  • 【人工智能】— 逻辑回归分类、对数几率、决策边界、似然估计、梯度下降

    考虑二分类问题,其中每个样本由一个特征向量表示。 直观理解:将特征向量 x text{x} x 映射到一个实数 w T x text{w}^Ttext{x} w T x 一个正的值 w T x text{w}^Ttext{x} w T x 表示 x text{x} x 属于正类的可能性较高。 一个负的值 w T x text{w}^Ttext{x} w T x 表示 x text{x} x 属于负类的可能性

    2024年02月09日
    浏览(34)
  • 【人工智能】神经网络、前向传播、反向传播、梯度下降、局部最小值、多层前馈网络、缓解过拟合的策略

    前向传播 是指将输入数据从输入层开始经过一系列的权重矩阵和激活函数的计算后,最终得到输出结果的过程。在前向传播中,神经网络会将每一层的输出作为下一层的输入,直到输出层得到最终的结果。 反向传播 是指在神经网络训练过程中,通过计算损失函数的梯度,将

    2024年02月16日
    浏览(31)
  • 【人工智能】— 神经网络、前向传播、反向传播、梯度下降、局部最小值、多层前馈网络、缓解过拟合的策略

    前向传播和反向传播 都是神经网络训练中常用的重要算法。 前向传播 是指将输入数据从输入层开始经过一系列的权重矩阵和激活函数的计算后,最终得到输出结果的过程。在前向传播中,神经网络会将每一层的输出作为下一层的输入,直到输出层得到最终的结果。 反向传播

    2024年02月10日
    浏览(35)
  • 机器学习_梯度下降

    计算梯度向量其几何意义,就是函数变化的方向,而且是变化最快的方向。对于函数f(x),在点(xo,yo),梯度向量的方向也就是y值增加最快的方向。也就是说,沿着梯度向量的方向 △f(xo),能找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是 -△f(xo)的方向,梯度

    2024年01月19日
    浏览(32)
  • 机器学习梯度下降法笔记

    梯度下降法(Gradient Descent)是一种常用的优化算法,用于在机器学习和深度学习中最小化或最大化一个函数的值。在机器学习中,梯度下降法常用于调整模型的参数,使得模型能够更好地拟合训练数据。 这个优化算法的基本思想是通过迭代的方式,不断调整参数的值,使得

    2024年02月15日
    浏览(30)
  • 机器学习——线性回归、梯度下降

    监督学习 :学习数据带有标签 无监督学习 :没有任何的标签,或者有相同的标签 其他:强化学习、推荐系统等 还是房价预测的例子, 训练集如下: 定义各个变量的含义如下: m——代表训练集中实例的数量 x——代表特征/输入变量 y——代表目标变量/输出变量 (x,y)——代

    2024年02月07日
    浏览(35)
  • 机器学习——梯度下降法

    问:梯度下降法一定能求得最小值??? 答: 在某些情况下,梯度下降法可以找到函数的最小值,但并非总是如此。这取决于函数的形状和梯度下降法的参数设置。如果函数具有多个局部最小值,梯度下降法可能会收敛到其中一个局部最小值,而不是全局最小值。此外,如

    2023年04月08日
    浏览(30)
  • 梯度下降与机器学习的关系

    梯度下降是一种优化算法,常用于机器学习中的参数优化问题。在机器学习中,我们通常需要通过调整模型的参数来最小化损失函数,从而使模型能够更好地拟合数据。梯度下降算法通过不断迭代更新参数,沿着损失函数的负梯度方向移动,逐步接近最优解。 以下是梯度下降

    2024年02月22日
    浏览(34)
  • [机器学习] 1. 梯度下降 Gradient Descent 与随机梯度下降 Stochastic Gradient Descent

    ML Theory 太魔怔了!!!!! 从微积分课上我们学到 对一个 (mathscr C^2) 函数,其二阶泰勒展开的皮亚诺余项形式 [f(bm w\\\') = f(bm w) + langle nabla f(bm w), bm w\\\' - bm wrangle + o(|bm w\\\' - bm w|)] 这说明只要 (bm w\\\') 和 (bm w) 挨得足够接近,我们就可以用 (f(bm w) + langle nabla f(

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包