AI-线性回归模型(二)

简介: 这篇内容介绍了梯度下降法在机器学习中的应用,特别是在线性回归中的角色。它是一种迭代优化算法,用于找到损失函数最小值的参数。全梯度下降(FGD)使用所有数据计算梯度,适合大数据但计算成本高;随机梯度下降(SGD)随机选取样本,速度快但可能收敛到局部最小值。随机平均梯度下降(SAG)结合两者的优点,提高收敛速度。评估线性回归模型的性能通常使用平均绝对误差、均方误差和均方根误差。文中还展示了波士顿房价预测案例,使用SGDRegressor进行训练,并讨论了学习率的影响。最后提到了如何使用`joblib`库保存和加载模型。

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类进行线性回归训练的过程:


  1. 创建模型实例:通过SGDRegressor(max_iter=1000)创建一个随机平均梯度下降回归模型的实例。这里的max_iter=1000表示模型在训练时最多进行1000次迭代。


  1. 拟合数据:estimator.fit(x_train, y_train)这一行代码的作用是用训练数据集x_train(特征)和y_train(标签)来训练模型。在这个过程中,模型会尝试学习数据之间的关系,以便能够对新的数据进行预测。


  1. 优化过程:SGDRegressor使用随机梯度下降算法来优化平方损失函数,这是线性回归常用的损失函数。通过最小化损失函数,模型可以学习到最佳的权重系数和偏置项,从而得到一个能够较好地预测未知数据的线性模型。


  1. 模型评估:在模型训练完成后,通常会使用测试数据集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]))
相关文章
|
4天前
|
人工智能 自然语言处理 测试技术
巨擘之舞:探索AI大模型的发展历程与特性比较
巨擘之舞:探索AI大模型的发展历程与特性比较
|
8天前
|
机器学习/深度学习 人工智能 算法
AI - 决策树模型
决策树算法起源于古希腊的逻辑推理,20世纪在军事策略研究中首次提出。它通过构建树形模型模拟决策过程,每个节点代表一个属性判断,分支代表可能结果。ID3算法基于信息增益,C4.5则引入信息增益率,解决了ID3偏好多值属性的问题,还能处理缺失值。CART决策树适用于分类和回归任务,使用基尼系数或信息增益来选择特征。在Python的`sklearn`库中,`DecisionTreeClassifier`实现决策树分类,通过参数如`criterion`、`max_depth`等控制模型。
|
8天前
|
机器学习/深度学习 资源调度 算法
AI-逻辑回归模型
逻辑回归是一种用于分类问题的统计模型,尤其适合二分类任务,如预测广告点击率、判断邮件是否为垃圾邮件、评估疾病风险和预测信用卡违约等。模型通过线性方程(logit函数)结合Sigmoid函数将结果映射到0到1区间,表示概率。损失函数通常使用交叉熵,优化时常用梯度下降。评估指标包括ROC曲线和AUC,后者衡量模型整体性能,值越接近1表示性能越好。在不平衡数据集上,可使用`class_weight='balanced'`来调整样本权重。
|
3天前
|
机器学习/深度学习 人工智能 算法
OpenAI发布全新AI视频模型Sora:引领视频创作新纪元
OpenAI发布全新AI视频模型Sora:引领视频创作新纪元
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
模型可解释性在AI和机器学习中至关重要,尤其在金融、医疗和司法等领域。
**模型可解释性在AI和机器学习中至关重要,尤其在金融、医疗和司法等领域。它建立信任、揭示偏见、辅助错误排查和满足法规要求。方法包括使用直观模型、局部解释器(如LIME)、全局工具(如PDP、SHAP)及神经网络和注意力机制的可视化。可解释性结合领域知识和伦理,推动透明智能系统的构建。**
12 0
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
模型可解释性在AI和机器学习中至关重要,尤其在金融、医疗和司法等领域。
【6月更文挑战第28天】模型可解释性在AI和机器学习中至关重要,尤其在金融、医疗和司法等领域。它建立信任、揭示偏见、辅助错误排查和满足法规要求。方法包括使用简单模型、局部解释(如LIME)、全局解释(如PDP、SHAP)、模型可视化和注意力机制。通过跨学科研究,兼顾效率与透明度,打造可信的智能系统。
8 0
|
4天前
|
机器学习/深度学习 人工智能 算法
【让AI写高考AI话题作文】看各大模型的回答
【让AI写高考AI话题作文】看各大模型的回答
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
AI大模型的核心成功因素通常可以归结为三大要素:大数据、大算力和强算法。
AI大模型的核心成功因素通常可以归结为三大要素:大数据、大算力和强算法。
23 0
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
AI大模型的核心
AI大模型的核心
15 0