python-使用LinearRegression进行简单线性拟合(线性回归)

2023-05-16

一元线性拟合

现有两组数据,求y=a*x+c的系数


X =[12.46, 0.25, 5.22, 11.3, 6.81, 4.59, 0.66, 14.53, 15.49, 14.43,
    2.19, 1.35, 10.02, 12.93, 5.93, 2.92, 12.81, 4.88, 13.11, 5.8]
Y =[29.01, 4.7, 22.33, 24.99, 18.85, 14.89, 10.58, 36.84, 42.36, 39.73,
    11.92, 7.45, 22.9, 36.62, 16.04, 16.56, 31.55, 20.04, 35.26, 23.59]  
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import numpy as np

if __name__ == '__main__':
    X =[12.46, 0.25, 5.22, 11.3, 6.81, 4.59, 0.66, 14.53, 15.49, 14.43,
        2.19, 1.35, 10.02, 12.93, 5.93, 2.92, 12.81, 4.88, 13.11, 5.8]
    Y =[29.01, 4.7, 22.33, 24.99, 18.85, 14.89, 10.58, 36.84, 42.36, 39.73,
        11.92, 7.45, 22.9, 36.62, 16.04, 16.56, 31.55, 20.04, 35.26, 23.59]

    #转换成numpy的ndarray数据格式,n行1列,LinearRegression需要列格式数据,如下:
    X_train = np.array(X).reshape((len(X), 1))
    Y_train = np.array(Y).reshape((len(Y), 1))
    # 转换后数据格式如下
    # X_train = [[12.46], [0.25], [5.22], [11.3], [6.81], [4.59], [0.66], [14.53], [15.49], [14.43], [2.19], [1.35],
    #            [10.02], [12.93], [5.93], [2.92], [12.81], [4.88], [13.11], [5.8]]
    # Y_train = [[29.01], [4.7], [22.33], [24.99], [18.85], [14.89], [10.58], [36.84], [42.36], [39.73], [11.92], [7.45],
    #            [22.9], [36.62], [16.04], [16.56], [31.55], [20.04], [35.26], [23.59]]


    #新建一个线性回归模型,并把数据放进去对模型进行训练
    lineModel = LinearRegression()
    lineModel.fit(X_train, Y_train)

    #用训练后的模型,进行预测
    Y_predict = lineModel.predict(X_train)

    #coef_是系数,intercept_是截距
    a1 = lineModel.coef_[0][0]
    b = lineModel.intercept_[0]
    print("y=%.4f*x+%.4f" % (a1,b))

    #对回归模型进行评分,这里简单使用训练集进行评分,实际很多时候用其他的测试集进行评分
    print("得分", lineModel.score(X_train, Y_train))

    #简单画图显示
    plt.scatter(X, Y, c="blue")
    plt.plot(X_train,Y_predict, c="red")
    plt.show()

结果:

y=2.0532*x+7.1234
得分 0.9149096589144883

 

多元线性回归

这里随机创建X1,X2,X3,Y四个数组,使Y=2*X1-3*X2+X3+8。然后加入一些干扰噪声,再尝试做线性回归。

from sklearn.linear_model import LinearRegression
import numpy as np
import random

if __name__ == '__main__':
    # 随机创建X1,X2,X3,Y。使Y=2*X1-3*X2+X3+8
    X1 = [random.randint(0,100) for i in range(0, 50)]
    X2 = [random.randint(0,50) for i in range(0, 50)]
    X3 = [random.randint(0, 25) for i in range(0, 50)]
    Y =[2*x1-3*x2+x3+8 for x1,x2,x3 in zip(X1,X2,X3)]

    # 组合X1,X2成n行2列数据
    X_train = np.array(X1+X2+X3).reshape((len(X1), 3), order="F")
    Y_train = np.array(Y).reshape((len(Y), 1))

    # 加入噪声干扰
    noise = np.random.randn(50, 1)
    noise = noise - np.mean(noise)

    Y_train = Y_train+noise

    #新建一个线性回归模型,并把数据放进去对模型进行训练
    lineModel = LinearRegression()
    lineModel.fit(X_train, Y_train)

    #用训练后的模型,进行预测
    Y_predict = lineModel.predict(X_train)

    #coef_是系数,intercept_是截距
    a_arr = lineModel.coef_[0]
    b = lineModel.intercept_[0]
    f=""
    for i in range(0,len(a_arr)):
        ai=a_arr[i]
        if ai>=0:
            ai = "+%.4f" %(ai)
        else:
            ai = "%.4f" % (ai)
        f = f+"%s*x%s"%(ai, str(i+1))
    f="y=%s+%.4f" % (f[1:],b)

    print("拟合方程",f)
    #对回归模型进行评分,这里简单使用训练集进行评分,实际很多时候用其他的测试集进行评分
    print("得分", lineModel.score(X_train, Y_train))

结果:

拟合方程 y=1.9972*x1-3.0115*x2+1.0597*x3+7.7271
得分 0.9997880910740103

结果与预先设定的Y=2*X1-3*X2+X3+8相近,这里采用随机产生样本,每次运行结果不尽相同。

由于是多维,不方便画图展示。

 

 

author:蓝何忠

email:lanhezhong@163.com

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python-使用LinearRegression进行简单线性拟合(线性回归) 的相关文章

  • STM32实用应用系列:串口接收不定长数据(HAL库 UART + DMA)

    目录 一 串口接收不定长数据的实现思路 二 具体实现代码 1 USART 的配置 2 DMA的配置 xff08 放在 HAL UART MspInit 中 xff09 3 USART 中断处理函数 一 串口接收不定长数据的实现思路 在串口通
  • 使用Ventoy制作启动盘

    目录 一 Ventoy介绍 二 Ventoy的使用 三 Ventoy中MBR分区形式与GPT分区形式对比 四 使用自定义的EFI的步骤 Ventoy下载地址 xff1a https www ventoy net cn index html
  • DRAM知识整理系列(三):部分时序参数整理

    目录 一 时序参数整理 第一时序 xff1a 1 tCL CAS Lantency Control 2 tRCD RAS to CAS Delay 3 tRP Row Precharge Timing 4 tRAS RAS Active T
  • ROS移动机器人开发——硬件引脚

    我们使用的32开发板为冰达机器人官方的开发板 xff0c 类型为STM32RCT6 32章节的目的为 xff0c 将官方所给源码转化为 官方标准库函数来进行使用 需求提出 xff1a 电源 1 3 3V 200ma供电 2 输入 9 12
  • UDS知识整理(一):UDS简介与UDS要求规范简介

    本文参考自 xff1a ISO DIS 14229 1 一 汽车诊断与OSI模型对比 注 xff1a OSI全称 xff1a Open System Interconnection Reference Model xff0c 即开放式系统互
  • Renesas:配置中断的常规流程——使用C语言方式配置中断向量表(二)

    Renesas xff1a 配置中断的常规流程 不吃鱼的猫丿的博客 CSDN博客 在前面的文章讲到了Renesas的常规中断配置流程 xff0c 当需要添加新的中断时 xff0c 每次都需要到boot asm中添加中断服务的函数名与中断服务
  • 工作经验总结:MCU寄存器库的开发

    目录 一 寄存器的结构体定义 二 寄存器的地址的宏定义 在进行MCU开发的时候 xff0c 可能会遇到需要自己手写寄存器库的情况 xff0c 以下整理了一些相关的示例以及注意事项 一 寄存器的结构体定义 注意 xff1a 在定义寄存器结构体
  • 汽车标定知识整理(三):CCP报文可选命令介绍

    目录 一 可选命令 CRO命令报文的可选命令表 xff1a 二 可选命令帧格式介绍 1 GET SEED 获取被请求资源的种子 xff08 0x12 xff09 2 UNLOCK 解锁保护 xff08 0x13 xff09 3 SET S
  • LIN资料整理(一):LIN入门简介

    目录 一 LIN是什么 1 LIN简介 2 LIN的适用场景 3 LIN协议版本 4 LIN的主从机节点 主从机任务与LIN总线特点 一 LIN是什么 1 LIN简介 LIN 是Local Interconnect Network 的缩写
  • LIN资料整理(二): LIN协议层

    目录 一 LIN帧的结构 1 帧头的帧结构 xff08 1 xff09 同步间隔段 xff08 2 xff09 同步段 xff08 3 xff09 受保护ID段 2 应答的帧结构 xff08 1 xff09 数据段 xff08 2 xff0
  • Altium designer学习(一)AD画板流程总结

    AD画板 xff0c 初学者总是容易犯上一个手忙脚乱的错误 一会儿去找封装 xff0c 一会儿又去忙原理图 这样都是很影响效率的事情 xff0c 要解决这个问题 xff0c 那就是画板得确定下来一个合理的流程 因此 xff0c 在第一篇就强
  • 网络编程(UDP/TCP)

    1 网络模型 数据从网络中一个终端上的应用程序传送到另外一个终端的应用程序 xff0c 中间需要经历很多过程 xff0c 有多方参与对数据进行层层封装 转发 我们把这个流程在逻辑上进行分层 xff0c 每一层根据本层的规章制度 协议 各司其
  • postman使用教程

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 市场上有很多优秀的 xff0c 完善的接口测试工具 xff0c 比如SoapUI xff0c Postman xff0c JMeter yapi等 xff0c
  • 请求头和请求体

    1 请求行 请求方式 请求url 请求协议 版本 GET login html HTTP 1 1 请求方式 xff1a HTTP协议有7中请求方式 xff0c 常用的有2种 GET xff1a 1 请求参数在请求行中 xff0c 在url后
  • spring security 自定义多种方式登录授权(普通用户、管理员、第三方登录)

    1 自定义token xff0c 继承 AbstractAuthenticationToken 目的 xff1a 主要用于包装区别过滤条件 第2步用到 span class token keyword public span span cl
  • STM32F30X USART串口初始化顺序

    void InitUart void GPIO InitTypeDef GPIO InitStructure if 1 USART USED 61 61 USART1 RCC AHBPeriphClockCmd RCC AHBPeriph
  • java学习记录(一)

    前言 因为在大创项目中要用到一点点java 所以想利用这段时间 快速的入门一下简单的Java 试图在项目中不拖后腿 ps 小白自学 如有错误还请指正 偶然间看到编程的学习要点 在此记录一下 明确学习目标 锁定一门语言版本 努力学习 认真研读
  • C++ 之HTTP post请求

    一 建立会话 xff08 Session xff09 对象 xff1a CInternetSession mysession 二 连接到Http服务器 xff1a CHttpConnection myconn 61 mysession Ge
  • C语言Printf函数深入解析

    Printf这个函数让大家又爱又恨 xff0c 第一次接触c语言编程 xff0c 基本都是调用printf打印 Hellow World xff01 但当真正深入使用编程后 xff0c 才发现printf并不是一个简单的函数 尤其是从事嵌入
  • SQL笔试经典50题及答案解析

    转 SQL笔试经典50题及答案解析 建表语句 create table Student sid varchar 10 sname varchar 10 sage datetime ssex nvarchar 10 insert into S

随机推荐

  • redis高可用集群搭建

    redis高可用集群搭建 恶魔的复活的博客 CSDN博客 redis集群搭建
  • 80027efe

    微软更新了签名算法 xff0c 从 2019 年开始 xff0c 开始弃用SHA 1 xff0c 逐步改为SHA 2加密算法 导致windows upate更新报80072EFE错误 此方法同样适用于Windows 7系统 建议手动下载安装
  • ts 动态加载import()

    import 函数 简介 import命令会被 JavaScript 引擎静态分析 xff0c 先于模块内的其他模块执行 xff08 叫做 连接 更合适 xff09 所以 xff0c 下面的代码会报错 报错if x 61 61 61 2 i
  • Ubuntu 文件文件夹查看权限和设置权限

    ubuntu下查看权限的命令为 xff1a ls l filename ls ld folder ubuntu下设置权限的命令为 xff1a 一共有10位数 其中 xff1a 最前面那个 代表的是类型 中间那三个 rw 代表的是所有者 xf
  • mysql不能启动:Unit mysql.service failed to load: No such file or directory的解决办法

    Failed to issue method call Unit MySQL service failed to load No such file or directory的解决办法 作者 xff1a chszs xff0c 转载需注明
  • round()函数的用法

    python中round 函数的用法 round a b a 需要进行四舍五入的数字 b 指定的位数 xff0c 按此位数进行四舍五入 注解 如果 b 大于 0 xff0c 则四舍五入到指定的小数位 如果 b 等于 0 xff0c 则四舍五
  • linux mysql 查看默认端口号和修改端口号

    如何查看mysql 默认端口号和修改端口号 2015 03 19 17 42 18 1 登录mysql root 64 test mysql u root p Enter password 2 使用命令show global variabl
  • netty 二进制简单通信

    环境 xff1a netty版本4 0 36Final jdk7 服务端 xff1a 1 App java package com mind core import com mind core net websocket server Ne
  • js 字符串转换成数字的三种方法, 取float型小数点后两位数的方法

    在js读取文本框或者其它表单数据的时候获得的值是字符串类型的 例如两个文本框a和b 如果获得a的value值为11 b的value值为9 那么a value要小于b value 因为他们都是字符串形式的 在网上找了一下js字符串转数字的文章
  • 二次贝塞尔曲线长度

    二次贝塞尔曲线通常以如下方式构建 xff0c 给定二维平面上的固定点P0 P1 P2 xff0c 用B t 表示该条曲线 用一个动画来演示 xff0c 可以更加清楚的表明这条曲线的构建过程 如果t变量本身线形变化的话 xff0c 这条贝塞尔
  • 损坏的主控文件表,CHKDSK被终止.如何恢复数据

    这种情况是分区结构出现异常 引起的分区错误 单击右键属性看到的是RAW格式 移动硬盘的话 xff0c 很大程度是因为强拔之类的操作 xff0c 也可能是坏道 病毒 xff0c 硬盘本身质量问题引起的 因为系统读取移动硬盘信息困难 xff0c
  • Microsoft SQL Server 2008 R2 官方简体中文正式版下载(附激活序列号密钥)

    微软官方发布的Microsoft SQL Server 2008 R2 简体中文完整版 基于SQL Server 2008提供可靠高效的智能数据平台构建而成 xff0c SQL Server 2008 R2 提供了大量新改进 xff0c 可
  • 不重装系统将系统移动到固态硬盘,并修改为C盘

    如今很多人升级电脑都会考虑换块固态硬盘 xff0c 如果重装系统 xff0c 又要重新安装一系列的软件 xff0c 拷贝一系列的数据 这里教大家怎样直接用固态硬盘代替C盘 xff0c 并且不会影响数据和软件 1 首先是在原电脑上加装新固态硬
  • python进行t检验示例

    t检验主要是针对正态总体均值的假设检验 xff0c 即检验样本的均值与某个值的差异 xff0c 或者两个样本的均值是否有差异等 其不需要事先知道总体的方差 xff0c 并且在少量样本情况下也可以进行检验 python进行t检验使用scipy
  • python-正态分布查表应用(scipy.stats.norm)

    1 公式 xff1a 正态分布概率密度公式 xff1a 可通过转换为标准正态分布 2 概率密度 xff1a 标准正态分布在某个点的概率密度可用scipy stats norm pdf计算 xff0c 下面模拟计算 5 5的概率密度 from
  • python-介绍泊松分布(poisson分布)

    一 泊松分布问题 xff1a 假设我每天接到骚扰电话的次数服从泊松分布 xff0c 并且经统计平均每天我会接到20个骚扰电话 请问 xff1a 1 我明天接到15个骚扰电话的概率 xff1f 2 我明天接到24个骚扰电话以下的概率 xff0
  • Word文档编辑技巧

    1 如何让附录显示在目录里 依次点击菜单栏的视图 工具栏 大纲 xff0c 打开大纲工具栏 选中 目录 附录 参考文献 等标题 xff0c 点击大纲工具栏的大纲级别的下拉选项 xff0c 选择 1级 xff0c 此时就完成了对 目录 等标题
  • 谈windows开发学习过程

    MFC作为一个C 43 43 类库 xff0c 而且MFC是Windows SDK的封装 为了开发windows应用更方便 xff0c 让程序员开发应用不需要过多在意细节 xff0c 专注功能上的开发 xff0c 所以推出MFC 但是实际开
  • python-指数分布介绍(scipy.stats.expon)

    一 指数分布问题 xff1a 有一种品牌的路由器 xff0c 据厂家统计知该路由器平均寿命是50000小时 xff0c 现在有2个问题 xff1a 1 去年我买了一个这样的路由器 xff0c 使用到现在已经8000小时了一点问题都没有 xf
  • python-使用LinearRegression进行简单线性拟合(线性回归)

    一元线性拟合 现有两组数据 xff0c 求y 61 a x 43 c的系数 X 61 12 46 0 25 5 22 11 3 6 81 4 59 0 66 14 53 15 49 14 43 2 19 1 35 10 02 12 93 5