AI-线性回归模型

线性回归应用场景

  • 房价预测,通过分析房地产市场的历史数据,如房屋大小、位置、建造年份等因素,线性回归可以帮助预测未来房价的走势。

  • 销售额预测,企业可以利用线性回归模型来预测产品的销售额,这通常涉及到产品价格、市场营销预算、季节性因素等变量的分析。

  • 贷款额度预测,金融机构可以使用线性回归来评估客户的信用风险,并据此决定贷款额度。

线性回归(Linear regression) 

 线性回归是一种利用直线方程对变量之间关系进行建模的回归分析方法

  1. 定义:线性回归分析用于研究两个或多个变量之间的关系,其中一个是自变量,另一个是因变量。在这种方法中,目标是找到一个线性方程,即一个直线,该直线能够尽可能好地预测因变量基于自变量的值。
  2. 公式:线性回归模型通常表示为 ( y = wx + b ),其中 ( y ) 是因变量,( x ) 是自变量,( w ) 是权重(斜率),而 ( b ) 是偏差(截距)。这个方程描述了自变量和因变量之间的直线关系。
  3. 最小二乘法:为了找到最佳的 ( w ) 和 ( b ) 值,通常采用最小二乘法。该方法通过最小化实际数据点和回归线之间的平方差来求解这些参数。
  • 期末成绩:0.7×考试成绩+0.3×平时成绩

特征值与目标值之间建立了一个关系,这个关系可以理解为线性模型 。 

sklearn中, 线性回归的API在linear_model模块中 

sklearn.linear_model.LinearRegression()

  • LinearRegression.coef_:回归系数

代码 

from sklearn.linear_model import LinearRegression
x = [[80, 86],
     [82, 80],
     [85, 78],
     [90, 90],
     [86, 82],
     [82, 90],
     [78, 80],
     [92, 94]]

y = [84.2, 80.6, 80.1, 90, 83.2, 87.6, 79.4, 93.4]

estimator = LinearRegression()

estimator.fit(x,y)
print(estimator.coef_)
estimator.predict([[100, 80]])

通过sklearn.linear_model.LinearRegression类创建一个线性回归模型实例。这个类有许多参数可以设置,如fit_intercept(是否计算模型的截距)和normalize(是否对数据进行标准化处理)等。

  1. 训练模型:使用训练集数据调用模型的fit方法来训练模型。
  2. 进行预测:训练好模型后,使用predict方法对测试集或新数据进行预测。
  3. 评估模型:常用的评估指标包括均方误差(MSE)、决定系数(R²)等。这些指标可以帮助我们了解模型的预测性能和数据拟合程度。

损失函数 

用来衡量机器学习模型性能的函数,损失函数可以计算预测值与真实值之间的误差(用一个实数来表示),误差越小说明模型性能越好。

 

  • 误差的大小是坐标系中两点之间的距离,将真实值与预测值相减得到误差。

但是用来衡量回归损失的时候, 不能简单的将每个点的预测误差相加。

平方损失 

回归问题的损失函数 

  1. yi 为第i个训练样本的真实值
  2. h(xi) 为第i个训练样本特征值组合预测函数又称最小二乘法
import numpy as np
from sklearn.linear_model import LinearRegression

if __name__ == '__main__':

    
    x = np.mat([[80, 86],
                [82, 80],
                [85, 78],
                [90, 90],
                [86, 82],
                [82, 90],
                [78, 80],
                [92, 94]])

    # 目标值
    y = np.mat([84.2, 80.6, 80.1, 90, 83.2, 87.6, 79.4, 93.4]).transpose()

    
    ones_array = np.ones([len(x), 1])
    x = np.hstack([ones_array, x])

    
    w = (x.transpose() * x) ** -1 * x.transpose() * y
    print('[%.1f %.1f %.1f]' % (w[0][0], w[1][0], w[2][0]))

    # 使用 LinearRegression 
    estimator = LinearRegression(fit_intercept=True)
    estimator.fit(x, y)
    print(estimator.coef_[0])

    # 输出结果
    # [0.0 0.3 0.7]
    # [0.  0.3 0.7]

梯度下降法

梯度下降法的基本概念是在一个多维空间内,通过迭代的方式逐步逼近最小值点。在每一步迭代中,都沿着当前点的梯度(即损失函数在该点的导数)方向移动一定的步长,以此来减小损失函数的值。这个过程类似于一个人在山上寻找下山的路,每次都选择当前位置最陡峭的方向向下走一步,最终会到达山底。

在机器学习中,特别是在线性回归模型中,梯度下降法通常用来最小化预测值与实际值之间的差距,这个差距通过损失函数来量化。线性回归模型的预测公式可以表示为 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次迭代。
  2. 拟合数据estimator.fit(x_train, y_train)这一行代码的作用是用训练数据集x_train(特征)和y_train(标签)来训练模型。在这个过程中,模型会尝试学习数据之间的关系,以便能够对新的数据进行预测。
  3. 优化过程SGDRegressor使用随机梯度下降算法来优化平方损失函数,这是线性回归常用的损失函数。通过最小化损失函数,模型可以学习到最佳的权重系数和偏置项,从而得到一个能够较好地预测未知数据的线性模型。
  4. 模型评估:在模型训练完成后,通常会使用测试数据集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]))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/455969.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

爆料!游戏圈内幕揭秘(下)

游戏产业规模日益扩大,影响力不断提高,已成为全球最活跃和潜力巨大的经济板块之一。作为一项新兴产业,游戏开发行业前景广阔,机遇与挑战并存。对即将出社会的同学来说,要想在这个竞争激烈又日新月异的行业中找到属于自…

C++第四弹---类与对象(一)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 类与对象 1、面向过程和面向对象初步认识 2、类的引入 3、类的定义 4、类的访问限定符及封装 4.1、访问限定符 4.2、封装 5、类的作用域 6、类的…

WebP格式图像:起源、优势、兼容性及在线压缩方法

关于作者: 还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas&#xff0…

第四百回 channel

文章目录 1. 知识回顾2. 示例代码3. 经验总结 我们在上一章回中介绍了MethodChannel的使用方法,本章回中将介绍EventChannel的使用方法.闲话休提,让我们一起Talk Flutter吧。 1. 知识回顾 我们在前面章回中介绍了通道的概念和作用,并且提到了…

数字生活的未来:探索Web3的全新世界

随着科技的飞速发展,我们正迈向一个数字化的未来。而在这个数字化的时代,Web3技术的崛起正引领着我们进入一个全新的世界。本文将深入探讨Web3技术的特点以及它给我们带来的全新体验。 1. 去中心化的特点 Web3的去中心化是其最显著的特点之一&#xff0…

若依Cloud项目配合nacos进行多环境profile的配置

1、前言 最近做的用若依改造的一个项目要把里面的配置挪到nacos的配置中心,之前用过apollo做配置中心,nacos用的很少,而且是自己从头做的那种,而自己想要实现的效果是本地启动和到测试,预发,生产环境启动的…

如何在Linux Archcraft中配置SSH服务并结合内网穿透实现远程连接

文章目录 1. 本地SSH连接测试2. Archcraft安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接小结 5. 固定SSH公网地址6. SSH固定地址连接 Archcraft是一个基于Arch Linux的Linux发行版,它使用最简主义的窗口管理器而不是功能齐全的桌面环境来提供图形化用户界面。 C…

标准砂轮加工麻花钻或者铣刀螺旋槽齿形

螺旋槽与砂轮的空间位置运动关系可用下图表示,螺旋槽的形成靠工件绕轴线的旋转以及砂轮沿轴线的移动来完成的,以下坐标系可以清楚的描述二者之间的运动关系: 砂轮的形状如下: 经过坐标变换和下面这个重要的公式来计算工件的齿形…

JAVA初阶数据结构(链表)练习(这些可以作为java包中的方法)

这里的每一个题大家都要仔细完成,这些题目每个我都至少思考了两个小时左右(沉重心,慢慢来) 1.反向链表的实现(对链表进行翻转)(力扣有) (1)图示 &#xff0…

MADQN:多代理合作强化学习

处理单一任务是强化学习的基础,它的目标是在不确定的环境中采取最佳行动,产生相对于任务的最大长期回报。但是在多代理强化学习中,因为存在多个代理,所以代理之间的关系可以是合作的,也可以是对抗,或者两者…

java组合模式揭秘:如何构建可扩展的树形结构

组合模式(Composite Pattern)是一种结构型设计模式,它允许将对象组合成树形结构以表示整体/部分层次结构。组合模式使得客户端可以统一对待单个对象和组合对象,从而使得客户端可以处理更复杂的结构。 组合模式的主要组成部分包括&…

C#构造函数

C#中的构造函数是一种特殊的方法,用于创建和初始化类的对象。构造函数的名称与类的名称相同,并且没有返回类型。 在C#中,构造函数有以下几种类型: 默认构造函数:如果在类中没有定义构造函数,系统将自动提供…

基于java+springboot+vue实现的小区物业管理系统(文末源码+Lw+ppt)23-34

摘 要 随着互联网时代的发展,传统的线下管理技术已无法高效、便捷的管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,在人们生活环境要求不断提高的前提下,小区物业管理系统建设也逐渐进入了…

2001-2022年上市公司数字化转型程度指数测算数据(含原始数据+测算代码+计算结果)(无形资产衡量)

2001-2022年上市公司数字化转型程度指数测算数据(含原始数据测算代码计算结果) 1、时间:2001-2022年 2、指标:证券代码、证券简称、统计截止日期、是否发生ST或*ST或PT、、是否发生暂停上市、行业代码、行业名称、stkcd、year、…

【Python】成功解决NameError: name ‘plt‘ is not defined

【Python】成功解决NameError: name ‘plt’ is not defined 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您…

【PHP安全】PHP伪协议

PHP伪协议: file:// #访问本地文件系统http:// #访问HTTPs网址ftp:// #访问ftp URLphp:// #访问输入输出流zlib:// #压缩流data:// #数据(RFC 2397)ssh2:// #security shell2expect:// #处理交互式的流glob:// #查找匹配的文件路径phar:// #P…

【MySQL性能优化】- 一文了解MVCC机制

MySQL理解MVCC 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,欢迎指正&#xff…

打卡学习kubernetes——kubernetes架构原理

接上一篇的内容,除了核心组件,还有一些推荐的Add-ons: kube-dns 负责为整个集群提供DNS服务Ingress Controller 为服务提供外网入口Heapster 提供资源监控(没用过这个,但是用过grafana,很方便&#xf…

5.Python从入门到精通—Python 运算符

5.Python从入门到精通—Python 运算符 Python 运算符算术运算符比较(关系)运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符运算符优先级 Python 运算符 Python语言支持以下类型的运算符: 算术运算符比较(关系)运算符赋…

基于YOLOv5的火灾检测系统

💡💡💡本文主要内容:详细介绍了火灾检测整个过程,从数据集到训练模型到结果可视化分析。 博主简介 AI小怪兽,YOLO骨灰级玩家,1)YOLOv5、v7、v8优化创新,轻松涨点和模型轻量化&#…
最新文章