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]))
相关文章
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
算法金 | 秒懂 AI - 深度学习五大模型:RNN、CNN、Transformer、BERT、GPT 简介
**RNN**,1986年提出,用于序列数据,如语言模型和语音识别,但原始模型有梯度消失问题。**LSTM**和**GRU**通过门控解决了此问题。 **CNN**,1989年引入,擅长图像处理,卷积层和池化层提取特征,经典应用包括图像分类和物体检测,如LeNet-5。 **Transformer**,2017年由Google推出,自注意力机制实现并行计算,优化了NLP效率,如机器翻译。 **BERT**,2018年Google的双向预训练模型,通过掩码语言模型改进上下文理解,适用于问答和文本分类。
42 9
|
3天前
|
人工智能 数据挖掘 机器人
同样是人工智能 客户在哪儿AI和GPT等大模型有什么不同
客户在哪儿AI生产的是企业全历史行为数据,同时还针对ToB企业,提供基于企业全历史行为数据的数据分析服务。
|
3天前
|
人工智能 IDE Devops
当「软件研发」遇上 AI 大模型
大模型和软件工具链的结合,使软件研发进入下一个时代。那它第一个落脚点在哪?实际上就是辅助编程,所以我们就开始打造了通义灵码这款产品,它是一个基于代码大模型的的 AI 辅助工具。本文会分为三个部分来分享。第一部分先介绍 AIGC 对软件研发的根本性影响,从宏观上介绍当下的趋势;第二部分将介绍 Copilot 模式,第三部分是未来软件研发 Agent 产品的进展。
|
8天前
|
人工智能 算法
国内AI大模型高考数学成绩超GPT-4o
【7月更文挑战第13天】国内AI大模型高考数学成绩超GPT-4o
|
7天前
|
人工智能 自然语言处理 搜索推荐
大模型时代,如何让AI客服“听懂人话”、“更有温度”?
大模型时代,如何让AI客服“听懂人话”、“更有温度”?
|
8天前
|
机器学习/深度学习 数据采集 人工智能
动手实践:从零开始训练AI模型的全面指南
【7月更文第14天】随着人工智能技术的飞速发展,训练AI模型已成为科研、工程乃至创业领域的热门技能。本文旨在为初学者提供一个清晰、实用的指南,带领大家从零开始,了解并实践如何训练一个人工智能模型。我们将以一个简单的线性回归任务为例,逐步深入,探讨数据预处理、模型构建、训练过程及评估方法,最后展示如何使用Python和深度学习库PyTorch实现这一过程。
48 0
|
13天前
|
人工智能 移动开发 Java
Java智能之Spring AI:5分钟打造智能聊天模型的利器
尽管Python最近成为了编程语言的首选,但是Java在人工智能领域的地位同样不可撼动,得益于强大的Spring框架。随着人工智能技术的快速发展,我们正处于一个创新不断涌现的时代。从智能语音助手到复杂的自然语言处理系统,人工智能已经成为了现代生活和工作中不可或缺的一部分。在这样的背景下,Spring AI 项目迎来了发展的机遇。尽管该项目汲取了Python项目如LangChain和LlamaIndex的灵感,但Spring AI并不是简单的移植。该项目的初衷在于推进生成式人工智能应用程序的发展,使其不再局限于Python开发者。
32 2
|
3天前
|
人工智能 领域建模
AI计算机中的大模型评估体系可能会有何变化
AI计算机中的大模型评估体系可能会有何变化
|
5天前
|
机器学习/深度学习 人工智能 Python
性能调优:提升AI模型准确率的策略
【7月更文第17天】在人工智能的世界里,打造一个预测精准、表现优异的模型就像是烹饪一道美味佳肴,不仅要选对食材(特征),还得掌握火候(超参数调整)和调味技巧(正则化)。今天,我们就来聊聊如何通过《性能调优:提升AI模型准确率的策略》,让我们的AI模型变得更加聪明伶俐。
15 0
|
13天前
|
机器学习/深度学习 人工智能 大数据
AI大模型企业应用实战(24)-什么是zero-shot, one-shot和few-shot Learning?
零样本学习(Zero-Shot Learning)是机器学习中的一种方法,模型在未见过的类别上进行分类,依赖于类别描述来建立训练与测试集间的联系。例如,通过已知的马、老虎和熊猫特征推断斑马。单样本学习(One-Shot Learning)则是在极少量样本(如一个)的情况下进行学习,目标是减少训练数据需求,适用于新类别出现时无需重新训练的情况。小样本学习(Few-Shot Learning)是处理仅有少量类内样本的学习任务。这三者常用于图像分类、语义分割等场景,One-Shot是Few-Shot的特殊情况。

热门文章

最新文章