AI-线性回归模型

news2024/11/15 11:20:39

线性回归应用场景

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

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

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

线性回归(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.coloradmin.cn/o/1516073.html

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

相关文章

如何选择合适的IP代理,如何为网络爬虫设置代理

目录 前言 1. 代理类型的选择 2. 代理速度 3. 代理稳定性 4. 代理的匿名性 5. 代理的地理位置 总结 前言 在进行网络爬虫任务时,为了避免被目标网站封禁IP或限制访问频率,我们通常会使用代理来隐藏真实的IP地址。选择合适的IP代理对于爬虫的成功…

降维算法之主成分分析 (Principal Component Analysis, PCA)

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 主成分分析(PCA)是一种统计方法,用于减少数据的维度,同时尽量保留原始数据中的方差。PCA在机器学…

【Flask开发实战】项目介绍-防火墙规则查询系统

一、前言 硬件防火墙为常备主用网络安全设备,主要通过网络访问控制方式实现安全防护。 不同厂家防火墙的网络访问控制功能均采用同样的模式操作:防火墙配置若干条防火墙规则,当IP包到来,防火墙根据包的五元组属性(协…

线上会议大厅应该具备哪些功能,线上会议大厅搭建要注意什么

引言: 随着互联网和信息技术的不断发展,线上会议大厅逐渐成为各行各业进行会议和交流的重要工具。但是,真正的线上会议大厅必须具备一定的功能和特性,才能满足用户的需求,提升会议体验。 一.线上会议大厅应…

13.7 Map 接口(血干JAVA系列)

这里写目录标题 13.7.1 Map接口简介13.7.2 Map.Entry接口简介13.7.3 Map接口的常用子类1.新的子类:HashMap2.相关操作实例(1)实例操作1——向集合中增加和取出内容【例13.26】增加和取得内容 (2)实例操作2------------ 判断指定的key或value是否存在【例13.27】判断…

代码随想录day19(2)二叉树:二叉树的最大深度(leetcode104)

题目要求:求出二叉树的最大深度 思路:首先要区分二叉树的高度与深度。二叉树的高度是任一结点到叶子结点的距离,而二叉树的深度指的是任一节点到根节点的距离(从1开始)。所以求高度使用后序遍历(从下往上&…

金蝶云星空对接打通阿里宜搭逐个单据查询接口与新增表单实例接口

金蝶云星空对接打通阿里宜搭逐个单据查询接口与新增表单实例接口 数据源平台:金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践,面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司,提供一个通用的ERP服务平台。…

392.判断子序列

题目:给定字符串s和t,判断s是否为t 的子序列。 字符串的一个子序列是原始字符串删除一些字符而不改变剩余字符相对位置形成的新字符串。 解题思路:s是否是 t 的子序列,因此只要能找到任意一种 s 在 t 中出现的方式,即…

义乌购关键字搜索API接口技术详解与代码示例

义乌购关键字搜索API接口技术详解与代码示例 在电子商务蓬勃发展的今天,义乌购作为国内知名的批发市场平台,为广大商家和消费者提供了丰富的商品资源。为了方便开发者快速接入义乌购平台,实现商品信息的搜索与获取,义乌购开放了关…

ROS 语音交互(三) tts

目录 一、模型选择 二、流程 三、核心代码展示 一、模型选择 科大讯飞超拟人识别 二、流程 超拟⼈合成协议 | 讯飞开放平台文档中心 (xfyun.cn) 三、核心代码展示 # coding: utf-8 import _thread as thread import os import time import base64import base64 import …

react/vue项目刷新页面404的原因以及解决办法

项目 公司官网 背景 1、问题描述:react/vue项目,正常的页面操作跳转,不会出现404的问题,但是一旦刷新,就会出现404报错 2、产生原因:我们打开react/vue打包后生成的dist文件夹,可以看到只有一…

Windows系统下载安装Plex媒体服务结合内网穿透远程访问本地影音文件

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频,已经算是生活中稀松平常的场景了,特别是各…

web项目的搭建

使用Webstorm并创建Next.js文件 1、配置nodejs环境、安装webstorm【配置node.js可以使用nvm去管理nodejs的版本】 2、需要破解webstorm,可能会导致原本的idea失效,注册码过期 3、taobao的npm过期,导致npm is sass执行不成功,需…

python基础篇--学习记录2

1.深浅拷贝 l1 ["张大仙","徐凤年",["李淳刚","邓太阿"]] # 变量名对应的就是内存地址,这里就是将l1的内存地址给了l2 # 现在两个变量指向同一个内存地址,l1变化l2也会变化 l2 l1 现在的需求是l2是l1的拷贝版本,但是两者是完全分割…

基于FPGA的以太网传输图片通过HDMI显示(含源码)

在此之前,已经讲解过HDMI、UDP、DDR3等模块的使用,前文在使用HDMI显示图片时,由于没有讲解DDR3,使用FPGA内部的RAM存储图像数据,因为FPGA片上RAM的资源有限,导致最终显示放大的图片失真严重。 本文通过DDR3…

RabbitMQ 模拟实现【四】:虚拟主机设计

文章目录 虚拟主机设计虚拟主机分析交换机和虚拟主机之间的从属关系核心 API发布消息订阅消息应答消息消费者管理类 虚拟主机设计 虚拟主机分析 类似于 MySQL 的 database,把交换机,队列,绑定,消息…进⾏逻辑上的隔离&#xff0…

外包干了20天,技术退步明显......

先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

v-model 粗略解析

v-model 粗略解析 v-model是什么? 双向数据绑定,可以从data流向页面,也可以从页面流向data通常用于表单收集,v-model 默认绑定 value 值书写形式: v-model:value"" 或 v-model v-model原理是什么&#xf…

HTML5+CSS3+JS小实例:全屏背景切换动画

实例:全屏背景切换动画 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-s…

【论文笔记合集】LSTNet之循环跳跃连接

本文作者&#xff1a; slience_me LSTNet 循环跳跃连接 文章仅作为个人笔记 论文链接 文章原文 LSTNet [25] introduces convolutional neural networks (CNNs) with recurrent-skip connections to capture the short-term and long-term temporal patterns. LSTNet [25]引入…