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 LinearRegressionif __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() * yprint('[%.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 LinearRegressiondef 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.mzph.cn/news/744074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科研三维模型高精度三维扫描服务3d逆向测绘建模工业产品抄数设计

三维抄数技术在科研三维模型的应用已经日益广泛,其高精度、高效率的特点使得科研工作者能够更快速、更准确地获取和分析数据。这一技术的核心在于通过专业的三维扫描仪对实物进行高精度测量,再将这些数据转化为三维数字模型,为后续的研究提供…

QT c++ 双精度数拆分和组合 Tool

本文描述QT c的双精度数拆分和合并,即双精度浮点数拆为四个16位无符号整数以及将四个16位无符号整数组合为双精度浮点数。 开发平台:win10QT6.2.4 MSVC2019 64 bit 在本文的最好列出了代码和可执行文件打包下载链接(可直接使用)…

Mysql 死锁案例1-记录锁读写冲突

死锁复现 CREATE TABLE t (id int(11) NOT NULL,c int(11) DEFAULT NULL,d int(11) DEFAULT NULL,PRIMARY KEY (id),KEY c (c) ) ENGINEInnoDB DEFAULT CHARSETutf8;/*Data for the table t */insert into t(id,c,d) values (0,0,0),(5,5,5),(10,10,10) 事务1事务2T1 START…

linux 模拟shell

💓博主CSDN主页:麻辣韭菜-CSDN博客💓   ⏩专栏分类:http://t.csdnimg.cn/G90eI⏪   🚚代码仓库:Linux: Linux日常代码练习🚚   🌹关注我🫵带你学习更多Linux知识   🔝&#x1f5…

BUU [FBCTF2019]RCEService

BUU [FBCTF2019]RCEService 开题&#xff0c;要求以json格式输入命令。 无任何信息泄露&#xff0c;源码如下&#xff1a; <?phpputenv(PATH/home/rceservice/jail);if (isset($_REQUEST[cmd])) {$json $_REQUEST[cmd];if (!is_string($json)) {echo Hacking attempt de…

阿里云第一次面试记录

java多态&#xff1f; 多态表示一个对象具有多种的状态&#xff0c;具体表现为父类的引用指向子类的实例 Fu f Zi z(); 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口&#xff0c;使用不同的实例而执行不同操作 特点&#xff1a; 对象类型和引用类型…

Css基础——精灵图(sprites)和字体图标

1、精灵图 1.1、精灵图的由来 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁地接收和发送 请求图片&#xff0c;造成服务器请求压力过大&#xff0c;这将大大降低页面的加载速度。 因此&#xff0c;为了有效地减…

搭建Hadoop集群

一、前言 虚拟机&#xff08;Virtual Machine&#xff09;指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。 虚拟机是在一些开发测试工作中常常需要用到的功能&#xff0c;常见的虚拟机…

一文掌握mysql中的查询语句

目录 1. 聚合查询1.1 聚合函数1.2 GROUP BY子句1.3 HAVING 2. 联合查询2.1 内连接2.2 外连接2.3 自连接2.4 子查询2.5 合并查询 1. 聚合查询 1.1 聚合函数 常见的统计总数、计算平局值等操作&#xff0c;可以使用聚合函数来实现&#xff0c;常见的聚合函数有&#xff1a; 函…

【构建部署_Docker介绍与安装】

构建部署_Docker介绍与安装 构建部署_Docker介绍与安装Docker介绍Docker安装CentOS安装DockerCompose 构建部署_Docker介绍与安装 Docker介绍 Docker 是一个基于go语言开发的开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#x…

QT 如何防止 QTextEdit 自动滚动到最下方

在往QTextEdit里面append字符串时&#xff0c;如果超出其高度&#xff0c;默认会自动滚动到QTextEdit最下方。但是有些场景可能想从文本最开始的地方展示&#xff0c;那么就需要禁止自动滚动。 我们可以在append之后&#xff0c;添加如下代码&#xff1a; //设置编辑框的光标位…

Java_9最大连续1的个数

最大连续1的个数 给定一个二进制数组 nums &#xff0c; 计算其中最大连续 1 的个数。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,0,1,1,1] 输出&#xff1a;3 解释&#xff1a;开头的两位和最后的三位都是连续 1 &#xff0c;所以最大连续 1 的个数是 3. 示例 2: 输入…

NBlog整合OSS图库

NBlog部署维护流程记录&#xff08;持续更新&#xff09;&#xff1a;https://blog.csdn.net/qq_43349112/article/details/136129806 由于项目是fork的&#xff0c;所以我本身并不清楚哪里使用了图床&#xff0c;因此下面就是我熟悉项目期间边做边调整的。 目前已经调整的功能…

CVE-2019-5782:kArgumentsLengthType 设置偏小导致优化阶段可以错误的去除 CheckBound 节点

文章目录 环境搭建漏洞分析笔者初分析笔者再分析漏洞触发源码分析 漏洞利用总结 环境搭建 sudo apt install pythongit reset --hard b474b3102bd4a95eafcdb68e0e44656046132bc9 export DEPOT_TOOLS_UPDATE0 gclient sync -D// debug version tools/dev/v8gen.py x64.debug ni…

FreeRTOS操作系统学习——软件定时器

软件定时器介绍 软件定时器允许设置一段时间&#xff0c;当设置的时间到达之后就执行指定的功能函数&#xff0c;被定时器调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期&#xff0c;简而言之&#xff0c;当定时器的定时周期到了以后就…

C语言--字符串面试题

字符串是由若干字符组成的序列。由于字符串在编程时使用的频率非常高,为了优化,很多语言都对字符串做了特殊的规定。下面分别讨论C/C字符串的特性。 C/C中每个字符串都以字符"0作为结尾,这样我们就能很方便地找到字符串的最后尾部。但由于这个特点&#xff0c;每个字符串中…

Android 15 首个开发者预览版到来

作者 / 工程副总裁 Dave Burke Android 15 的首个开发者预览版现已发布&#xff0c;以便各位开发者能与我们通力协作&#xff0c;打造更优秀的 Android 平台。 在 Android 15 中&#xff0c;我们继续致力于打造一个既能提升工作效率&#xff0c;又能提供全新功能的平台。这些新…

【Java - 框架 - Mybatis】(02) SpringBoot整合Mybatis操作Mysql - 快速上手

“SpringBoot"整合"Mybatis"操作"Mysql” - 快速上手&#xff1b; 环境 Java版本"1.8.0_202"&#xff1b;Spring Boot版本"2.5.9"&#xff1b;Windows 11 专业版_22621.2428&#xff1b;IntelliJ IDEA 2021.1.3(Ultimate Edition)&a…

2.案例、鼠标时间类型、事件对象参数

案例 注册事件 <!-- //disabled默认情况用户不能点击 --><input type"button" value"我已阅读用户协议(5)" disabled><script>// 分析&#xff1a;// 1.修改标签中的文字内容// 2.定时器// 3.修改标签的disabled属性// 4.清除定时器// …

Day15 面向对象进阶——接Day14

Day15 面向对象进阶——接Day14 文章目录 Day15 面向对象进阶——接Day14一、访问修饰符二、Object三、深入String的equals()方法四、final 一、访问修饰符 1、含义&#xff1a;修饰类、方法、属性&#xff0c;定义使用的范围 2、经验&#xff1a; 2.1.属性一般使用private修…