当前位置: 首页 > news >正文

线性回归 特征扩展的原理与python代码的实现

文章目录

  • 1 多项式扩展的作用
  • 2 多项式扩展的函数
    • 2.1 接收参数
    • 2.2 多项式扩展示例
  • 3 多项式扩展的完整实例

1 多项式扩展的作用

在线性回归中,多项式扩展是种比较常见的技术,可以通过增加特征的数量和多项式项的次数来提高模型的拟合能力。

举个例子,多项式扩展可以将一个包含 n 个特征的样本向量 x 扩展为一个包含 k 个特征的样本向量,其中 k 可以是 n 的任意多项式。例如,如果我们使用二次多项式扩展,可以将样本向量[x1, x2]扩展为一个包含原始特征和交叉项的新特征向量,例如 [x1, x2, x1^2, x2^2, x1*x2]。这些新特征可以捕捉到更丰富的特征组合和非线性关系,从而提高模型的拟合能力。

在多项式扩展后,我们可以使用线性回归模型来拟合扩展后的数据,并计算模型的拟合误差来评估模型的性能。通常,随着多项式项的增加,模型的拟合误差会降低,但同时也可能过度拟合训练数据,并在新数据上表现较差。

因此,在使用多项式扩展时需要注意平衡模型的拟合能力和泛化能力,并使用正则化等技术来避免过度拟合。

2 多项式扩展的函数

在Python中,可以使用 Scikit-learn 库中的 PolynomialFeatures 类来进行多项式扩展。

PolynomialFeatures 类可以将原始特征矩阵 X 转换为包含多项式特征的新特征矩阵。在转换过程中,PolynomialFeatures 可以指定扩展的次数,也就是多项式的最高次数。例如,如果指定次数为 2,PolynomialFeatures 将原始特征矩阵 X 扩展为包含所有一次项、二次项和交叉项的新特征矩阵。

2.1 接收参数

PolynomialFeatures用于创建一个多项式扩展类,其接收参数为:

  • degree:指定多项式的最高次数。默认为 2。
  • interaction_only:布尔值,表示是否仅包含交叉项。如果将其设置为 True,则仅包含原始特征之间的交叉项,而不包括原始特征本身(比如x2x^{2}x2这种)。默认为 False。
  • include_bias:布尔值,表示是否包含常数项。如果将其设置为 True,则在扩展特征矩阵中包含常数项,即所有元素都为 1 的一列。默认为 True。

创建类后,fit_transform 方法用于将原始特征矩阵 X 转换为多项式扩展后的新特征矩阵 X_poly。该函数的接收参数为原始数据,即:

X_poly = poly.fit_transform(X)

这里的fit_transform函数实际为fit函数+transform函数。当我们执行预测时,单独使用transform函数即可(见2.2中的例子)。
作为sklearn中的fit函数,该函数同样可以接收y,只不过y在被函数接收后不会进行任何计算。
image.png

2.2 多项式扩展示例

这里提供一个简单的二项式扩展的例子。

import numpy as np
from sklearn.preprocessing import PolynomialFeatures# 创建一些虚拟数据
X = np.array([[1, 2], [3, 4], [5, 6]])# 定义二次多项式扩展器
poly = PolynomialFeatures(degree=2)# 进行二次多项式扩展
X_poly = poly.fit_transform(X)# 打印扩展后的特征矩阵
print(X_poly)

在上面的代码中,我们首先创建了一个包含 3 个样本和 2 个特征的虚拟数据集 X。然后,我们创建了一个 PolynomialFeatures 对象,并将其次数设置为 2。接下来,我们使用 fit_transform 方法将 X 扩展为一个包含所有一次项、二次项和交叉项的新特征矩阵 X_poly。最后,我们打印出扩展后的特征矩阵 X_poly,结果如下:
image.png

3 多项式扩展的完整实例

此处以波士顿房价数据集为例。该数据集目前可以直接从sklearn.datasets数据集中导出。导出是会有未来版本警告,即未来的版本由于伦理问题会删除该数据集,目前大家直接忽视警告即可。
完整代码如下:

# 从Scikit-learn库中导入波士顿房价数据集  
from sklearn.datasets import load_boston  # 导入所需的类和函数  
from sklearn.preprocessing import PolynomialFeatures  
from sklearn.linear_model import LinearRegression  
from sklearn.model_selection import train_test_split  
from sklearn.metrics import mean_squared_error  # 加载波士顿房价数据集  
boston = load_boston()  # 提取特征和目标变量  
X = boston.data  # 特征矩阵  
y = boston.target  # 目标变量(房价)  # 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=66)  # 多项式扩展  
poly = PolynomialFeatures(degree=2)  # 创建一个2次多项式特征扩展器  
X_train_poly = poly.fit_transform(X_train)  # 对训练集进行多项式扩展  
X_test_poly = poly.transform(X_test)  # 对测试集进行多项式扩展  # 拟合多项式回归模型  
model = LinearRegression()  # 创建一个线性回归模型  
model.fit(X_train_poly, y_train)  # 在扩展后的训练集上拟合线性回归模型  # 在测试集上进行预测并计算MSE  
y_pred = model.predict(X_test_poly)  # 对扩展后的测试集进行预测  
mse = mean_squared_error(y_test, y_pred)  # 计算MSE  # 打印MSE  
print(mse)

代码中的讲解全部放倒了注释之中,大家理解起来应该没有障碍。

相关文章:

线性回归 特征扩展的原理与python代码的实现

文章目录1 多项式扩展的作用2 多项式扩展的函数2.1 接收参数2.2 多项式扩展示例3 多项式扩展的完整实例1 多项式扩展的作用 在线性回归中,多项式扩展是种比较常见的技术,可以通过增加特征的数量和多项式项的次数来提高模型的拟合能力。 举个例子&#…...

订阅关系一致

订阅关系一致指的是同一个消费者Group ID下所有Consumer实例所订阅的Topic、Tag必须完全一致。如果订阅关系不一致,消息消费的逻辑就会混乱,甚至导致消息丢失。本文提供订阅关系一致的正确示例代码以及订阅关系不一致的可能原因,帮助您顺畅地订阅消息。 背景信息 消息队列Ro…...

测试老鸟都在用的接口抓包常用工具以及接口测试工具都有哪些?

目录 接口 接口测试的重要性 常用抓包工具 常用接口测试工具 接口 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间…...

Delphi 一个函数实现腾讯云最新版(API3.0)短信发送

目录 一、腾讯云短信基本知识 1. 需要在腾讯云后台注册账号 2. 需要在腾讯云中开通短信功能 3. 腾讯云短信版本说明 4. 短信内容的组成 特定规范 二、短信发送函数 三、下载源代码(收费) 一、腾讯云短信基本知识 如今我们随时都收到短信验证码,注册码等等。这是…...

2023年Android现代开发

2023年现代Android开发 下面与大家分享如何构建具有2023年最新趋势的Android应用程序。 Android是什么? Android 是一种基于 Linux 内核并由 Google 开发的开源操作系统。它用于各种设备,包括智能手机、平板电脑、电视和智能手表。 目前&#xff0c…...

自然语言处理(NLP)在医疗领域的应用

自然语言处理(Natural Language Processing,NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。在各个领域都有其应用。 其在生物医学领域迅速发展,已经…...

计算机中的浮点数运算

计算机中的浮点数 计算机中以固定长度存储浮点数的方式&#xff0c;造成了浮点数运算过程容易产生上溢和下溢。以float32为例, 其标记位占1bit,指数位占8bit,小数部分占23bit 经典下溢场景 不满足精度导致截断误差 #include <iostream> #include <iomanip> usin…...

看了字节跳动月薪20K+测试岗面试题,让我这个工作3年的测试工程师,冷汗直流....

朋友入职已经两周了&#xff0c;整体工作环境还是非常满意的&#xff01;所以这次特意抽空给我写出了这份面试题&#xff0c;而我把它分享给伙伴们&#xff0c;面试&入职的经验&#xff01; 大概是在2月中的时候他告诉我投递了字节跳动并且简历已通过&#xff0c;2月23经过…...

这两天最好的ChatGPT应用;使用Notion AI提升效率的经验(13);AI编程与程序员的生存 | ShowMeAI日报

&#x1f440;日报合辑 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 硅谷银行风波中&#xff0c;OpenAI 创始人大方帮助硅谷初创公司&#xff1a;钱先拿着用&#xff0c;有了再还 OpenAI 创始人 Sam Altman 的弟弟…...

Linux 内核likely与unlikey

内核源码的时候经常可以看到likely()和unlikely()函数&#xff0c;这两个函数的作用是什么&#xff1f;-- 先得学一学GCC提供的内建函数&#xff01;&#xff01; likely和unlikely内核中的定义 # define likely(x) __builtin_expect(!!(x), 1) # define unlikely(x) __built…...

成功解决主从同步异常之Slave_IO_Running显示为No的问题

前言 MySQL主从同步在做的过程中很容易出问题, 尤其是双主配置,参数多,需要在两台服务器中反复操作,容易搞错导致失败,这里汇总的是主从同步异常之Slave_IO_Running显示为No的解决方案。 文章目录 前言一. 问题重现二. 排查过程2.1 查看UUID是否相同,并修改2.2 修改完UU…...

面试阿里测开岗失败后,被面试官在朋友圈吐槽了......

前一阵子有个徒弟向我诉苦&#xff0c;说自己在参加某大厂测试面试的时候被面试官怼得哑口无言&#xff0c;场面让他一度十分尴尬印象最深的就是下面几个问题&#xff1a;根据你以前的工作经验和学习到的测试技术&#xff0c;说说你对质量保证的理解&#xff1f;非关系型数据库…...

蓝桥杯嵌入式--字符串比较在串口通信中的应用

前言今天做了个模拟题&#xff0c;大致意思是接收上位机发的字符串&#xff0c;然后执行相应操作。思路很明确&#xff0c;就是把接收到的内容进行比较&#xff0c;但是从前我只学过比较数字的方式&#xff0c;即直接用“”进行比较&#xff0c;但是字符串不能使用这个方法&…...

考研408每周一题(2019 41)

2019年(单链表&#xff09; 41.(13分)设线性表L(a1,a2,a3,...,a(n-2),a(n-1),an)采用带头结点的单链表保存&#xff0c;链表中的结点定义如下&#xff1a; typedef struct node {int data;struct node *next; } NODE; 请设计一个空间复杂度为O(1)且时间上尽可能高效的算法&…...

Angular学习笔记(一)

以下内容基于Angular 文档中文版的学习 目录 使用Angular CLI 工具创建项目 HTML标签中{{}}插入值,[]绑定属性,()绑定事件,[(ngModel)]双向绑定 绑定属性 类和样式绑定 事件绑定 双向绑定 循环 IF 定义输入属性 定义输出事件 特殊符号 模板引用变量 页面跳转(路由…...

Linux用户和权限 —— 操作演示

Linux用户和权限——操作演示认知root用户用户、用户组管理查看权限控制修改权限控制- chmod修改权限控制- chownLinux系列&#xff1a; Linux基本命令 —— 操作演示 认知root用户 root用户(超级管理员) 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。…...

【华为OD机试真题2023 JAVA】单核CPU任务调度

华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 单核CPU任务调度 知识点队列优先级队列 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 现在有一个CPU和一些任务需要处理,已提前获知每个任务的任务ID、优先级、所需执行时间和到达时间。 CPU同时只…...

News乐鑫科技亮相德国嵌入式展 Embedded World 2023!

3 月 14 日&#xff0c;德国纽伦堡嵌入式展 Embedded World 2023 火热启幕。本届 Embedded World 主题为 “embedded. responsible. sustainable”&#xff0c;乐鑫科技 (688018.SH) 携众多 AIoT 科技成果亮相展会&#xff0c;致力于打造更智能、更互联、更绿色的物联网未来。…...

java如何创建线程

java如何创建线程1. java如何创建线程1.1 通过继承Thread类来创建线程1.2 通过实现Runnable接口来创建线程1.3 通过匿名内部类来创建线程1.4 lambda表达式1.5 通过实现Runnable接口的方式创建线程目标类的优缺点1. java如何创建线程 一个线程在Java中使用一个Thread实例来描述…...

要是早看到这篇文章,你起码少走3年弯路,20年老程序员的忠告

文章目录前言一、程序员的薪资是怎么样的&#xff1f;二、我现在的情况适合做程序员吗&#xff1f;三、大学期间到底应该学些什么&#xff1f;四、工作还是考研&#xff1f;五、总结前言 我是龙叔&#xff0c;一名工作了20多年的退休老程序员。 如果你在工作之前看到这篇文章…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...