使用随机梯度下降方法对sklearn里的紫鸢花数据集进行分析

小白学习机器学习

from sklearn.linear_model import SGDRegressor
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, r2_score

//加载数据
iris = load_iris()
X = iris['data']//获得特征值
y = iris['target']//获得标签

//由于随机梯度下降方法对数据集里的数据特征放缩极其敏感,所以在建立模型前需要对数据进行标准化处理,为了消除量纲的影响(比如特征1单位为米,特征2单位为厘米,那么这两个特征的数值大小就会差异很大。)
scaler = StandardScaler()//使用StandardScaler类来进行标准化处理,标准化处理的过程是将每个特征的值减去其均值,然后除以其标准差,以确保所有特征具有零均值和单位方差。这有助于优化算法更快地收敛,并且可以提高模型的性能。
X_scaled = scaler.fit_transform(X)//生成标准化数据

//数据集划分
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2)//测试集占比20%

// 创建SGD回归模型
sgd_reg = SGDRegressor(max_iter=10000, tol=1e-3, random_state=42)//设置迭代次数,容忍度,随机种子,具体解释在最底下
sgd_reg.fit(X_train, y_train)//开始训练

// 模型评估
y_pred = sgd_reg.predict(X_test)//对测试集进行预测
mse = mean_squared_error(y_test, y_pred)//计算均方误差,MSE 的值越小,表示模型的预测性能越好,因为模型的预测值与真实值之间的差异越小
r2 = r2_score(y_test, y_pred)//R² 分数是一种常用的评估回归模型性能的指标,它衡量了模型对因变量方差的解释程度,即模型拟合数据的程度。

//输出模型系数、截距、均方误差和决定系数。

print(f"Coefficients: {sgd_reg.coef_}")
print(f"Intercept: {sgd_reg.intercept_}")
print(f"Mean Squared Error (MSE): {mse}")
print(f"R^2 Score: {r2}")
---------------------------------------------------------------------------------------------------------------------------------

结果:
Coefficients: [ 0.0779373  -0.07982388  0.30055575  0.37830519]
Intercept: [0.99146711]
Mean Squared Error (MSE): 0.051195018801016776
R^2 Score: 0.9006993169807864
根据给出的系数、截距、MSE 和 R² 分数,可以初步判断该回归模型在这组数据上表现良好,能够较好地拟合数据并进行准确的预测

tip:

1、容忍度:

容忍度(tolerance)在机器学习中通常用于指定一个阈值,用于确定算法的收敛条件。在训练迭代过程中,当算法在每次迭代中更新的模型参数的变化量小于容忍度时,算法可以认为已经收敛,即达到了一个满意的模型状态,不再需要继续迭代。

在梯度下降等优化算法中,容忍度通常被用来判断优化过程是否已经足够接近最优解。如果连续两次迭代之间的参数变化量小于容忍度,算法就可以停止迭代,因为此时参数的变化已经足够小,可以认为已经找到了一个接近最优解的解。

2、随机种子

随机种子是一个用来初始化随机数生成器的参数。在计算机程序中,随机数生成器通常不是真正的随机,而是由一个确定的算法生成的伪随机数。随机种子决定了随机数生成器的初始状态,从而影响了生成的随机数序列。

设置了随机种子之后,无论何时运行程序,都会得到相同的随机数序列。这种确定性的行为对于调试和验证模型非常有用,因为它可以确保在相同的条件下获得相同的结果。

在机器学习中,设置随机种子可以确保在拆分数据集、初始化模型参数或其他涉及随机性的情况下,实验的可重复性和可验证性。

在代码示例中,random_state=42 指定了随机种子为42,这意味着每次运行该代码时,都会使用相同的随机种子,从而保证了随机梯度下降算法的可重复性。

通过变化“sgd_reg = SGDRegressor(max_iter=10000, tol=1e-3, random_state=42)”里的参数值可以获得不一样的结果,例如我自己后面改成了这样:

sgd_reg = SGDRegressor(max_iter=100000, tol=1e-99, random_state=20)

对应的结果为:

Coefficients: [-0.0776145  -0.02882377  0.34601813  0.49499509]
Intercept: [0.99572764]
Mean Squared Error (MSE): 0.035306836937342885
R^2 Score: 0.9466843066382407

可以看出来相较于之前,R^2值变大了,MSE(均方误差)变小了,代表通过改变参数大小,结果的精确度有进一步的提升。

严格来说,SGD只是一种优化技术,而不是特定的机器学习模型系列。它只是训练模型的一种方式

Stochastic Gradient Descent 的优点是:

  • 效率。

  • 易于实现(代码调整有很多机会)。

随机梯度下降的缺点包括:

  • SGD 需要许多超参数,例如正则化 参数和迭代次数。

  • SGD 对特征缩放很敏感。

  • 29
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值