sklearn多项式回归和线性回归

什么是线性回归?

回归分析是一种统计学方法,用于研究自变量和因变量之间的关系。它是一种建立关系模型的方法,可以帮助我们预测和解释变量之间的相互作用。
回归分析通常用于预测一个或多个因变量的值,这些因变量的值是由一个或多个自变量的值所决定的。回归分析的目标是建立一个数学模型来描述因变量和自变量之间的关系。
这个数学模型可以是线性或非线性的,可以包含一个或多个自变量。通过回归分析,我们可以使用已知的自变量和因变量值来计算模型参数,然后使用这些参数来预测因变量值。
回归分析被广泛应用于各种领域,包括经济学、社会学、医学、环境科学和工程学等。它可以用于研究许多不同的问题,如房价预测、销售预测、股票价格预测、人口增长预测等等。线性回归需要满足的条件:
(1)自变量和因变量在理论上有因果关系;(2)因变量为连续型变量;(3)各自变量与因变量之间存有线性关系;(4)残差要满足正态性、独立性、方差齐性。(5)多个自变量不存在多重共线性其中,线性(Linear)、正态性(Normal)、独立性(independence)、方差齐性(Equal Variance),俗称LINE,是线性回归分析的四大基本前提条件。

 sklearn的线性回归:

  • 准备工作
  • from sklearn.linear_model import LinearRegression
  • 创建模型: linear =LinearRegression()
  • 拟合模型: linear.fit(x,y)
  • 模型的预测值: linear.predict(输入数据)
  • 线性回归模型的权重linear.coef_和偏置linear.intercept_

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

 

参数

含义

fit_intercept:布尔值,可不填,默认为True是否计算此模型的截距。如果设置为False,则不会计算截距

normalize:布尔值,可不填,默认为False,当fit_intercept设置为False时,将忽略此参数。如果为True,则特征矩阵X在进入回归之前将会被减去均值(中心化)并除以L2范式(缩放)。如果你希望进行标准化,请在fit数据之前用preprocessing模块中的标准化专用类StandardScaler

copy_X:布尔值,可不填,默认为True,如果为真,将在X.copy()上进行操作,否则的话原本的特征矩阵X可能被线性回归影响并覆盖

n_jobs:整数或者None,可不填,默认为None,用于计算的作业数。只在多标签的回归和数据量足够大的时候才生效。除非None在joblib.parallel_backend上下文中,否则None统一表示为1。如果输入 -1,则表示使用全部的CPU来进行计算。

 线性回归代码:

线性回归直接预测血糖值:return: None"""# 获取数据lb = readcvs()# print(lb)# 分割数据集到训练集和测试集,按照75%:25%的比例进行数据分配训练数据和测试数据x_train, x_test, y_train, y_test = train_test_split(lb['data'], lb['target'], test_size=0.2)# 进行标准化处理(目标值要进行标准化处理)# 特征值和目标值都必须进行标准化处理, 实例化两个标准化API# 标准化也就是归一化处理# std_x = StandardScaler()# # 标准化训练数据# x_train = std_x.fit_transform(x_train)# # 标准化测试数据# x_test = std_x.transform(x_test)## # 目标值# std_y = StandardScaler()# # 标准化目标训练数据(因为数据是[y,y,1,1,1,1,...]变换成[[],[],[],[],[]...])进行变换# y_train = std_y.fit_transform(y_train.reshape(-1, 1))# # 标准化目标测试数据(同上)# y_test = std_y.transform(y_test.reshape(-1, 1))# estimator预测# 正规方程求解方式预测结果lr = LinearRegression()print("多项式参数:",l_data)# 对训练数据进行拟合lr.fit(x_train, y_train)# # 查看w的参数print('w参数',lr.coef_)# # 查看b的参数print('b参数',lr.intercept_)# 保存训练模型# 预测测试集的房子价格# y_lr_predict = std_y.inverse_transform(lr.predict(x_test))y_lr_predict = lr.predict(x_test)print("正规方程测试集里面每个血糖的预测: ", y_lr_predict)# print("正规方程的均方误差: ", mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict))score_ = lr.score(x_test, y_test)print('模型得分', score_)# 保存血糖模型数据if score_ > 0.2:joblib.dump(lr, "./model/blood.pkl")return score_def train_():count=0sys.setrecursionlimit(100000)  # 设置递归深度list=[]#循环10000次for i in range(10000):score = train()list.append(score)count = count+1print("最高得分", max(list))if score>0.2:breakprint("最高得分",max(list))#加载模型准备预测
def predict():list=[[1, 80.0, 179, 55,421,0]]value=np.array(list)# 导入血糖模型数据lr = joblib.load("./model/blood.pkl")#直接预测结果y_lr_predict=lr.predict(value)print(y_lr_predict)#返回模型预测出来的血糖值return y_lr_predictif __name__ == "__main__":train_()

多项式回归:

多项式回归:
from sklearn.preprocessing import PolynomialFeatures
# 设置多项式阶数为2,其他值默认
# degree 多项式阶数
poly = PolynomialFeatures(degree=2)
res = poly.fit_transform(X)
PolynomialFeatures详细探讨
现在有(a,b)两个特征,使用degree=2的二次多项式则为(1,a, a^2, ab, b ,b^2)。
PolynomialFeatures主要有以下几个参数:degree:度数,决定多项式的次数interaction_only: 默认为False,字面意思就是只能交叉相乘,不能有a^2这种.include_bias: 默认为True, 这个bias指的是多项式会自动包含1,设为False就没这个1了.order:有"C" 和"F" 两个选项。官方写的是在密集情况(dense case)下的输出array的顺序,F可以加快操作但可能使得subsequent estimators变慢。

如何控制多项式回归的系数:a=[[2,3]] 或者a=[[2],[3]]

from sklearn.preprocessing import PolynomialFeatures
a=[[2,3]](相当于[[x1,x2]])
pf=PolynomialFeatures(degree=2)
print(pf.fit_transform(a)) #会产生多项式的系数
#[[1. 2. 3. 4. 6. 9.]] 相当于(1+2+3+2*2+2*3+3*3)
pf=PolynomialFeatures(degree=2,include_bias=False)
print(pf.fit_transform(a))
#[[2. 3. 4. 6. 9.]]
pf=PolynomialFeatures(degree=2,interaction_only=True)
print(pf.fit_transform(a))
#[[1. 2. 3.  6.]]如果是c=[[a],[b]]这种形式,生成的多项式就没有ab交叉项了,只有[[1,a,a^2], [1,b,b^2]] 。
c=[[2],[3]]
print(pf.fit_transform(c))
[[1. 2. 4.][1. 3. 9.]]

转换器Transformers 通常与分类器、回归器或其他估计器相结合,构成一个复合估计器。最常见的工具是pipeline。

利用Pipline进项多项式和线性回归合并,这样会产生非线性的回归

lr = Pipeline([('poly', PolynomialFeatures(degree=2)),('clf', LinearRegression())])
lr.fit(x_train, y_train)
多项式和线性回归相结合
lr = LinearRegression()
pf=PolynomialFeatures(degree=2)
lr.fit(pf.fit_transform(X), y)
print(lr.coef_)
print(lr.intercept_)
对应w和b(对应多项式的斜率和截距)
[0.1  1.413  -0.435]
-1.584092

回归的俩中线性和非线性:

# 线性回归
clf1 = LinearRegression()
clf1.fit(x, y)
y_l = clf1.predict(x)  # 线性回归预测值# 非线性回归
ployfeat = PolynomialFeatures(degree=3)  # 根据degree的值转换为相应的多项式(非线性回归)
x_p = ployfeat.fit_transform(x)
clf2 = LinearRegression()
clf2.fit(x_p, y)

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

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

相关文章

防止头文件重复包含

1. 使用#ifndef 这种方式是可跨平台的 #ifndef _TESTLIB1_ /*这种是跨平台的*/ #define _TESTLIB1_int sum(int a, int b); int sub(int a, int b);#endif // !TESTLIB12.使用#pragma once 使用之后,表示该文件只会被编译一次,但是只能在vs和vc等IDE使用。不具备跨平台。 注意:…

系统架构设计师教程(九)软件可靠性基础知识

软件可靠性基础知识 9.1 软件可靠性基本概念9.1.1 软件可靠性定义9.1.2 软件可靠性的定量描述9.1.3 可靠性目标9.1.4 可靠性测试的意义9.1.5 广义的可靠性测试与狭义的可靠性测试 9.2 软件可靠性建模9.2.1 影响软件可靠性的因素9.2.2 软件可靠性的建模方法9.2.3 软件的可靠性模…

15个热门的开源数据可视化项目

数据可视化(即 BI仪表盘)是图形表示的数据。它涉及产生将表示的数据之间的关系传达给图像查看者的图像。这种通信是通过在可视化过程中使用图形标记和数据值之间的系统映射来实现的。该映射建立了如何在视觉上表示数据值,确定图形标记的属性(例如大小或颜色)如何以及在多大程…

Appium安装及配置

一、前置说明 Appium 是一个用于自动化移动应用程序的开源测试框架,它支持 Android 和 iOS,同时支持使用多种编程语言(如 Java、Python、JavaScript 等)进行测试脚本的编写。 二、操作步骤 1. 安装Node.js Appium Server 由 n…

前端学习——指令

vue作为前端框架,为了简化或实现一些特定功能,提供了很多指令,那什么是指令呢? 所谓的指令就是能够完成特定功能的一些vue语法,比如属性绑定指令v-bind,事件绑定指令v-on,循环指令v-for等。在v…

【Docker】升级docker或者docker到docker-ce完全保留镜像和容器,不影响原容器使用方法

升级docker或者docker到docker-ce完全保留镜像和容器,不影响原容器使用方法 一、介绍二、升级方法 三、遇到问题说明 以下是我的使用场景,docker升级到docker-ce,但对于docker-ce升级也通用!亲测! 一、介绍 CentOS自带…

AI中的强化学习是怎么做的呢?

1. 什么是强化学习 其他许多机器学习算法中学习器都是学得怎样做,而强化学习(Reinforcement Learning, RL)是在尝试的过程中学习到在特定的情境下选择哪种行动可以得到最大的回报。在很多场景中,当前的行动不仅会影响当前的rewar…

软文营销的重要性,媒介盒子为你解答

信息茧房环立且用户注意力稀缺的时代下,品牌方唯有在内容上精耕细作才能吸引用户。软文营销能够帮助公司吸引流量,建立与消费者的信任联系,同时增加转化并产生更多的业务。接下来媒介盒子就和大家聊聊:软文营销的重要性。 一、 可…

FFmpeg 版本gyan.dev和BtbN区别

在Windows系统上,Gyan.dev和BtbN都提供了FFmpeg的预编译版本。Gyan.dev通常使用MSVC编译器,而BtbN使用MinGW编译器。因此,Gyan.dev的版本可能会更符合Windows标准,而BtbN的版本可能会更加开放和跨平台。 各个版本的区别介绍 Gy…

BDD - Python Behave 入门

BDD - Python Behave 入门 Behave 是什么Behave 的主要特点和组成部分Behave 实践安装 BehaveBehave 项目目录结构创建项目创建 Feature 文件创建步骤定义文件 执行用例执行全部用例执行部分用例 生成报告生成 Json report生成 HTML 报告生成 Junit report生成 Cucumber report…

老师的责任和义务

作为一名老师,我们的责任和义务是重大的。在教育领域,我们扮演着至关重要的角色,肩负着培养下一代人才的重任。下面,我将以知乎的口吻,从几个方面谈谈老师的责任和义务。 确保学生获得高质量的教育。这包括制定合理的教…

广州华锐互动:船舶安全事故3D虚拟还原系统模拟海上事故发生,帮助员工提高安全意识

随着科技的不断发展,人们对于安全问题的关注度越来越高。在船舶行业中,由于船舶的特殊性和复杂性,船舶事故的发生往往会造成严重的人员伤亡和财产损失。为此,船舶安全事故3D虚拟还原系统应运而生,为船舶安全管理和培训…

AAAI2024 | 论文接受列表,含全部论文下载(持续更新......)

来源: AINLPer公众号(每日干货分享!!) 编辑: ShuYini 校稿: ShuYini 时间: 2023-12-22 引言 AAAI2024将在2024年2月22日召开,目前接受论文正不断的被公布出来。 下面是作者整理的论文接受列表,因平台限制不…

GPTs | Actions应用案例

上篇文章说道,如何使用创建的GPTs通过API接口去获取外部的一些信息,然后把获取的外部信息返回给ChatGPT让它加工出来,回答你的问题,今天我们就来做一个通俗易懂的小案例,让大家来初步了解一下它的使用法! …

其实,BI数据分析远比你想象的简单

BI数据分析远比你想象中的简单。以前的数据分析要IT取数开发报表,现在的BI数据分析,业务人自己就能在平台上精准取数并开发报表,甚至奥威BI大数据分析工具还能提供标准化BI方案,0开发,开箱即得百张BI报表,完…

Go语言基础:深入理解结构体

Go语言基础:深入理解结构体 引言:Go语言与结构体的重要性结构体的定义与声明结构体与方法结构体的嵌入与匿名字段结构体的继承与多态性结构体与性能优化结论:结构体在Go中的应用场景 引言:Go语言与结构体的重要性 在当今迅速发展…

FreeRTOS之任务状态查询

1、相关API函数的使用 uxTaskPriorityGet(Task1Task_Handler);//传入task1的任务句柄,获取任务优先级 vTaskPrioritySet(Task1Task_Handler,30);//改变任务优先级 task_num uxTaskGetNumberOfTasks();//获取任务数量 #include "sys.h" #include "delay.h"…

chatgpt的apikey(openai apikey)如何获取

话不多说,上链接 https://platform.openai.com/api-keys

mysql SQL执行超时问题

show variables like max_execution_time 使用这个命令查看了,没有设置sql执行超时时间,那么大概率问题就出在阿里的Druid数据库连接池出了问题 尝试着socketTimeout由60000毫秒改成10000毫秒,果然执行了十几秒就超时报错了 socketTime…

做软件开发,谨防天上掉馅饼

今天来讲讲普通人眼里的软件开发。 我是一家软件开发公司的部门负责人,专注软件开发五年。经我手过的客户也有个百八十。有时候真的挺纳闷的,有些人准备话几百块甚至不到一千块就想做个系统,到底是怎么想的咱也不清楚。 就简单的说现在招两个…