多项式特征应用案例

news2025/6/21 1:09:44

多项式特征应用案例

描述

对于线性模型而言,扩充数据的特征(即对原特征进行计算,增加新的特征列)通常是提升模型表现的可选方法,Scikit-learn提供了PolynomialFeatures类来增加多项式特征(polynomial features)和交互特征(interaction features),本任务我们通过两个案例理解并掌握增加多项式特征的应用过程。

本任务的实践内容包括:

1、在线性回归中使用多项式特征

2、房价预测案例中使用多项式特征(基于Ridge模型)

源码下载

环境

  • 操作系统:Windows 10、Ubuntu18.04

  • 工具软件:Anaconda3 2019、Python3.7

  • 硬件环境:无特殊要求

  • 依赖库列表

    scikit-learn	0.24.2
    matplotlib      3.3.4
    numpy           1.19.5
    

分析

本任务涉及以下环节:

A)在线性回归中使用多项式特征

B)可视化对比预测曲线的拟合情况

C)在房价数据集中增加多项式特征

D)进行数据缩放,建立Ridge回归模型

E)对比增加多项式特征前后的模型表现

实施

1、在线性回归中使用多项式模型

from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(seed=0) # 固定随机数种子,便于结果重现
x = np.random.uniform(-3, 3, size=100) # 随机生成100个数
x.sort() # 排序
y = x ** 2 + 2 * x + 3 + np.random.normal(0, 1, 100) # 由数组x生成数组y,增加噪音
X = x.reshape(-1, 1) # 将x转换为(samples,features)格式

lr = LinearRegression().fit(X, y) # 创建模型,拟合数据
y_predict = lr.predict(X) # 预测

plt.scatter(x, y) # 画出数据点
plt.plot(x, y_predict, c='r', label='score=%0.2f'% lr.score(X, y)) # 生成预测曲线及成绩
plt.legend(fontsize=14) # 图例(显示成绩)
plt.show()

结果如下:

请添加图片描述

说明:数据点并不符合线性分布,所以使用线性回归模型生成的预测曲线(红线)很不理想,不能反映数据点的分布规律,成绩只有0.51。下面我们在原数据中增加多项式特征,然后查看效果。

2、增加多项式特征

from sklearn.preprocessing import PolynomialFeatures

X_poly = PolynomialFeatures(degree=2).fit_transform(X) # 增加多项式特征
lr.fit(X_poly, y) # 重新拟合数据
y_predict = lr.predict(X_poly) # 预测

plt.scatter(x, y) # 画数据点
plt.plot(x, y_predict, c='r', label='score=%0.2f'% lr.score(X_poly, y)) # 生成预测曲线
plt.legend(fontsize=14) # 图例
plt.show()

输出结果:

请添加图片描述

增加了多项式特征后,线性回归的预测曲线较好地拟合了数据点,成绩达到了0.94。因此,线性回归配合多项式特征,可以用来拟合非线性数据。

需要注意的是,如果多项式次数(degree)过大,容易出现过拟合(overfit)。即模型在训练时表现很好,但在陌生数据上表现很差,这是因为模型过于追求对训练数据点的拟合,导致泛化能力下降。(如下图)
请添加图片描述

请添加图片描述

​ degree=2 degree=30

3、在房价预测案例中使用多项式特征

3.1 加载拆分数据集,进行缩放预处理

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge

# 加载、拆分数据
boston = load_boston()
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=1)

# 进行数据缩放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

3.2 增加多项式特征,建立Ridge回归模型,并对比模型前后成绩

# 增加多项式特征

poly = PolynomialFeatures(degree=2)
X_train_poly = poly.fit_transform(X_train_scaled)
X_test_poly = poly.fit_transform(X_test_scaled)
print('X_train.shape:', X_train.shape) # 查看增加特征前后的数据尺寸
print('X_train_poly.shape:', X_train_poly.shape) 

# 创建Ridge回归模型,对比增加特征前后的模型成绩

ridge = Ridge().fit(X_train_scaled, y_train)
print('Score without PolynomialFeatures: %0.2f'%ridge.score(X_test_scaled, y_test))
ridge = Ridge().fit(X_train_poly, y_train)
print('Score with PolynomialFeatures: %0.2f'%ridge.score(X_test_poly, y_test))

结果如下:

X_train.shape: (379, 13)
X_train_poly.shape: (379, 105)
Score without PolynomialFeatures: 0.78
Score with PolynomialFeatures: 0.90

可以看到,增加多项式特征后,特征个数由13个变成105个,同时Ridge回归模型的性能得到提升。需要注意的是,线性模型中使用多项式特征的效果,因具体的模型和具体任务要求不同而不同。

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

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

相关文章

JavaScript【一】JavaScript变量与数据类型

文章目录🌟前言🌟变量🌟 变量是什么?🌟 变量提升🌟 声明变量🌟 JavaScript有三种声明方式🌟 命名规范🌟 注意🌟数据类型以及运算🌟 检测变量数据类…

【Linux】System V IPC-命名管道共享内存消息队列

System V IPC-命名管道&共享内存&消息队列命名管道共享内存创建共享内存附加和分离共享内存消息队列消息队列的接口命名管道 使用mkfifo命令,创建一个命名管道,通过ll可以查看当前命名管道的类型 p类型,也就是pipe管道类型。 之前我…

Docker镜像之Docker Compose讲解

文章目录1 docker-compose1.1 compose编排工具简介1.2 安装docker-compose1.3 编排启动镜像1.4 haproxy代理后端docker容器1.5 安装socat 直接操作socket控制haproxy1.6 compose中yml 配置指令参考1.6.1 简单命令1.6.2 build1.6.3 depends_on1.6.4 deploy1.6.5 logging1.6.6 ne…

【C++进阶】01:概述

概述 OVERVIEW概述C11新特性:C14新特性:C17新特性:C20新特性:C程序编译过程C内存模型CSTL1.Queue&Stack2.String3.MapC语言C语言面向过程编程✅✅面向对象编程(类和对象)❌✅泛型编程、元编程&#xff…

基于PaddlePaddle的图片分类实战 | 深度学习基础任务教程系列

图像相比文字能够提供更加生动、容易理解及更具艺术感的信息,图像分类是根据图像的语义信息将不同类别图像区分开来,是图像检测、图像分割、物体跟踪、行为分析等其他高层视觉任务的基础。图像分类在安防、交通、互联网、医学等领域有着广泛的应用。 一般…

LeetCode:77. 组合——回溯法,是暴力法?

🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀算法专栏: 👉🏻123 一、🌱77. 组合 题目描述:给定两个整数 n 和 k,返回范…

风场数据抓取程序实现(java+python实现)

一、数据源参数定义 关键参数代码: package com.grab.catchWindData.pram;/*** ClassName: DevPrams* Description: TODO**/ public class DevPrams {public static String lev_0to0p1_m_below_ground "lev_0-0.1_m_below_ground";public static Stri…

【微服务笔记08】微服务组件之Hystrix实现请求合并功能

这篇文章,主要介绍微服务组件之Hystrix实现请求合并功能。 目录 一、Hystrix请求合并 1.1、什么是请求合并 1.2、请求合并的实现 (1)引入依赖 (2)编写服务提供者 (3)消费者(Se…

React | 认识React开发

✨ 个人主页:CoderHing 🖥️ Node.js专栏:Node.js 初级知识 🙋‍♂️ 个人简介:一个不甘平庸的平凡人🍬 💫 系列专栏:吊打面试官系列 16天学会Vue 11天学会React Node专栏 &#x…

【分享】免梯子的GPT,玩 ChatGPT 的正确姿势

火了一周的 ChatGPT,HG 不允许还有小伙伴不知道这个东西是什么?简单来说就是,你可以让它扮演任何事物,据说已经有人用它开始了颜色文学创作。因为它太火了,所以,本周特推在几十个带有“chatgpt”的项目中选…

双交叉注意学习用于细粒度视觉分类和目标重新识别

目录Dual Cross-Attention Learning for Fine-Grained Visual Categorization and Object Re-Identification摘要本文方法消融实验Dual Cross-Attention Learning for Fine-Grained Visual Categorization and Object Re-Identification 摘要 目的: 探索了如何扩展…

JDK8——新增时间类、有关时间数据的交互问题

目录 一、实体类 二、数据库 三、数据交换 四、关于LocalDateTime类型 (java 8) 4.1 旧版本日期时间问题 4.2 新版日期时间API介绍 4.2.1 LocalDate、LocalTime、LocalDateTime 4.2.2 日期时间的修改与比较 4.2.3 格式化和解析操作 4.2.4 Instant: 时间戳 4.2.5 Duration 与…

Doris(6):数据导入(Load)之Stream Load

Broker load是一个同步的导入方式,用户通过发送HTTP协议将本地文件或者数据流导入到Doris中,Stream Load同步执行导入并返回结果,用户可以通过返回判断导入是否成功。 1 适用场景 Stream load 主要适用于导入本地文件,或通过程序…

小厂实习要不要去?

大家好,我是帅地。 最近暑假实习招聘,不少 训练营 学员都拿到了小厂实习来保底,但是很多小厂基本要求一周内给答复,中大厂就还在流程之中,所以很纠结小厂实习要不要去。 不知道你是否有这样的纠结,今天帅地…

【测试面试汇总2】

目录Linux操作系统1.Linux操作命令2.在Linux中find和grep的区别?3.绝对路径用什么符号表示?4.当前目录、上层目录用什么表示?5.主目录用什么表示?6.怎么查看进程信息?7.保存文件并退出vi 编辑?8.怎么查看当前用户id&a…

【Python从入门到进阶】15、函数的定义和使用

接上篇《14、字典高级应用》 上一篇我们学习了有关字典的高级应用操作(字典的增删改查),本篇我们来学习Python中函数的定义和使用,包括函数的参数、返回值、局部变量和全景变量等操作。 一、一个思考 例如这里有一段大东北洗浴中…

2023年PMP报考时间安排攻略!

1.2023年PMP考试时间 PMP一年开考4次,分别为3月、6月、9月、12月,预计2023年PMP第一次考试时间在2023年3月左右,具体以基金会官方通知为准。 1)为什么考PMP? 大部分人考 PMP 无非以下几个原因,总的来说&…

运行时内存数据区之程序计数器

内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时选行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。 不同的VM对于内存的划分方式和管理机制存在着部分差…

算法时间复杂度计算

目录 1.时间复杂度计算 1.1 时间复杂度例题 1.1.1例题 1.1.2例题 1.1.3例题 1.1.4例题 1.2时间复杂度leetcode例题 1.时间复杂度计算 首先,我们需要了解时间复杂度是什么:算法的时间复杂度是指算法在编写成可执行程序后,运行时需要耗费…

一天吃透操作系统八股文

操作系统的四个特性? 并发:同一段时间内多个程序执行(与并行区分,并行指的是同一时刻有多个事件,多处理器系统可以使程序并行执行) 共享:系统中的资源可以被内存中多个并发执行的进线程共同使…