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

不是模型不行,是你没做好特征工程(附完整步骤)

来源DeepHub IMBA 本文约1800字建议阅读5分钟本文介绍了特征工程全流程含数据处理、特征构造与选择。Feature engineering 是机器学习 pipeline 里最关键的一环。算法再好如果输入数据噪声大、不一致或者缺乏有意义的特征模型表现都不会很好。这篇文章用 Pandas 和 Scikit-learn把一条完整的 feature engineering pipeline 做个完整的介绍。什么是 Feature Engineering把原始数据转换成有意义的输入变量特征让机器学习模型表现更好——这就是 feature engineering。Step 1 — 探索性数据分析EDA动手做特征之前先把数据看明白。import pandas as pd import numpy as np np.random.seed(42) df pd.DataFrame({ Age: [25, 30, np.nan, 40, 35, 120, 28], Salary: [50000, 60000, 55000, 80000, np.nan, 1000000, 62000], Gender: [Male, Female, Female, np.nan, Male, Male, Female], City: [NY, LA, NY, SF, np.nan, LA, SF], Experience: [1, 3, 2, 10, 7, 25, 4], Date: pd.date_range(start2024-01-01, periods7), Target: [0, 1, 0, 1, 0, 1, 0] }) print(df) print(df.head()) print(df.info()) print(df.describe())检查缺失值print(df.isnull().sum())查看分布import matplotlib.pyplot as plt df.hist(figsize(12, 10)) plt.show()Step 2 — 缺失值填补缺失值会拉低模型准确率。均值 / 中位数填补from sklearn.impute import SimpleImputer imputer SimpleImputer(strategymedian) df[Age] imputer.fit_transform(df[[Age]])众数填补cat_imputer SimpleImputer(strategymost_frequent) df[City] cat_imputer.fit_transform(df[[City]])KNN 填补from sklearn.impute import KNNImputer knn_imputer KNNImputer(n_neighbors5) numeric_cols df.select_dtypes(include[int64, float64]) df[numeric_cols.columns] knn_imputer.fit_transform(numeric_cols)Step 3 — 类别编码模型只认数字不认文本。Label Encodingfrom sklearn.preprocessing import LabelEncoder encoder LabelEncoder() df[Gender] encoder.fit_transform(df[Gender])One-Hot Encodingdf pd.get_dummies(df, columns[City], drop_firstTrue)使用 Scikit-learn OneHotEncoderfrom sklearn.preprocessing import OneHotEncoder ohe OneHotEncoder(handle_unknownignore)Step 4 — 异常值检测与处理异常值会扭曲模型的学习过程。用 IQR 检测异常值Q1 df[Salary].quantile(0.25) Q3 df[Salary].quantile(0.75) IQR Q3 - Q1 lower Q1 - 1.5 * IQR upper Q3 1.5 * IQR outliers df[(df[Salary] lower) | (df[Salary] upper)] print(outliers)移除异常值df df[(df[Salary] lower) (df[Salary] upper)]Winsorization from scipy.stats.mstats import winsorize df[Salary] winsorize(df[Salary], limits[0.05, 0.05])Step 5 — 特征缩放与归一化不同量纲的特征会影响模型表现。StandardScalerfrom sklearn.preprocessing import StandardScaler scaler StandardScaler() df[[Age, Salary]] scaler.fit_transform(df[[Age, Salary]])MinMaxScalerfrom sklearn.preprocessing import MinMaxScaler minmax MinMaxScaler() df[[Age, Salary]] minmax.fit_transform(df[[Age, Salary]])RobustScaler数据里有异常值时使用。from sklearn.preprocessing import RobustScaler robust RobustScaler() df[[Age, Salary]] robust.fit_transform(df[[Age, Salary]])Step 6 — 特征构造与变换构造出有意义的特征往往是准确率拉升最明显的一步。日期特征抽取df[Date] pd.to_datetime(df[Date]) df[Year] df[Date].dt.year df[Month] df[Date].dt.month df[Day] df[Date].dt.day多项式特征from sklearn.preprocessing import PolynomialFeatures poly PolynomialFeatures(degree2) poly_features poly.fit_transform(df[[Age, Experience]])数值变量分箱df[Age_Group] pd.cut( df[Age], bins[0, 18, 35, 60, 100], labels[Teen, Young, Adult, Senior] )Step 7 — 特征选择挑出真正重要的特征可以减少过拟合也能让模型跑得更快。基于相关系数的选择import seaborn as sns corr df.corr(numeric_onlyTrue) sns.heatmap(corr, annotTrue)SelectKBestfrom sklearn.feature_selection import SelectKBest, f_classif X df.drop(Target, axis1) y df[Target] selector SelectKBest(score_funcf_classif, k5) X_new selector.fit_transform(X, y)递归特征消除RFEfrom sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression model LogisticRegression() rfe RFE(model, n_features_to_select5) X_rfe rfe.fit_transform(X, y)Pipeline 把预处理自动化也能降低数据泄露的风险。完整 Pipeline 示例from sklearn.pipeline import Pipeline from sklearn.compose import ColumnTransformer from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.impute import SimpleImputer from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split X df.drop(Target, axis1) y df[Target] numeric_features [Age, Salary, Experience] categorical_features [Gender, City] numeric_transformer Pipeline(steps[ (imputer, SimpleImputer(strategymedian)), (scaler, StandardScaler()) ]) categorical_transformer Pipeline(steps[ (imputer, SimpleImputer(strategymost_frequent)), (onehot, OneHotEncoder(handle_unknownignore)) ]) preprocessor ColumnTransformer( transformers[ (num, numeric_transformer, numeric_features), (cat, categorical_transformer, categorical_features) ] ) model_pipeline Pipeline(steps[ (preprocessor, preprocessor), (classifier, LogisticRegression(max_iter1000)) ]) X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42 ) model_pipeline.fit(X_train, y_train) print(Model trained successfully)总结Feature engineering 是机器学习项目能否成立的基石。干净、变换过、有意义的特征往往胜过用劣质数据训练的复杂算法。上面把这些步骤都做扎实模型的准确率和稳健性都会上一个台阶。在真实的机器学习项目里feature engineering 往往比挑哪个模型更决定胜负。特征做得好预测自然好。by Dhivakar编辑于腾凯校对李嘉林关于我们数据派THU作为数据科学类公众号背靠清华大学大数据研究中心分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识努力建设数据人才聚集平台、打造中国大数据最强集团军。新浪微博数据派THU微信视频号数据派THU今日头条数据派THU

相关文章:

不是模型不行,是你没做好特征工程(附完整步骤)

来源:DeepHub IMBA 本文约1800字,建议阅读5分钟本文介绍了特征工程全流程,含数据处理、特征构造与选择。Feature engineering 是机器学习 pipeline 里最关键的一环。算法再好,如果输入数据噪声大、不一致或者缺乏有意义的特征&…...

3分钟免费加速GitHub:告别龟速下载的终极解决方案

3分钟免费加速GitHub:告别龟速下载的终极解决方案 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 还在为GitHub的缓慢下…...

[STM32U3] 【STM32U385RG 测评】PWM调节屏幕亮度

在评测计划中有使用pwm来实现调节屏幕亮度,因此本篇为如何使用HMI实现对屏的亮度调节。实现原理为,使用TouchGFX Designer添加一个滑动控件,通过滑动来修改pwm的占空比,实现ST7789的BLK的电压实现。 本次工程在上一篇试用的基础上…...

如何通过内存注入技术在英雄联盟国服实现安全换肤?

如何通过内存注入技术在英雄联盟国服实现安全换肤? 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 想象一下,你正在峡谷中奋战&…...

思源宋体TTF实战秘籍:三步搞定专业中文字体配置

思源宋体TTF实战秘籍:三步搞定专业中文字体配置 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为商业项目寻找合适的中文字体而烦恼吗?Source Han Serif C…...

用Python重写‘估值一亿的AI核心代码’:聊聊正则表达式与字符串处理的优雅解法

Python重构估值一亿的AI核心代码:正则表达式与字符串处理的优雅实践 当我们需要处理复杂的文本规则时,不同编程语言会展现出截然不同的解决思路。本文将以PTA L1-064题目为例,展示如何用Python的正则表达式和字符串处理方法,优雅地…...

别再手动调position了!用MATLAB tiledlayout搞定双坐标轴图(R2019b+保姆级教程)

MATLAB双坐标轴绘图革命:tiledlayout全攻略 在科研绘图和工程可视化领域,双坐标轴图表是展示多维度数据的利器。传统MATLAB绘图方法需要手动计算position属性,代码冗长且难以维护。R2019b版本引入的tiledlayout功能彻底改变了这一局面&#x…...

Escrcpy终极指南:简单高效的Android图形化投屏完整方案

Escrcpy终极指南:简单高效的Android图形化投屏完整方案 【免费下载链接】escrcpy 📱 Display and control your Android device graphically with scrcpy. 项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy 你是否厌倦了复杂的命令行操…...

终极AEUX指南:如何快速实现Figma到After Effects的设计动画转换

终极AEUX指南:如何快速实现Figma到After Effects的设计动画转换 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX 想要将精美的Figma设计稿快速转换为After Effects动画项目吗…...

Autovisor智慧树刷课终极指南:2025最全自动化学习解决方案

Autovisor智慧树刷课终极指南:2025最全自动化学习解决方案 【免费下载链接】Autovisor 2025智慧树刷课脚本 基于Python Playwright的自动化程序 [有免安装版] 项目地址: https://gitcode.com/gh_mirrors/au/Autovisor 还在为智慧树网课而烦恼吗?每…...

点支式玻璃幕墙张拉索杆结构设计原理

点支式玻璃幕墙张拉索杆结构设计原理 一、问题的提出   张拉索杆结构点支式玻璃幕墙在我国使用时间虽然不长,但其发展相当迅猛,2002年达到年使用量约70万m2。我们必须清醒的看到此类结构在国内出现时间不长,同工程应用相比,理论研究相对滞后,对此类结构还缺乏深入研究,…...

嵌入式Linux驱动开发pinctrl篇(1)——从寄存器到子系统:驱动演进之路

嵌入式Linux驱动开发pinctrl篇(1)——从寄存器到子系统:驱动演进之路 仓库已经开源!所有教程,主线内核移植,跑新版本imx-linux/uboot都在这里,或者一起来尝试跑7.0的Linux!欢迎各位大…...

Python DXF文件处理革命:ezdxf库的深度解析与实战指南

Python DXF文件处理革命:ezdxf库的深度解析与实战指南 【免费下载链接】ezdxf Python interface to DXF 项目地址: https://gitcode.com/gh_mirrors/ez/ezdxf 在CAD数据交换领域,DXF格式一直是工业标准,但传统的DXF处理工具往往复杂难…...

别再乱接线了!用PulseView+逻辑分析仪抓STM32 SPI波形,保姆级避坑指南

逻辑分析仪实战:精准捕获STM32 SPI波形的五大黄金法则 当你在调试STM32的SPI外设时,是否遇到过这样的困境:代码配置完全按照手册操作,但逻辑分析仪显示的波形却充满毛刺、数据残缺不全?这往往不是代码逻辑的问题&#…...

中国航空器拥有者及驾驶员协会:我国低空经济重点政策制度汇编(2025)

这份文档是2025 年中国低空经济重点政策制度汇编,由中国航空器拥有者及驾驶员协会编制,全面梳理国家 地方两级低空经济相关法律法规、规章标准与产业政策,核心是构建低空经济 “法律 - 规章 - 标准 - 政策” 四层制度体系,为低空…...

Hercules安全MCU平台:从硬件锁步到软件诊断,构建功能安全系统基座

1. 平台定位与核心价值解析在医疗、工业控制以及轨道交通这些领域,开发产品从来不只是实现功能那么简单。每一次代码的写入、每一次信号的输出,背后都关联着人的生命安全与重大财产保障。我经历过不少项目,在功能开发完成后,团队最…...

算法和数学模型转换在FPGA中实现问题

1.关于指数运算在FPGA中实现问题 比如,高斯函数,在FPGA直接实现指数函数会极大的消耗资源,并且延迟比较大; 这种一般的使用办法,就是使用LUT查找表来替换; 或者使用分段线性逼近法则; 或者使用泰…...

ArcMap新手必看:手把手教你给‘无家可归’的图层安个‘家’(Define Projection保姆级教程)

ArcMap坐标系急救指南:从“Unknown”到精确定位的完整解决方案 引言:当图层变成“流浪者”时 第一次在ArcMap中看到图层属性显示“Unknown”或“Undefined”时,很多新手会陷入困惑——这些数据明明有坐标数值,为什么软件却无法识别…...

c++生产者消费者者模式笔记-1阻塞问题

生产者消费者模式是并发编程的核心模式之一,核心是想要提高程序的运行效率。 这里记录一下自己的思考,使用通俗易懂的语言,和以日志记录为例,解读生产者消费者模式,并实现生产者消费者模式。 将生产者消费者模式的核心…...

智能视频转PPT:3分钟实现视频内容自动提取的完整方案

智能视频转PPT:3分钟实现视频内容自动提取的完整方案 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 你是否曾为整理会议录像中的PPT内容而烦恼?手动暂停、截…...

【Perplexity健身计划搜索实战指南】:20年AI搜索专家亲授3大精准检索心法,错过再等一年

更多请点击: https://codechina.net 第一章:Perplexity健身计划搜索实战指南导论 Perplexity 是一款以推理深度和引用可追溯性见长的 AI 搜索工具,特别适合需要结构化、证据支撑型信息检索的场景。在健身领域,用户常面临计划泛滥…...

MC/DC覆盖率:从原理到实战,破解100%覆盖率的迷思与挑战

1. 项目概述:当“完美”成为负担在软件测试领域,尤其是对安全关键系统(比如航空航天、汽车电子、医疗设备)的验证,我们常常听到一个词:100%覆盖率。这听起来像是一个终极目标,一个完美的终点。但…...

MATLAB数据处理小技巧:用reshape函数把一维数组变成你想要的任意形状(附图像处理实例)

MATLAB数据处理实战:reshape函数的高效应用与图像处理案例 当你面对一堆杂乱无章的一维数据时,是否曾为如何将其整理成适合分析的格式而头疼?在MATLAB中,reshape函数就像一位魔术师,能够在不改变数据本质的情况下&…...

3分钟掌握京东自动抢购神器:告别“手慢无“的终极指南

3分钟掌握京东自动抢购神器:告别"手慢无"的终极指南 【免费下载链接】autobuy-jd 使用python语言的京东平台抢购脚本 项目地址: https://gitcode.com/gh_mirrors/au/autobuy-jd 还在为京东限时秒杀商品总是抢不到而烦恼吗?面对心仪的热…...

Keil C编译器字符串常量合并机制与内存优化

1. Keil C编译器中的字符串常量合并机制解析在嵌入式开发中,内存优化是一个永恒的话题。Keil C编译器(包括C51、C166和C251版本)提供了一项智能特性——自动合并重复的字符串常量。这个功能看似简单,但对资源受限的嵌入式系统而言…...

百考通AI智能聚类文献,告别碎片化罗列

撰写文献综述,是学术写作中承上启下的关键一步。它不仅要展示你对研究领域的了解程度,更要体现你的归纳能力、批判思维和问题意识。然而,现实中许多学生却因资料庞杂、逻辑混乱或时间不足,难以写出一篇真正“有据、有理、有深度”…...

电子制造工厂场景,AI自动化方案主流厂商横评:2026年智慧工厂选型深度解析

站在2026年的时间节点回看,电子制造工厂的数字化转型已完成从“单点自动化”向“系统智能化”的跨越。 随着全球供应链波动的常态化,AI自动化方案已不再是锦上添花的“实验室项目”, 而是关乎企业在0.1毫米精度竞争中能否生存的底层基座。 根…...

免费开源乐谱识别工具Audiveris:从纸质乐谱到数字音乐的三步转换指南

免费开源乐谱识别工具Audiveris:从纸质乐谱到数字音乐的三步转换指南 【免费下载链接】audiveris Latest generation of Audiveris OMR engine 项目地址: https://gitcode.com/gh_mirrors/au/audiveris 还在为整理成堆的纸质乐谱而烦恼吗?Audiver…...

思源宋体TTF:5分钟掌握免费商用中文字体的完整使用指南

思源宋体TTF:5分钟掌握免费商用中文字体的完整使用指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 如果你正在寻找一款既专业又免费的中文字体,那么思源宋体…...

BBDown:专业高效的哔哩哔哩命令行下载器完全指南

BBDown:专业高效的哔哩哔哩命令行下载器完全指南 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown 在当今数字内容消费时代,高效获取和管理在线视频资源已成为许多…...