AI-线性回归模型(一)+https://developer.aliyun.com/article/1544597?spm=a2c6h.13148508.setting.32.2a1e4f0e3aAL8b
梯度下降法
梯度下降法的基本概念是在一个多维空间内,通过迭代的方式逐步逼近最小值点。在每一步迭代中,都沿着当前点的梯度(即损失函数在该点的导数)方向移动一定的步长,以此来减小损失函数的值。这个过程类似于一个人在山上寻找下山的路,每次都选择当前位置最陡峭的方向向下走一步,最终会到达山底。
在机器学习中,特别是在线性回归模型中,梯度下降法通常用来最小化预测值与实际值之间的差距,这个差距通过损失函数来量化。线性回归模型的预测公式可以表示为 y = θ0 + θ1x1 + θ2x2 +... + θnxn,其中 θj 是模型参数,包括偏置项 θ0 和特征权重 θ1, θ2,..., θn。梯度下降法通过迭代更新这些参数,使得损失函数最小化。
全梯度下降算法(FGD)
每次迭代时, 使用全部样本的梯度值,计算训练集所有样本误差,对其求和再取平均值作为目标函数。权重向量沿其梯度相反的方向移动,从而使当前目标函数减少得最多。与随机梯度下降(SGD)和小批量梯度下降(MBGD)不同,FGD在每次迭代时使用整个数据集来计算梯度。
在实际应用中,FGD通常用于模型训练的优化过程。具体步骤包括初始化模型参数、计算损失函数的梯度、更新参数以及重复迭代直到满足停止条件(如梯度趋近于零、达到预设的迭代次数或损失函数变化小于某个阈值)。由于FGD在每次迭代中使用整个数据集,因此它通常能够更准确地逼近全局最小值,但也因为如此,它的计算成本相对较高,尤其在大数据集上运行时可能会非常缓慢。
随机梯度下降算法(SGD)
随机梯度下降(SGD)是机器学习和深度学习中常用的一种优化算法,它的核心在于通过随机选择数据点来计算梯度,并更新模型参数。这种方法特别适用于大规模数据集,因为它可以在不需要遍历整个数据集的情况下进行模型的迭代更新。
from sklearn.linear_model import SGDRegressor
随机平均梯度下降算法(SAG)
随机平均梯度下降(SAG)是一种改进型的随机梯度下降算法,目的是提高收敛速度并减少方差。
- 每次迭代时, 随机选择一个样本的梯度值和以往样本的梯度值的均值
回归问题评估
平均绝对误差
from sklearn.metrics import mean_absolute_error mean_absolute_error(y_test,y_predict)
均方误差
from sklearn.metrics import mean_squared_error mean_squared_error(y_test,y_predict)
均方根误差
- RMSE 越小模型预测约准确
- RMSE 是 MSE 的平方根。某些情况下比MES更有用,由于 MAE 和 RMSE 都是误差的一次方,可以将它们相互比较
案例:波士顿房价预测
from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.metrics import mean_squared_error from sklearn.linear_model import SGDRegressor from sklearn.linear_model import LinearRegression def linear_model1(): data = load_boston() x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, random_state=22) transfer = StandardScaler() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) estimator = LinearRegression() estimator.fit(x_train, y_train) y_predict = estimator.predict(x_test) print("预测值为:\n", y_predict) print("模型中的系数为:\n", estimator.coef_) print("模型中的偏置为:\n", estimator.intercept_) error = mean_squared_error(y_test, y_predict) print("误差为:\n", error) return None
使用SGDRegressor类进行线性回归训练的过程:
- 创建模型实例:通过SGDRegressor(max_iter=1000)创建一个随机平均梯度下降回归模型的实例。这里的max_iter=1000表示模型在训练时最多进行1000次迭代。
- 拟合数据:estimator.fit(x_train, y_train)这一行代码的作用是用训练数据集x_train(特征)和y_train(标签)来训练模型。在这个过程中,模型会尝试学习数据之间的关系,以便能够对新的数据进行预测。
- 优化过程:SGDRegressor使用随机梯度下降算法来优化平方损失函数,这是线性回归常用的损失函数。通过最小化损失函数,模型可以学习到最佳的权重系数和偏置项,从而得到一个能够较好地预测未知数据的线性模型。
- 模型评估:在模型训练完成后,通常会使用测试数据集x_test来评估模型的性能。通过调用estimator.predict(x_test)可以获取模型对测试数据的预测值,进而可以通过比较预测值和真实值来计算模型的准确性和其他性能指标。
def linear_model2(): data = load_boston() x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, random_state=22) transfer = StandardScaler() x_train = transfer.fit_transform(x_train) x_test = transfer.fit_transform(x_test) estimator = SGDRegressor(max_iter=1000) estimator.fit(x_train, y_train) y_predict = estimator.predict(x_test) print("预测值为:\n", y_predict) print("模型中的系数为:\n", estimator.coef_) print("模型中的偏置为:\n", estimator.intercept_) error = mean_squared_error(y_test, y_predict) print("误差为:\n", error) return None
SGDRegressor学习率
SGDRegressor(max_iter=1000,learning_rate="constant",eta0=0.1)
- eta0参数定义了学习率的起始值。在"constant"模式下,这个值在整个训练过程中不会改变。
- 学习率的选择会影响模型的训练速度和最终性能。一个较大的学习率可能会导致快速收敛,但也可能会错过最优解;而一个较小的学习率可能需要更多的迭代次数来达到同样的精度。
- 在其他模式下,如"invscaling",学习率会根据迭代次数进行调整,通常是随着迭代次数的增加而减小,这有助于模型在接近最优解时减少波动,提高收敛精度。
型的保存和加载
sklearn模型的保存和加载API import joblib
- 保存:joblib.dump(estimator, 'test.pkl')
- 加载:estimator = joblib.load('test.pkl')
from sklearn import svm from sklearn import datasets from joblib import dump, load iris = datasets.load_iris() X, y = iris.data, iris.target clf = svm.SVC() clf.fit(X, y) dump(clf, 'model.joblib') clf_from_joblib = load('model.joblib') print(clf_from_joblib.predict(X[0:1]))