Python代码之特征工程基础

1. 什么是特征工程

特征工程是指从原始数据中提取、转换和创建适合于模型训练的数据特征的过程。它是机器学习和深度学习中非常重要的一步,因为好的特征工程可以显著提高模型的性能。特征工程涉及从数据中提取有意义的信息,并将其转换为模型可以理解和使用的格式。常见的特征工程步骤包括数据清洗、特征选择、特征提取和特征变换。

2. 为什么特征工程很重要

特征工程的重要性在于它直接影响模型的性能。通过合适的特征工程,可以:

  • 提高模型的准确性:好的特征可以显著提高模型的预测能力,因为它们能够捕捉数据中有意义的模式和关系。
  • 缩短训练时间:通过减少数据的维度和复杂性,特征工程可以加快模型的训练速度。
  • 提高模型的可解释性:特征工程可以帮助识别和使用更直观和解释性强的特征,使得模型的输出更容易理解。
3. 特征工程的步骤

数据收集:收集与问题相关的数据。这可能涉及从多个来源获取数据,如数据库、文件或在线API。

import pandas as pddata = pd.read_csv('data.csv')  # 从CSV文件中读取数据

数据清洗:处理缺失值、异常值和重复数据,确保数据的质量和一致性。 

# 处理缺失值
data = data.dropna()  # 删除包含缺失值的行
# 或
data = data.fillna(data.mean())  # 使用均值填充缺失值

特征选择:选择对模型性能有显著影响的特征,删除冗余或不相关的特征。

from sklearn.feature_selection import SelectKBest, f_classifX = data.drop('target', axis=1)
y = data['target']
selector = SelectKBest(score_func=f_classif, k=10)  # 选择10个最佳特征
X_new = selector.fit_transform(X, y)

特征提取:从原始数据中提取新的特征。这可以包括从日期时间数据中提取年月日,或从文本数据中提取关键词等。

# 从日期时间数据中提取特征
data['year'] = pd.to_datetime(data['date']).dt.year
data['month'] = pd.to_datetime(data['date']).dt.month

特征变换:对特征进行转换,如标准化、归一化、编码等,以使其适合模型训练。

from sklearn.preprocessing import StandardScaler, OneHotEncoder# 数值特征标准化
scaler = StandardScaler()
data[['feature1', 'feature2']] = scaler.fit_transform(data[['feature1', 'feature2']])# 类别特征编码
encoder = OneHotEncoder()
encoded_features = encoder.fit_transform(data[['categorical_feature']]).toarray()
data = pd.concat([data, pd.DataFrame(encoded_features)], axis=1)
4. 特征工程案例

结合以上步骤,下面是一个完整的特征工程流程示例:

import pandas as pd
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.preprocessing import StandardScaler, OneHotEncoder# Sample data to simulate the process
data = pd.DataFrame({'date': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04'],'feature1': [1.0, 2.0, 3.0, 4.0],'feature2': [10.0, 20.0, 30.0, 40.0],'categorical_feature': ['A', 'B', 'A', 'B'],'target': [0, 1, 0, 1]
})# 数据清洗
data = data.dropna()# 特征选择
X = data.drop('target', axis=1)
y = data['target']
selector = SelectKBest(score_func=f_classif, k='all')  # Selecting all features to demonstrate
X_new = selector.fit_transform(X.select_dtypes(include=[float, int]), y)# 特征提取
data['year'] = pd.to_datetime(data['date']).dt.year
data['month'] = pd.to_datetime(data['date']).dt.month# 特征变换
scaler = StandardScaler()
data[['feature1', 'feature2']] = scaler.fit_transform(data[['feature1', 'feature2']])encoder = OneHotEncoder(sparse=False)
encoded_features = encoder.fit_transform(data[['categorical_feature']])
encoded_features_df = pd.DataFrame(encoded_features, columns=encoder.get_feature_names_out(['categorical_feature']))data = pd.concat([data, encoded_features_df], axis=1)# 准备最终的特征集和标签
X_final = data.drop(['target', 'date', 'categorical_feature'], axis=1)
y_final = data['target']import ace_tools as tools; tools.display_dataframe_to_user(name="Final Data after Feature Engineering", dataframe=X_final)X_final.head(), y_final.head()

运行结果

Result
(   feature1  feature2  year  month  categorical_feature_A  \0 -1.341641 -1.341641  2023      1                    1.0   1 -0.447214 -0.447214  2023      1                    0.0   2  0.447214  0.447214  2023      1                    1.0   3  1.341641  1.341641  2023      1                    0.0   categorical_feature_B  0                    0.0  1                    1.0  2                    0.0  3                    1.0  ,0    01    12    03    1Name: target, dtype: int64)

Final Data after Feature Engineering

最终的特征集和标签如下:

数据经过特征工程处理后,特征包括标准化后的数值特征、提取的年份和月份、以及独热编码后的类别特征。 

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

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

相关文章

Python实战:类

一、圆的面积、周长 class Circle:# 初始化一个类参数:rdef __init__(self,r):self.r r# 计算面积的方法def get_area(self):return 3.14*pow(self.r,2)# 计算周长的方法def get_perimeter(self):return 2*3.14*self.r#创建对象 r eval(input(请输入圆的半径&…

linux系统编程:(4)

1.系统时间的获取函数 1. time函数 功能: 获得1970年到现在的秒数 参数: t:存放秒数的空间首地址 返回值: 成功返回1970年到现在的秒数 失败返回-1 2.localtime 函数 功能: 将一个秒数转化成日历时间 参数: timep:保存秒数空间的地址 返回值: 成功…

深度学习入门(四):激活函数与LSTM

激活函数 激活函数在神经网络中扮演着至关重要的角色。它们的主要功能是引入非线性因素,这使得神经网络能够学习和近似任何非线性函数,从而处理复杂的数据模式和决策边界。如果没有激活函数,即使网络拥有很多层,其表达能力仍然只…

write_sdc和write_script区别

文章目录 一、set_disable_clock_gating_check二、write_sdc和write_script区别1. write_sdc2. write_script 一、set_disable_clock_gating_check set_disable_clock_gating_check对指定的cell/pin/lib_cell/lib_pin设置是否进行clock gating的时序检查。 对于工具插入或者…

多模态大语言模型的免训练视觉提示学习 ControlMLLM

ControlMLLM: Training-Free Visual Prompt Learning for Multimodal Large Language Models github paper 在本研究中,提出了一种无需进行训练的方法,通过可学习的潜变量优化将视觉提示注入到多模态大型语言模型(MLLMs)中。 在…

本地Linux服务器创建我的世界MC私服并实现与好友异地远程联机游戏

文章目录 前言1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 前言 本…

ttwid、x-bogus、a-bogus、msToken、byted_acrawler等直播参数说明和获取方式

可以参考开源项目:https://github.com/Sjj1024/douyin-live 桌面端的直播间项目:https://github.com/Sjj1024/LiveBox ttwid参数 ttwid类似客户端id,即便是游客模式,也可以对页面数据进行埋点统计,通过收集ttwid下的…

java10-集合框架

1. 集合的简介 1.1什么是集合 集合Collection,也是一个数据容器,类似于数组,但是和数组是不一样的。集合是一个可变的容器,可以随时向集合中添加元素,也可以随时从集合中删除元素。另外,集合还提供了若干个…

Java设计模式(桥接模式)

定义 将抽象部分与它的实现部分解耦,使得两者都能够独立变化。 角色 抽象类(Abstraction):定义抽象类,并包含一个对实现化对象的引用。 扩充抽象类(RefinedAbstraction):是抽象化角…

搭建基于树莓派的Linux学习环境(TODO)

主要是想学一下Linux内核,所以搭一套环境,其实有几个选择,好几个都是我买了板子的。 首先是正点原子的RK3568,最早是想弄安卓,但是SDK的大小真的把我劝退了,动不动几百个G的空间,还有就是保底1…

Mac OS平台,利用 gifify 制作gif教程

一、前言 在很多时候都会用到视频的方式才能直观的表达想表达的东西, 但是视频的文件太大了,所以gif是一个很不错的选择,在网上找了很多免费的都不好用, 最理想的还是直接快捷键唤起,然后选择录制区域,保存…

第128天:内网安全-横向移动IPCATSC 命令Impacket 套件CS 插件全自动

环境部署 案例一: 域横向移动-IPC-命令版-at&schtasks 首先是通过外网web访问到win2008,获得了win2008的权限,这一步不做演示 因为里面的主机都不出网,所以只能利用win2008进行正向或者反向连接 信息收集 域内用户信息&…

【Qt】图形化和纯代码实现Hello world的比较

本篇文章使用俩种方式实现Qt上的Hello world: 通过图形化的方式,在界面上创建出一个控件,显式Hello world通过纯代码的方式,通过编写代码,在界面上创建控件,显示Hello world 图形化方式 双击Forms文件中的…

修改SpringBoot启动图标banner

方式一: 将图标文件命名为banner放在resources目录下 文本文件banner 图片banner 方式二:通过配置文件指定图标路径 指定文本图标:spring.banner.locationclasspath:相对于resources下的位置 ("classpath:"可以省略) 指定图片作为图标: sprin…

同态加密和SEAL库的介绍(一)简介

写在前面: 最近在做同态相关的内容,这里记录下相关的知识点和所踩过的坑,希望对大家有帮助。预计分几篇来详细介绍,从概念简介到不同模式介绍,具体包括了每种模式的编解码和加解密以及他们性能的比对。 虽然同…

win11启动IIS服务配置成web服务器·

为什么要将本地配置为 Web 服务器? 在 Web 开发过程中,将本地配置为 Web 服务器有诸多好处: 实时预览: 修改代码后,无需每次都上传到远程服务器,即可在本地浏览器中实时查看效果。 离线开发: 无需依赖网络连接&#x…

R9000P 双系统安装 win11 和 ubuntu

网上了解到一堆关于 r9000p 安装较老的ubuntu系统,会有一堆问题 可能是电脑硬件比较新,较老的系统相关方面不兼容 那么干脆直接装新一点的系统 我安装了 Ubuntu 22.04 1 根据相关教程利用u盘制作系统盘 ultraISO 推荐使用清华源 速度快一点 https://…

AI资本泡沫要来了么?——Coatue EMW 2024会议摘要

引言 随着生成式人工智能的快速发展,科技领域正经历着一场前所未有的变革。然而,伴随这一热潮而来的,是关于AI资本泡沫的激烈讨论。历史上,每一次技术革命都带来了巨大机遇,同时也伴随着泡沫和风险。本文将通过Coatue…

企业级敏捷框架:业务驱动型敏捷与产品需求团队

本文介绍了一种新的企业级敏捷框架——业务驱动型敏捷(Business-driven Agile)与 PRT(Product Requirement Team),旨在解决传统敏捷方法中需求定义的瓶颈,从而提升产品价值并提高开发效率。原文: A new ent…

2024年史上最好用的10款项目管理软件有哪些?

项目管理行业发展趋势 随着信息技术的不断进步,项目管理也呈现出愈加智能化、自动化的发展趋势。无论是大型企业还是中小型公司,都亟需借助先进的项目管理工具,来实现对项目进度、资源、风险等各个环节的精细化管控。 然而在实际应用中&…