《机器学习》一元、多元线性回归的实现 No.4

一、一元线性回归实现

先直接看完整代码:

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegressiondate = pd.read_csv('data.csv') #导入数据plt.scatter(date['广告投入'],date['销售额'])  # 用散点图展示数据
plt.show()corr = date.corr()   # 计算相关系数,判断数据和结果直接是否存在因果关系lr = LinearRegression()   # 建立训练模型,全部使用默认参数
x = date[['广告投入']]  # 训练集
y = date[['销售额']]  # 标签项lr.fit(x,y)  # 训练数据集result = lr.predict(x)  # 对训练集进行测试
score = lr.score(x,y)   # 得到测试结果的评分,即正确率a = round(lr.intercept_[0],2)  # 打印截距,四舍五入保留2为小数,intercept为ndarry(1,)的一维数组,只有一个元素
b = round(lr.coef_[0][0],2)  # 打印斜率,四舍五入保留两位小数,因为coef为ndarry(1,1)的二维数组类型,形状为一行一列print("线性回归模型为:y = {}x + {}".format(b,a))predict = lr.predict([[40],[45],[50]])  # 输入数据,进行预测
print(predict)

其运行结果为:

 date.csv文件内容为:

           

    

二、 线性回归模型类分析

        class sklearn.linear model.LinearRegression( fit_intercept = True,normalize = False,copy_X = True,n_jobs = None )

 

1、参

  • fit_intercept是否有截距,默认为True。如果为False则直线过原点
  • normalize是否将数据归一化,默认为False。如果为True,则在拟合之前将输入数据进行标准化,即将样本的每个特征减去其均值并除以其标准差,以确保每个特征具有零均值和单位方差
  • copy_X是否复制X,默认为True。如果为False,则直接对原数据进行覆盖,及经过中心化、标准化后,是否把新数据覆盖到原数据上
  • n_jobs计算式设置的任务个数,如果选择-1则代表使用所有的CPU,这一参数的对于目标个数>1且足够大规模的问题有加速作用 

 

2、返回值Attributes

调试模式下:

        coef_ : 对于线性回归问题计算得到的feature(特征)的系数,如果输入的是多目标问题,则返回一个二维数组,如果是单目标问题,返回一维数组,即如果对于一元线性回归y = β0 + β1x + ε,这里的corf_返回β1的值,如果是多元的,则返回多个β的值,二维数组类型返回

        intercept_ :代表线性回归模型的截距,即当所有特征的取值都为0时,模型预测的输出值。对于多维特征的线性回归模型,intercept_是一个标量。y = β0 + β1x + ε 中β0 的值

3、方法

        fit(x,y) :对训练集x和y进行训练

        predict(x):使用训练得到的估计器对输入为x的集合进行预测,得到预测值

        score(x,y):预测效果评分

4、相关系数

        又叫皮尔逊相关系数,指的是特征变量(自变量)与因变量之间的线性关系强度的度量。具体来说,相关系数衡量的是自变量与因变量之间的线性相关程度,即自变量的变化对因变量的影响程度。一般用r表示,计算方式如下所示:

Cov(X,Y)表示X与Y的协方差Var[X] 为X的方差,Var[Y] 为Y的方差

| r | >= 0.8时,表示高度相关,即存在高度因果关系

0.5<= | r | < 0.8 时,表示中度相关

0.3<= | r | < 0.5 时,表示低度相关

| r | < 0.3 时,表示不相关

此时可以通过调试模式看到上述代码中corr 所计算的相关系数

5、拟合优度:

其计算公式为:

SSR :回归平方和, SST:离差平方和

1、反应回归直线的拟合程度

2、取值范围为[0,1]

3、R方越接近1,说明拟合效果越好,越接近0,说明拟合效果越越差

4、R方的平方根是相关系数

三、多元线性回归实现

1、有下列一份文件 "多元线性回归.csv"

2、调整R方

在上述一元线性回归模型中,使用R方来判断数据与模型的拟合程度,那么在多元的线性回归中,就不能使用R方来判断了,需要使用调整R方来判断,

R方的公式为:

调整R方公式为:

n代表样本数据的观测数量,p代表模型中自变量的数量。

3、假设检验

步骤:

假设事件H0是真的,然后判别小概率事件是否发生,如果发生,就拒绝H0事件,接受H1事件,如果没有发生,就接收H0事件,即小概率事件不发生是极大概率事件,所以上述 假设合理,但是如果小概率事件发生了,此时拒绝了H0就相当于拒绝了真实情况,那么就犯了第一类错误,即拒真,拒真概率就是我们定的α,即显著性水平,一般为0.05,

第一类错误:P(拒绝H0|H0真) = α

第二类错误:P(接受H0|H0假) = β

1)F检验(线性关系检验)

检验自变量x与因变量y之间的线性关系是否显著,或者说,他们之间能否用一个线性模型来表示。(对整个方程显著性的检验)

2)T检验(回归系数检验)

通过对回归系数β与0的检验,看其是否有显著性差异,来判断回归系数是否显著。(检验系数是否显著)

4、数据标准化

1)0~1标准化

         将原始数据自变量的每一个值减去最小值再除以最大值减最小值

2)z标准化

        将原始数据自变量的每一个数值减去自变量平均值再除以标准差

5、实现代码

import pandas as pd
from sklearn.linear_model import LinearRegressiondata = pd.read_csv("多元线性回归.csv",encoding='gbk',engine='python')  # 导入数据,编码方式为gbk模式,engine表示用Python去读取信息corr = data[["体重",'年龄','血压收缩']].corr()  # 计算相关系数lr = LinearRegression()  # 建立模型
x = data[["体重",'年龄']]  # 设置训练集
y = data[['血压收缩']]   # 设置标签lr.fit(x,y)  # 训练数据score = lr.score(x,y)  # 查看评分,正确率,计算方法叫 调整R方predict_1 = lr.predict([[40,60]])  # 输入数据进行测试
predict_2 = lr.predict([[50,80],[90,50]])a = lr.coef_  # 表示出B的值
b = lr.intercept_  # 表示截距的值
print("线性回归模型为:y = {:.2f}x1 + {:.2f}x2 + {:.2f}".format(a[0][0],a[0][1],b[0]))

其运行结果为:

其对应的截距和斜率的值为:

四、案例

有下列代码数据,存放在文件 案例.csv 中

对其进行训练,得到本年固定资产投资额

import pandas as pd
from sklearn.linear_model import LinearRegressiondata = pd.read_excel("案例.xlsx")
# 计算相关系数
corr = data[["分行编号",'不良贷款','各项贷款余额','本年累计应收贷款','贷款项目个数','本年固定资产投资额']].corr()
# 建立模型
lr = LinearRegression()
x = data[['不良贷款','各项贷款余额','本年累计应收贷款','贷款项目个数']]
y = data[['本年固定资产投资额']]
# 训练数据
lr.fit(x,y)score = lr.score(x,y)  # 查看评分,正确率,计算方法叫 调整R方
predict_1 = lr.predict([[1.5,52,12,15]])  # 输入数据进行测试
predict_2 = lr.predict([[10,80,8,9],[15,90,50,11]])a = lr.coef_  # 表示出B的值
b = lr.intercept_  # 表示截距的值
print("线性回归模型为:y = {:.2f}x1 + {:.2f}x2 + {:.2f}x3+ {:.2f}x4 + {:.2f}".format(a[0][0],a[0][1],a[0][2],a[0][3],b[0]))

其打印结果为:

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

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

相关文章

实训第二十八天(haproxy与利用python实现mysql主从的读写分离)

1、练习 [rootnat ~]# ipvsadm -d -t 192.168.10.101:3306 -r 10.0.0.22:3306 #删除真实主机 nat: [rootnat ~]# ifconfig ens33: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.10 netmask 255.255.255.0 broadcast 10.0.0.25…

【JVM】深入理解类加载机制(二)

深入理解类加载机制 HSDB工具的使用 Hotspot Debugger(HSDB):JDK原生自带 以Windows系统为例&#xff0c;jdk8的环境&#xff0c;在jdk的lib目录下&#xff0c;启动之前&#xff0c;你需要确保你进入的lib目录和你当前的JAVA_HOME配置的JDK是相同的&#xff0c;否则可能会出现…

2.1 文件内容差异对比方法

2.1 文件内容差异对比方法 文件内容差异对比方法2.1.1 两个字符串的差异对比2.1.2 生成美观的HTML格式文档2.1.3 对比nginx 配置文件差异代码封装 文件内容差异对比方法 介绍如何通过difflib模块实现文件内容差异对比。difflib作为Python的标准库模块无需安装&#xff0c;作用…

2024年运营技术与网络安全态势研究报告:遭遇多次网络威胁的比例暴增

随着 OT 组织不断在其业务环境中集成各种数字工具和技术&#xff0c;它们面临的安全挑战也日益变得愈加复杂和多样化。正如 NIST 指出&#xff0c; “虽然安全解决方案旨在解决典型 IT系统中的一些问题&#xff0c;但将这些相同的解决方案引入不同的 OT 环境时&#xff0c;必须…

ruoyi-vue-pro项目新建模块的接口都报404错误

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 新建模块之后,该模块后端的请求都是返回404,如图所示: 2. 原理分析 抛开这个项目,对于路径请求不成功,返回404 主要的步骤如下: 检查路由配置: 确保在路由配置文件中添加了新模块的路由 例如,在Spring Boot中,这…

vue3+ts 前端word文档下载文件时不预览直接下载方法(支持 doc / excel / ppt / pdf 等)

前端word文档下载文件时不预览直接下载方法支持 doc / excel / ppt / pdf 等 根据需要&#xff0c;要实现一个下载文档的需要 最简单的方法就是使用a标签 如果是相同域可以直接下载&#xff0c;但如果是不同域的&#xff0c;就会先打开一个预览页&#xff0c;在预览页再点下载…

StarRocks Lakehouse 快速入门——Apache Paimon

StarRocks Lakehouse 快速入门指南为您提供了湖仓技术概览&#xff0c;旨在帮助您迅速掌握其核心特性、独特优势和应用场景。本指南将指导您如何高效地利用 StarRocks 构建解决方案。文章末尾&#xff0c;我们集合了来自阿里云、饿了么、喜马拉雅和同程旅行等行业领导者在 Star…

Eureka原理与实践:构建高效的微服务架构

Eureka原理与实践&#xff1a;构建高效的微服务架构 Eureka的核心原理Eureka Server&#xff1a;服务注册中心Eureka Client&#xff1a;服务提供者与服务消费者 Eureka的实践应用集成Eureka到Spring Cloud项目中创建Eureka Server创建Eureka Client&#xff08;服务提供者&…

什么叫日志门面

日志门面&#xff0c;是门面模式的一个典型的应用。 门面模式&#xff08;Facade Pattern&#xff09;&#xff0c;也称之为外观模式&#xff0c;其核心为&#xff1a;外部与一个子系统的通信必须通过一个统一的外观对象进行&#xff0c;使得子系统更易于使用。 就像Log4j、Lo…

stm32智能颜色送餐小车(ESP8266WIFI模块、APP制作、物联网模型建立、MQTTFX)

大家好啊&#xff0c;我是情谊&#xff0c;今天我们来介绍一下我最近设计的stm32产品&#xff0c;我们在今年七月份的时候参加了光电设计大赛&#xff0c;我们小队使用的就是stm32的智能送餐小车&#xff0c;虽然止步于省赛&#xff0c;但是还是一次成长的经验吧&#xff0c;那…

Linux系统-通用权限管理

目录 一、文件类型 二、通用权限 1.文件的常规权限 权限类型 壹.对于文件&#xff1a; 贰.对于目录&#xff1a; 查看和修改权限 说明&#xff1a; 举例&#xff1a; 字母表示法 数字表示法 2.文件的访问控制列表&#xff08;FACL File access control list&#…

菱形继承和虚继承

菱形继承&#xff08;Diamond Inheritance&#xff09;是指在多重继承的情况下&#xff0c;某个类继承自两个类&#xff0c;而这两个类又都继承自同一个基类的情况。 在这个结构中&#xff0c;D 直接从 A 继承了 A 的所有特性&#xff0c;但通过 B 和 C 继承&#xff0c;这会导…

eNSP 华为三层交换机配置DHCP

华为三层交换机配置DHCP 华为DHCP原理&#xff1a;&#xff08;思科四个都是广播包&#xff09; 1、客户端广播发送DHCP Discover包。用于发现当前局域网中的DHCP服务器。 2、DHCP服务器单播发送DHCP Offer包给客户端。携带分配给客户端的IP地址。 3、客户端广播发送DHCP Resqe…

索引的数据结构

1.举例引出索引: 1.1.什么是索引&#xff1a; 1.2.数据查找分析&#xff1a; a.数据查找&#xff1a; 1.如上图所示&#xff0c;数据库没有索引的情况下&#xff0c;数据分布在硬盘不同的位置上面&#xff0c;读取数据时&#xff0c;摆臂需要前后摆动查找数据&#xff0c;这…

Java方法04:命令行传递参数

本节视频链接&#xff1a;https://www.bilibili.com/video/BV12J41137hu?p48&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p48&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 在Java中&#xff0c;‌命令行传递参数…

PyTorch--深度学习

onux部署功能 cpu运行时间 3. 自动求导 求导结果为&#xff1a;2 1 1

考试题型宏观分析之公共营养师三级

背景 第一遍知识学习之后&#xff0c;打印《2023.10.14公共营养师三级真题》进行第一次摸底&#xff0c;首要目标在于通过摸底&#xff0c;对于考试题型进行宏观分析和了解&#xff0c;其次&#xff0c;对于后续的学习进行有的放矢 直至2024-08-18&#xff0c;对于上述资料的一…

Apache-JMeter压测工具教程

下载安装 《JMeter官网下载》 下载完成后&#xff0c;找个文件夹进行解压 配置环境变量 JAVA_HOME&#xff08;如果是JAVA8还需要配置CLASSPATH&#xff09;、JMETER_HOME JMETER_HOME修改bin目录下的jmeter.properties文件编码为UTF-8 5.6.3这个版本encoding已经默认为UT…

肿瘤细胞表皮生长因子EGFR靶向肽;GE11;YHWYGYTPQNVI

【GE11简介】 GE11肽是从噬菌体展示肽库中筛选出来的一种有效的EGFR配体&#xff0c;它是一种十二肽&#xff0c;可以高亲和力和选择性地与EGFR特异性结合。GE11已广泛用于EGFR阳性肿瘤的放射治疗、基因治疗和化疗药物的诊断和靶向递送。 【中文名称】肿瘤细胞表皮生长因子肽…

理解Tomcat的IP绑定与访问控制

在使用Spring Boot开发应用时&#xff0c;内置的Tomcat容器提供了灵活的网络配置选项。特别是&#xff0c;当计算机上有多个网卡时&#xff0c;如何配置server.address属性显得尤为重要。本文将详细探讨不同IP配置对Tomcat服务访问的影响。 多网卡环境下的IP配置 假设你的计算…