首页 > 其他分享 >机器学习-线性回归-小批量-梯度下降法-04

机器学习-线性回归-小批量-梯度下降法-04

时间:2023-12-11 20:56:18浏览次数:35  
标签:index Xi 04 梯度 random batch 小批量 np theta

1. 随机梯度下降法

梯度计算的时候 随机抽取一条

import numpy as np

X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

X_b = np.c_[np.ones((100, 1)), X]

n_epochs = 10000
learn_rate = 0.001
m = 100

theta = np.random.randn(2, 1)

for epoch in range(n_epochs):
    random_index = np.random.randint(m)

    Xi = X_b[random_index: random_index + 1]  # 切片 切出一条样本
    yi = y[random_index: random_index + 1]  # 切片 切出一条样本

    gradient = Xi.T.dot(Xi.dot(theta) - yi)  # 梯度公式Xi.T * (Xi*theta-yi)  Xi yi 可以是全部样本 也可以是部分样本
    theta = theta - learn_rate * gradient

print(theta)

2. 销批量梯度下降法

梯度计算的时候 抽取一部分

import numpy as np

X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

X_b = np.c_[np.ones((100, 1)), X]

n_epochs = 10000
learn_rate = 0.001
batch_size = 10
m = 100
num_batch = int(m/10)


theta = np.random.randn(2, 1)

for epoch in range(n_epochs):

    for i in range(num_batch):
        random_index = np.random.randint(m)
        Xi = X_b[random_index: random_index + batch_size]  # 切片 切出batch_size样本
        yi = y[random_index: random_index + batch_size]  # 切片 切出batch_size样本

        gradient = Xi.T.dot(Xi.dot(theta) - yi)  # 梯度公式Xi.T * (Xi*theta-yi)  Xi yi 可以是全部样本 也可以是部分样本
        theta = theta - learn_rate * gradient

print(theta)

3. 优化1

双层 for循环之间将样本打乱
arr = np.arange(len(X_b)) # 生成索引序列
np.random.shuffle(arr) # 将索引打乱
# 相同的打乱的搜索引序列arr去 取值 一一对应
X_b = X_b[arr]
y = y[arr]

import numpy as np

X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

X_b = np.c_[np.ones((100, 1)), X]

n_epochs = 10000
learn_rate = 0.001
batch_size = 10
m = 100
num_batch = int(m/10)


theta = np.random.randn(2, 1)

for epoch in range(n_epochs):

    arr = np.arange(len(X_b))  # 生成索引序列
    np.random.shuffle(arr)  # 将索引打乱
    # 相同的打乱的搜索引序列arr去 取值 一一对应
    X_b = X_b[arr]
    y = y[arr]

    for i in range(num_batch):
        random_index = np.random.randint(m)
        Xi = X_b[random_index: random_index + batch_size]  # 切片 切出batch_size样本
        yi = y[random_index: random_index + batch_size]  # 切片 切出batch_size样本

        gradient = Xi.T.dot(Xi.dot(theta) - yi)  # 梯度公式Xi.T * (Xi*theta-yi)  Xi yi 可以是全部样本 也可以是部分样本
        theta = theta - learn_rate * gradient

print(theta)




4. 优化2

随着迭代的次数增加 学习率 减小
def schedule_learn_rate(t):
return t0/(t+t1)

import numpy as np

X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

X_b = np.c_[np.ones((100, 1)), X]

n_epochs = 10000
learn_rate = 0.001
batch_size = 10
m = 100
num_batch = int(m/10)


theta = np.random.randn(2, 1)


t0, t1 = 5, 500


def schedule_learn_rate(t):
    return t0/(t+t1)


for epoch in range(n_epochs):

    arr = np.arange(len(X_b))  # 生成索引序列
    np.random.shuffle(arr)  # 将索引打乱
    # 相同的打乱的搜索引序列arr去 取值 一一对应
    X_b = X_b[arr]
    y = y[arr]

    for i in range(num_batch):
        random_index = np.random.randint(m)
        Xi = X_b[random_index: random_index + batch_size]  # 切片 切出batch_size样本
        yi = y[random_index: random_index + batch_size]  # 切片 切出batch_size样本

        gradient = Xi.T.dot(Xi.dot(theta) - yi)  # 梯度公式Xi.T * (Xi*theta-yi)  Xi yi 可以是全部样本 也可以是部分样本
        learn_rate = schedule_learn_rate(epoch * m+i)
        theta = theta - learn_rate * gradient

print(theta)




标签:index,Xi,04,梯度,random,batch,小批量,np,theta
From: https://www.cnblogs.com/cavalier-chen/p/17895519.html

相关文章

  • 机器学习-线性回归-梯度下降法-03
    1.梯度下降法梯度:是一个theta与一条样本x组成的映射公式可以看出梯度的计算量主要来自于左边部分所有样本参与--批量梯度下降法随机抽取一条样本参与--随机梯度下降法一小部分样本参与--小批量梯度下降法2.epoch与batchepoch:一次迭代wt-->wt+1......
  • 实验六 周天意 202383290417
    实验六实验内容1.实验任务1验证性实验。输入代码,结合运行结果,观察、理解以下用法:结构体类型的定义结构体数组的输入、输出、元素访问结构体数组作为函数参数结构体类型作为函数返回值类型问题场景描述:学生成绩包括:学号、姓名、课程名称、平时成绩、期中成绩、期末成绩、总评成......
  • Ubuntu20.04 PostgreSQL 14 安装配置记录
    PostgreSQL名称来源ItwasoriginallynamedPOSTGRES,referringtoitsoriginsasasuccessortotheIngresdatabasedevelopedattheUniversityofCalifornia,Berkeley.In1996,theprojectwasrenamedtoPostgreSQLtoreflectitssupportforSQL.PostgreSQL......
  • P5048 [Ynoi2019 模拟赛] 题解
    题意给定\(n\)个数,有\(m\)个询问,每个询问给定\(l\)和\(r\),求出区间\(l\)到\(r\)中的最小众数出现次数,强制在线。数据范围:\(n\le500000\),空间限制:\(62.5MB\)。思路这道题的弱化版是蒲公英,这道题加强的地方在于数据范围。正常的分块求区间众数的空间复杂度是\(O(n......
  • [ABC304Ex] Constrained Topological Sort 题解
    题意给定一张有向图\(G\),有\(n\)个点和\(m\)条边,问是否存在一种拓扑序的排列\(P\)使得\(l_{i}\lep_{i}\ler_{i}\)。思路首先对于一条边\(u\tov\),如果限制满足\(r_{v}\ler_{u}\)或者\(l_{v}\gel_{u}\)的话,那么这个限制其实是不完全正确的。因为最终的序列......
  • 12-梯度计算方法
    1.图像梯度-Sobel算子流程: 2.计算绝对值dx为1水平方向: 3.计算绝对值dy为1竖直方向: 4.求出x和y以后,再进行求和: 5.不建议直接设置dx为1,dy为1会造成图像不饱和: 6.推荐使用,dx和dy分别计算进行梯度计算处理: 7.不推荐使用,直接将dx(水平方向)和dy(竖直方向)同时设置为1......
  • CF1904E Tree Queries
    给定一棵\(n\)个节点的树与\(q\)次询问,每次询问给出一个\(x\)与一个大小为\(k\)的点集\(a\),要求求出在删去了\(a\)中的点后从\(x\)出发的最长简单路径的长度。每次询问独立。\(n,q,\sumk\le2\times10^5\)。一些记号:\(p_i\)表示时间戳\(i\)对应的节点......
  • 「杂题乱刷」CF1904B
    题目链接CF1904BCollectingGame题意简述给你一个由\(n\)个正整数组成的序列\(a\)和一个分数。如果你的分数大于或等于\(a_i\),那么你可以将分数增加\(a_i\),并从序列中删除\(a_i\),你需要求出对于每一个\(a_i\)为你的分数时你可以从这个序列中删除数的最大数量。解题......
  • 1804:错误探测
    原题这道题虽然一次ac了,而且写的很顺,没调就过了,所以记录一下想法撒#include<bits/stdc++.h>usingnamespacestd;intmain(){ints[101][101]={};intx[101],y[101];intn,flag=0,x1,sumx=0,y1,sumy=0;memset(x,0,sizeof(x));memset(y,0,s......
  • Codeforces Round 904 (Div. 2)
    [CodeforcesRound904(Div.2)](https://codeforces.com/contest/1894)A.SimpleDesign暴力就行了1e9跑不满的#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;voidsolve(){intx,k;cin>>x>>......