线性回归---5.梯度下降法介绍

1.全梯度下降法 FG
定义:
计算训练集所有样本误差,对其在求取平均值作为目标函数
缺点:
计算整个数据集,梯度下降慢
计算量有限
不能在线更新模型,即在运行过程中,不能增加新的样本
容易陷入局部最优解
在这里插入图片描述

2.随机梯度下降算法 SG

定义:
计算单个样本的误差,每次只带入计算一个样本函数的梯度来更新权重,再取下一个样本重复此过程,知道损失函数值停止下降或者函数值小于某个可以容忍的阈值.

缺点:
每次只使用一个样本进行迭代,遇上噪声容易陷入局部最优解

3.小批量梯度下降算法 SG

定义:
是FG 和SG 的折中方案
每从训练集随机抽取小样本集,在小样本机上采用FG迭代更新权重

公式:
在这里插入图片描述
4.随机平均梯度下降法 SAG

算法比较:

(1)FG方法由于它每轮更新都要使用全体数据集,故花费的时间成本最多,内存存储最大。

(2)SAG在训练初期表现不佳,优化速度较慢。这是因为我们常将初始梯度设为0,而SAG每轮梯度更新都结合了上一轮梯度值。

(3)综合考虑迭代次数和运行时间,SG表现性能都很好,能在训练初期快速摆脱初始梯度值,快速将平均损失函数降到很低。但要注意,在使用SG方法时要慎重选择步长,否则容易错过最优解。

(4)mini-batch结合了SG的“胆大”和FG的“心细”,从6幅图像来看,它的表现也正好居于SG和FG二者之间。在目前的机器学习领域,mini-batch是使用最多的梯度下降算法,正是因为它避开了FG运算效率低成本大和SG收敛效果不稳定的缺点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要准备数据集。这里我们使用sklearn中的波士顿房价数据集。代码如下: ```python from sklearn.datasets import load_boston import numpy as np data = load_boston() X = data["data"] y = data["target"] ``` 其中,`X`是13个特征的向量,`y`是相应的房价。下一步是对数据进行归一化处理,保证特征权重的一致性。 ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X = scaler.fit_transform(X) ``` 接下来,我们构建线性回归模型,使用梯度下降法进行训练。具体实现过程如下: ```python class LinearRegression: def __init__(self, alpha=0.01, iterations=1000): self.alpha = alpha # 学习率 self.iterations = iterations # 迭代次数 def fit(self, X, y): m, n = X.shape self.theta = np.zeros(n+1) # 初始化权重 X = np.insert(X, 0, 1, axis=1) # 添加截距项 for i in range(self.iterations): h = np.dot(X, self.theta) # 计算预测值 loss = h - y # 计算误差 gradient = np.dot(X.T, loss) / m # 计算梯度 self.theta -= self.alpha * gradient # 更新权重 def predict(self, X): X = np.insert(X, 0, 1, axis=1) # 添加截距项 return np.dot(X, self.theta) # 返回预测值 ``` 在以上代码中,`fit`方法用来训练模型,`predict`方法用来进行预测。使用该模型对波士顿房价数据进行训练和预测,代码如下: ```python from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) lr = LinearRegression(alpha=0.01, iterations=10000) lr.fit(X_train, y_train) y_pred = lr.predict(X_test) from sklearn.metrics import mean_squared_error print("Mean squared error: %.2f" % mean_squared_error(y_test, y_pred)) ``` 最终,我们可以得到预测结果的均方误差(Mean squared error)。通过不断调整学习率等超参数,就可以得到更好的模型预测效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值