首页 > 其他分享 >有监督学习——梯度下降

有监督学习——梯度下降

时间:2023-03-11 15:48:04浏览次数:49  
标签:函数 迭代 梯度 样本 损失 学习 监督 fit

1. 梯度下降

梯度下降(Gradient Descent)是计算机计算能力有限的条件下启用的逐步逼近、迭代求解方法,在理论上不保证下降求得最优解。

e.g. 假设有三维曲面表达函数空间,长(x)、宽(y)轴为子变量,高(z)是因变量,若使用梯度下降法求解因变量最低点的步骤如下:

  1. 任取一点作为起始点。
  2. 查看当前点向哪个方向移动得到最小的z值,并向该方向移动。
  3. 重复上述步骤,直到无法找到更小的z值,此时认为达到最低点。

受起始点和目标函数的约束,有时该法无法找到全局最优点,但有着比OLS更快的求解速度,因此被广泛应用。

根据原理介绍几个梯度下降求解算法概念:

  • 步长(learning rate):每一步梯度下降时向目标方向前行的长度。
  • 假设函数(hypothesis function):由特征产生目标变量的函数,常用\(h()\)表示。
  • 损失函数(loss function):评估任意参数组合的函数,常用\(J()\)表示。

损失函数判断向周围哪个方向移动的原理是计算损失函数的偏导数向量该向量就是损失函数增长最快的方向,而其反方向则是以最小化损失函数为目标时需要前进的方向。

2. 随机梯度下降

随机梯度下降(Stochastic Gradient Descent, SGD),在损失函数计算时不便利所有样本,只采用单一或小批量样本的方差和作为损失值。因此,每次迭代计算速度非常快,通过每次随机选用不同的样本进行迭代达到对整体数据的拟合。

对比普通梯度下降,随机梯度下降的主要区别在于:

  • 迭代次数明显增加,但由于每次计算样本少,总体时间缩短。
  • 由于样本数据存在噪声,每次迭代方向不一定是“正确的”,但由于迭代次数的增加,总体的移动期望任朝着正确方向前进。
  • 能过“不一定正确”的方向越过高点,从而找到最优解。

3. Python中的SGDRegression和SGDClassifier

scikit-learn中提供了随机梯度下降的线性回归器SGDRegressor和线性分类器SGDClassifier,使用它们可学习超大规模样本(样本数>\(10^5\)且特征维度>\(10^5\))。

Python中使用两者

from sklearn.linear_model import SGDRegressor, SGDClassifier
X = [[0, 0], [2, 1], [5, 4]]    # 样本特征
y = [0, 2, 2]                   # 样本目标分类
reg = SGDRegressor(penalty='l2', max_iter=10000)
reg.fit(X, y)
reg.predict([[4,3]])
# array([1.85046249])

reg.coef_       # 查看回归参数
# array([0.30716325, 0.16212611])

reg.intercept_  # 查看截距
# array([0.13543114])

clf = SGDClassifier(penalty='l2', max_iter=100) # 初始化分类器
clf.fit(X, y)
clf.predict([[4, 3]])   # 预测
# array([2])

两者最大的不同在于predict()函数的预测结果,SGDClassifier预测的结果一定是训练数据的目标值之一,SGDRegressor预测值是假设函数直接的计算结果。

而两者的对象初始化参数类似:

Attribute Introduce
penalty 损失函数惩罚项,取值none l1 l2elasticnet,"elasticnet"是"l1"和"l2"的综合
loss 损失函数类型,影响训练速度,取值squared_loss huber epsilon_insensitivesquared_epsilon_insensitive
tol 损失函数变化小于tol时认为获得最优解
max_iter 最大迭代次数,当迭代陷入抖动,无法满足tol时只能利用max_iter作为停止迭代条件
shuffle 完成一轮所有样本迭代后是否洗牌
n_jobs 训练中可利用的CPU数量
learning_rate 步长类型,取值constant optimalinvscaling,前者为固定步长。后两者为动态步长有利于在训练初期跳出局部解,同时后期避免抖动。
eta0 learning_rate 为 constant 或 invscaling 时的初始步长
fit_intercept 是否有截距,取值TrueFalse

3. 增量学习

增量学习(Incremental Learning)是指一种可以边读数据边训练的拟合方法。

在scikit-Learn中提供了partial_fit()函数接口,所有支持增量学习的模型都实现了该函数。SGD的增量学习调用方法举例:

from random import randint
import numpy as np
reg2 = SGDRegressor(loss="squared_error", penalty="l1", tol=1e-15)
X = np.linspace(0, 1, 50)  # 50个x值
Y = X/2 + 0.3 + np.random.normal(0, 0.15, len(X))   # 用y=x/2+0.3加随机数生成样本
X = X.reshape(-1, 1)

for i in range(10000):
    idx = randint(0, len(Y)-1)  # 随机选择一个样本索引
    reg2.partial_fit(X[idx: idx+10], Y[idx: idx+10])  # 用partial_fit()训练

print(reg2.coef_)   # 查看回归参数
# [0.56874507]
print(reg2.intercept_)  # 查看截距
# [0.2769033]

查看模型参数,当前模型应为:

\[y=0.56874507x+0.2769033 \]

与生成样本时的公式相近。

参考文献

[1]刘长龙. 从机器学习到深度学习[M]. 1. 电子工业出版社, 2019.3.

标签:函数,迭代,梯度,样本,损失,学习,监督,fit
From: https://www.cnblogs.com/zh-jp/p/17206157.html

相关文章

  • c#异步编程学习记录之一 async和await
    async放在方法名前面,表示当前方法是一个异步的方法await等待返回结果,一般这个后面会跟着一个比较耗时的操作示例如下:Console.WriteLine("Hello,World!")......
  • 3月9号Android开发学习
    禁用与恢复按钮在实际业务中按钮通常有两种状态,不可用状态和可用状态,它们的区别如下:(1)不可用按钮:按钮不允许点击,即使点击也没有反映,同时按钮文字为灰色(2)可用按钮:......
  • Gin学习笔记--多数据格式返回请求结果
    一个完整的请求包含请求,处理请求和结果返回三个步骤,在服务器端对请求处理完成后,会将结果返回给前端。1.[]byte通过context.Writer.Write方法写入[]byte数据。Writer是gin......
  • 学习日记-Day5
    日期2023-3-10任务列表离散数学第六章【100%】leetcode回溯算法x2、动态规划x4明天计划计网复习TCP、IP、HTTP协议巩固数据库和软工知识综合面问题离......
  • go学习 day207 继承
    编写一个学生考试系统packagemainimport( "fmt")//编写一个学生考试系统typestudentstruct{ Namestring Ageint Scoreint}//将Pupil和Graduate......
  • 学习分享:对极几何、基本矩阵、本质矩阵(持续更新)
    对极几何、基本矩阵、本质矩阵目录对极几何、基本矩阵、本质矩阵1对极约束1.2对极约束的理解2基本矩阵-Fundamental(对极约束的代数表示)2.1基本矩阵的几何推导2.2基......
  • 3月9号Android开发学习
    按钮控件Button按钮控件Button由TextView派生而来,他们之间的区别有:(1)Button拥有默认的按钮背景,而TextView默认无背景(2)Button内部文本默认居中对齐,而TextView的内部......
  • 机器学习日志 踩坑总结
    陆续更新中.飞桨AIStudio平台挺好的,要注意的是这个是linux系统,并且不知道为啥这里面的读入test文件是随机的?写了shuffle=False也没用。。。.很难注意的一个点,网络要注......
  • 入门Android 四大开发组件学习
    一、Activity组件1、Activity相关概念介绍        一个Activity包含了用户能够看到的界面,从而于用户进行交互。一个应用程序中可以有零个或者多个Activity。零个......
  • 3月8号Android开发学习
    相对布局RelativeLayout相对布局的下级视图由其他视图决定,用于确定下级视图位置的参照物分两种:(1)与该视图自身平级的视图(2)该视图的上级视图如果不设定下级视图的参......