数据预处理方法—特征选择、特征缩放、特征构造

特征选择

1.1 原理

特征选择是选择对模型训练最重要的特征,减少数据维度,去除冗余或不相关特征,提高模型性能的性能和训练速度,减少过拟合。

1.2 核心公式

  可以使用基于树模型的特征重要性度量,如在随机森林中计算特征的重要性:

其中,Ii,j是第j棵树中特征Xi的重要性度量。

假设使用基于Gini系数的特征重要性计算方法,单棵树的特征重要性可以表示为:

其中,T是所有包含特征Xi的节点,Nt是节点t的样本数量,N是总样本数量,\Delta Ginit是节点t上的Ginit系数变化。

1.3 Python案列

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest, f_classif,␣
,
→mutual_info_classif
from sklearn.preprocessing import StandardScaler
# 加载数据集
data = load_iris()
X = data.data
y = data.target
# 标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 特征选择方法
selectors = [
('SelectKBest_f_classif', SelectKBest(score_func=f_classif, k=2)),
('SelectKBest_mutual_info_classif',␣
,
→SelectKBest(score_func=mutual_info_classif, k=2))
]
# 绘制图形
plt.figure(figsize=(14, 6))
for i, (name, selector) in enumerate(selectors):
plt.subplot(1, 2, i + 1)
X_new = selector.fit_transform(X_scaled, y)
mask = selector.get_support()
plt.scatter(X_new[:, 0], X_new[:, 1], c=y, edgecolor='k', s=50)
plt.title(f'{name} Feature Selection')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.tight_layout()
plt.show()

 

特征缩放 

2.1 原理 

减少特征值范围的差异,帮助某些算法更快收敛,常用于标准化和归一化之外的方法。

2.2 核心公式

  最大最小缩放

其中,Xmax和Xmin分别是特征的最大值和最小值。

  对数变换

其中,加1是为了避免对数零或负值问题。

2.3 Python案例

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler, MinMaxScaler
# 加载Iris数据集
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df['species'] = iris.target
# 原始数据集的散点图
sns.pairplot(df, hue='species', markers=['o', 's', 'D'])
plt.suptitle('Original Data', y=1.02)
plt.show()
# 标准化
scaler = StandardScaler()
#data_standardized = scaler.fit_transform(df.iloc[:,:-1])
#df_standardized = pd.DataFrame(data_standardized, columns=iris.feature_names)
df_standardized = pd.DataFrame(scaler.fit_transform(df.iloc[:, :-1]),␣
,
→columns=iris.feature_names)
df_standardized['species'] = df['species']
# 标准化数据集的散点图
sns.pairplot(df_standardized, hue='species', markers=['o', 's', 'D'])
plt.suptitle('Standardized Data', y=1.02)
plt.show()
# 最小最大缩放
scaler = MinMaxScaler()
df_minmax = pd.DataFrame(scaler.fit_transform(df.iloc[:, :-1]), columns=iris.
,
→feature_names)
df_minmax['species'] = df['species']
# 最小最大缩放数据集的散点图
sns.pairplot(df_minmax, hue='species', markers=['o', 's', 'D'])
plt.suptitle('Min-Max Scaled Data', y=1.02)
plt.show()

 

 

特征构造

3.1 原理

特征构造可以中的隐藏关系,提升模型表现。

3.2 Python案例

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 生成示例数据
np.random.seed(42)
data = pd.DataFrame({
'area': np.random.randint(1000, 3500, 100),
'bedrooms': np.random.randint(1, 5, 100),
'bathrooms': np.random.randint(1, 3, 100),
'price': np.random.randint(100000, 500000, 100)
})
# 构造新特征
data['price_per_sqft'] = data['price'] / data['area']
data['bed_bath_ratio'] = data['bedrooms'] / data['bathrooms']
# 绘制图形
plt.figure(figsize=(14, 6))
# 图形1:价格与每平方英尺价格的关系
plt.subplot(1, 2, 1)
sns.scatterplot(x=data['area'], y=data['price_per_sqft'])
plt.title('Price per Square Foot vs Area')
plt.xlabel('Area (sqft)')
plt.ylabel('Price per Square Foot ($)')
# 图形2:价格与卧室-浴室比例的关系
plt.subplot(1, 2, 2)
sns.scatterplot(x=data['bed_bath_ratio'], y=data['price'])
plt.title('Price vs Bedroom-Bathroom Ratio')
plt.xlabel('Bedroom-Bathroom Ratio')
plt.ylabel('Price ($)')
plt.tight_layout()
plt.show()
# 更多图形
plt.figure(figsize=(14, 6))
# 图形3:面积与价格的关系
plt.subplot(1, 2, 1)
sns.scatterplot(x=data['area'], y=data['price'])
plt.title('Area vs Price')
plt.xlabel('Area (sqft)')
plt.ylabel('Price ($)')
# 图形4:每平方英尺价格的分布
plt.subplot(1, 2, 2)
sns.histplot(data['price_per_sqft'], kde=True)
plt.title('Distribution of Price per Square Foot')
plt.xlabel('Price per Square Foot ($)')
plt.ylabel('Frequency')
plt.tight_layout()
plt.show()

 

 

 

 

 

     

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

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

相关文章

【C++/Qt 】使用QCustomplot类打造一款数学函数图像生成工具(支持latex公式渲染+Python连接AI大模型)

✨✨ Rqtz 个人主页 : 点击✨✨ 🌈Qt系列专栏:点击 软件介绍 基于Qt的开源项目QCustomplot类的一款在线的数学函数图像生成工具,涉及到了数学的latex公式渲染,如何将latex语法转换为Python的函数,和如何在Qt中使用QCustomplot类进…

分页查询功能

EmployeeController /** * 员工分页查询 * * param employeePageQueryDTO * return */ GetMapping("/page") ApiOperation("员工分页查询") public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO) { log.info("…

mp4视频流推送的学习

一、依赖引入&#xff1a; ①使用 CDN 的播放器代码 <!-- 引入 xgplayer 核心 --> <script src"https://unpkg.byted-static.com/xgplayer/3.0.10/dist/index.min.js" charset"utf-8"></script><!-- 引入 xgplayer mp4 插件 -->…

C++趣味编程:基于树莓派Pico的模拟沙漏-倾斜开关与LED的互动实现

沙漏,作为一种古老的计时工具,利用重力让沙子通过狭小通道,形成了计时效果。在现代,我们可以通过电子元件模拟沙漏的工作原理。本项目利用树莓派Pico、倾斜开关和LED,实现了一个电子沙漏。以下是项目的详细技术解析与C++代码实现。 一、项目概述 1. 项目目标 通过倾斜开关…

PyG教程:MessagePassing基类

PyG教程&#xff1a;MessagePassing基类 一、引言二、如何自定义消息传递网络1.构造函数2.propagate函数3.message函数4.aggregate函数5.update函数 三、代码实战1.图数据定义2.实现GNN的消息传递过程3.完整代码4.完整代码的精简版本 四、总结1.MessagePassing各个函数的执行顺…

Linux—进程学习—04(进程地址空间学习)

目录 Linux—进程学习—41.程序地址空间1.1虚拟地址空间的现象1.2虚拟地址空间的理解(感性) 2.进程地址空间2.0 mm_struct结构体2.1 mm_struct结构体的源代码2.2分页&虚拟地址空间解释前面的实验现象 2.3进程地址空间存在的原因2.3.1第一个原因2.3.2第二个原因2.3.3第三个原…

信息安全实验--密码学实验工具:CrypTool

1. CrypTool介绍&#x1f4ad; CrypTool 1的开源教育工具&#xff0c;用于密码学研究。通过CrypTool 1&#xff0c;可以实现加密和解密操作&#xff0c;数字签名。CrypTool1和2有很多区别的。 2. CrpyTool下载&#x1f527; 在做信息安全实验--密码学相关实验时&#xff0c;发…

nodejs30: CSS 剪辑路径clip-path导致伪元素不可见问题及解决方法

相关问题 应用圆角裁剪时无法显示::after 取消clip-path设置&#xff1a; 完整问题代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, i…

三、计算机视觉_08YOLO目标检测

0、前言 YOLO作为目前CV领域的扛把子&#xff0c;分类、检测等任务样样精通&#xff0c;本文将基于两个小案例&#xff0c;用YOLO做检测任务&#xff0c;看看效果如何 1、对图片内容做检测 假设我有一张名为picture.jpeg的图片&#xff0c;其内容如下 我将图片和代码放到了同…

STM32 ADC --- 知识点总结

STM32 ADC — 知识点总结 文章目录 STM32 ADC --- 知识点总结cubeMX中配置注解单次转换模式、连续转换模式、扫描模式单通道采样的情况单次转换模式&#xff1a;连续转换模式&#xff1a; 多通道采样的情况禁止扫描模式&#xff08;单次转换模式或连续转换模式&#xff09;单次…

SQL Server 实战 - 多种连接

目录 背景 一、多种连接 1. 复合连接条件 2. 跨数据库连接 3. 隐连接 4. 自连接 5. 多表外连接 6. UNION ALL 二、一个对比例子 背景 本专栏文章以 SAP 实施顾问在实施项目中需要掌握的 sql 语句为偏向进行选题&#xff1a; 用例&#xff1a;SAP B1 的数据库工具&am…

Nginx:ssl

目录 部署ssl前提 nginx部署ssl证书 部署ssl部署建议 部署ssl前提 网站有域名根据域名申请到ssl证书&#xff0c;并下载证书部署到nginx中 部署了ssl证书后&#xff0c;访问的流量是加密的。 nginx部署ssl证书 #80端口跳转到443 server {listen 80;return 302 https://1…

MySQL之单行函数

目录 1. 函数的理解 单行函数 2. 数值函数 2.1 基本函数 2.2 角度与弧度互换函数 2.3 三角函数 2.4 指数与对数 2.5 进制间的转换 3. 字符串函数 4. 日期和时间函数 4.1 获取日期、时间 4.2 日期与时间戳的转换​编辑 4.3 获取月份、星期、星期数、天数等函数 4.4 …

Next.js-样式处理

#题引&#xff1a;我认为跟着官方文档学习不会走歪路 Next.js 支持多种为应用程序添加样式的方法&#xff0c;包括&#xff1a; CSS Modules&#xff1a;创建局部作用域的 CSS 类&#xff0c;避免命名冲突并提高可维护性。全局 CSS&#xff1a;使用简单&#xff0c;对于有传统…

Leetcode 每日一题 104.二叉树的最大深度

目录 问题描述 示例 示例 1&#xff1a; 示例 2&#xff1a; 约束条件 题解 方法一&#xff1a;广度优先搜索&#xff08;BFS&#xff09; 步骤 代码实现 方法二&#xff1a;递归 步骤 代码实现 结论 问题描述 给定一个二叉树 root&#xff0c;我们需要返回其最大…

SQL基础入门——SQL基础语法

1. 数据库、表、列的创建与管理 在SQL中&#xff0c;数据库是一个数据的集合&#xff0c;包含了多个表、视图、索引、存储过程等对象。每个表由若干列&#xff08;字段&#xff09;组成&#xff0c;表中的数据行代表记录。管理数据库和表的结构是SQL的基础操作。 1.1 创建数据…

IP与“谷子”齐飞,阅文“乘势而上”?

爆火的“谷子经济”&#xff0c;又捧出一只“潜力股”。 近日&#xff0c;阅文集团股价持续上涨&#xff0c;5日累计涨幅达13.20%。这其中&#xff0c;周三股价一度大涨约15%至29.15港元&#xff0c;强势突破20日、30日、120日等多根均线&#xff0c;市值突破280亿港元关口。 …

EXCEL截取某一列从第一个字符开始到特定字符结束的字符串到新的一列

使用EXCEL中的公式进行特定截取 假设列A是一组产品的编码&#xff0c;我们需要的数据是“-”之前的字段。 我们需要在B1单元格输入公式“LEFT(A1,SEARCH("-",A1)-1)”然后选中B1至B4单元格&#xff0c;按“CTRLD”向下填充&#xff0c;就可以得出其它几行“-”之前的…

重塑视频新语言,让每一帧都焕发新生——Video-Retalking,开启数字人沉浸式交流新纪元!

模型简介 Video-Retalking 模型是一种基于深度学习的视频再谈话技术&#xff0c;它通过分析视频中的音频和图像信息&#xff0c;实现视频角色口型、表情乃至肢体动作的精准控制与合成。这一技术的实现依赖于强大的技术架构和核心算法&#xff0c;特别是生成对抗网络&#xff0…

多头注意力机制:从原理到应用的全面解析

目录 什么是多头注意力机制&#xff1f; 原理解析 1. 注意力机制的核心公式 2. 多头注意力的扩展 为什么使用多头注意力&#xff1f; 实际应用 1. Transformer中的应用 2. NLP任务 3. 计算机视觉任务 PyTorch 实现示例 总结 近年来&#xff0c;“多头注意力机制&…