什么是特征工程?

一、特征工程的概念

        特征工程是机器学习中的一个重要概念,它是从原始数据中提取和构建对模型预测任务更有用的特征的过程。特征工程的目的是提高模型的性能,使其能够更准确地捕捉到数据中的关键信息,合适的特征选择和转换可以帮助模型在新的、未见过的数据上表现更好,减少过拟合的风险。

二、常见的特征工程方法

1、特征选择

        特征选择是机器学习中的一项重要任务,目的是从诸多的特征中选择出对建模真正有意义的特征,从而减少特征维度、提升建模效果。试想有一份数据,每个样本都有1000个特征,我们必然不会直接使用这1000个特征进行建模,因为过多的特征维度不管从计算效率还是模型效果上都有着很大的劣势。这时候,我们可以通过一些恰当的特征选择方法选择出对建模真正有用的(即与标签分布强相关)特征,或许是10个特征,也或许是20个,但都比直接使用1000个特征建模好多了。

(1)过滤法(Filter)

        过滤法是一种快速的特征选择方法,它基于统计测试来评估每个特征与目标变量之间的关系。常见的过滤法包括:

  • 方差选择法(Variance Threshold):去除方差小于某个阈值的特征,因为低方差的特征可能不包含太多信息。
  • 相关系数法:选择与目标变量相关性最强的特征。
  • 卡方检验(Chi-squared test):评估类别特征与目标变量之间的独立性。
  • 互信息法:选择与目标变量互信息量最大的特征。

(2)包裹法(Wrapper)

        包裹法将特征选择过程视为搜索问题,通过候选特征子集的评估来找到最佳特征集合。这种方法通常使用模型的性能作为特征子集的评价标准。常见的包裹法包括:

  • 递归特征消除(Recursive Feature Elimination, RFE):递归地考虑越来越小的特征集。
  • 前向选择:从空集开始,逐渐添加特征,直到满足某个条件。
  • 后向消除:从全集开始,逐渐删除最不重要的特征。

(3)嵌入法(Embedded)

        嵌入法在模型训练过程中进行特征选择。一些模型,如决策树和正则化线性模型,能够提供特征的重要性评分,这些评分可以用于特征选择。常见的嵌入法包括:

  • 基于模型的特征选择:使用模型系数的大小来选择特征。
  • L1正则化:通过将特征系数压缩至零来选择特征。

2、特征构造

        特征构造是特征工程中的一个重要环节,它从原始数据中创建新的特征,以提高机器学习模型的性能。特征构造的原理基于对数据的深入理解,包括数据的业务背景、统计特性和潜在的模式。常见的特征构造方法有:

        (1)转换:将现有特征转换为新的形式,以更好地捕捉数据的模式。例如,对数变换、平方根变换或归一化等。一些机器学习/深度学习模型训练之前,都需要将特征归一化/标准化,这是为了避免特征取值量纲差异对模型产生太大影响。

        (2)聚合:通过对数据的不同部分进行聚合操作来创建新特征,比如计算时间序列数据的滑动平均值。

        (3)组合:将多个特征组合成一个新的特征,以揭示它们之间的关系。比如组合两个特征进行相加、相乘或计算比率。

        (4)分解:将单个特征分解为多个特征,以增加模型的解释力。

        (5)编码:将类别特征转换为数值形式,如独热编码(One-Hot Encoding)或标签编码(Label Encoding)。

        (6)差分:计算特征之间的差异,以提取变化率或趋势信息。

        (7)降维:通过方法如主成分分析(PCA)、UMAP降维来减少特征的数量,同时尽量保留原始数据的信息。

三、python应用示例

1、特征选择

        这里使用卡方检验作为特征选择的示例:

from sklearn.feature_selection import SelectKBest, chi2
from sklearn.datasets import load_iris# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 使用卡方检验选择特征
selector = SelectKBest(chi2, k=2)
X_new = selector.fit_transform(X, y)# 输出选择的特征
print("Selected features: ", iris.feature_names[selector.get_support()])

2、特征构造

        假设有一个关于二手车的数据集,我们想要构造新的特征来预测车辆的价格,可以进行以下特征的构造:计算车龄;计算里程与车龄的比率;根据车辆的功率和排量构造新特征;对品牌、燃油类型和变速箱类型进行独热编码;对车型进行标签编码;从注册日期中提取年份;根据是否有损伤构造二值特征等。

import pandas as pd
import numpy as np# 创建一个示例 DataFrame
data = {'first_registered': [2010, 2012, 2015, 2017, 2019],  # 首次注册年份'mileage': [50000, 30000, 20000, 15000, 5000],    # 里程'power': [100, 150, 120, 180, 160],               # 功率'displacement': [1.6, 2.0, 1.4, 1.8, 2.5],         # 排量'brand': ['BrandA', 'BrandB', 'BrandA', 'BrandC', 'BrandB'],  # 品牌'fuel_type': ['Diesel', 'Petrol', 'Diesel', 'Petrol', 'Hybrid'],  # 燃油类型'transmission': ['Manual', 'Automatic', 'Manual', 'Automatic', 'Automatic'],  # 变速箱类型'category': ['Compact', 'SUV', 'Sedan', 'Hatchback', 'Coupe'],  # 车型'damage': [0, 0, 1, 0, 0],  # 是否有损伤'registration': ['2024-01', '2024-02', '2024-03', '2024-04', '2024-05']  # 注册日期
}df = pd.DataFrame(data)# 计算车龄
df['age'] = 2024 - df['first_registered']# 计算里程与车龄的比率
df['mileage_age_ratio'] = df['mileage'] / df['age']# 根据车辆的功率和排量构造新特征
df['power_to_volume_ratio'] = df['power'] / df['displacement']# 将类别特征进行独热编码
df_encoded = pd.get_dummies(df, columns=['brand', 'fuel_type', 'transmission'])# 标签编码
df['category_label'] = df['category'].astype('category').cat.codes# 特征拆解
df['registration_year'] = df['registration'].str[:4]# 特征二值化
df['has_damage'] = (df['damage'] > 0).astype(int)# 输出结果
print(df)
print(df_encoded)

        这些新特征可以用于训练机器学习模型,当然,新特征同样需要通过特征选择方法评估是否有效,并非所有构造的新特征都对模型的训练起到正面作用。

四、总结

        笔者所介绍的特征工程方法主要是对特征进行选择和构造的过程,但需要注意的是,在进行特征工程之前的数据清洗是必不可少的一步(也可以把数据清洗看成是特征工程的一部分,而且是第一步)。对数据进行清洗,去空值、去非法值、去无效字段、删除诸如“序号”和“ID”等不相关特征之后,才能让数据保持比较干净的状态(俗话说“Garbage in,Garbage out”)。然后再进行特征工程才能起到事半功倍的效果。

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

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

相关文章

原生代理IP是什么?

代理IP的各个类型称呼有很多,且它们在网络使用和隐私保护方面扮演着不同的角色。今天将探讨什么是原生IP以及原生IP和住宅IP之间的区别,帮助大家更好地理解这两者的概念和实际应用,并选择适合自己的IP类型。 一、什么是原生IP? 原…

【Transformers实战篇2】练习之命名实体识别

文章目录 一、命名实体识别简介1.1 数据标注体系1.2 IOB2标注体系1.3 IOBES标注体系 二、代码实战2.1 导入相关包2.2 加载数据集2.3 数据集预处理2.3.1 借助word_idx实现标签映射 2.4 创建模型2.5 创建评估函数2.6 配置训练参数2.7 创建训练器2.8 模型训练2.9 模型预测 本文为 …

基于SSM的图书管理管理系统的设计与实现 (含源码+sql+视频导入教程)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的图书管理管理系统4拥有两种角色,用户可以浏览评论图书、登录注册,管理员可以进行图书馆管理、用户管理、分类管理等功能 1.1 背景描述 图书书店销售管理…

Apache OFBiz SSRF漏洞CVE-2024-45507分析

Apache OFBiz介绍 Apache OFBiz 是一个功能丰富的开源电子商务平台,包含完整的商业解决方案,适用于多种行业。它提供了一套全面的服务,包括客户关系管理(CRM)、企业资源规划(ERP)、订单管理、产…

Colorful/七彩虹将星X17 AT 22 Win11原厂OEM系统 带COLORFUL一键还原

安装完毕自带原厂驱动和预装软件以及一键恢复功能,自动重建COLORFUL RECOVERY功能,恢复到新机开箱状态。 【格式】:iso 【系统类型】:Windows11 原厂系统下载网址:http://www.bioxt.cn 注意:安装系统会…

这五本大模型书籍,让你从大模型零基础到精通,非常详细收藏我这一篇就够了

大模型(Large Language Models, LLMs)是近年来人工智能领域的一大热点,它们在自然语言处理、对话系统、内容生成等多个方面展现出了强大的能力。随着技术的发展,市面上出现了许多介绍大模型理论与实践的书籍,为研究人员…

【ADC】SAR 型 ADC 和 ΔΣ ADC 的选型决策方法

本文学习于TI 高精度实验室课程,介绍如何选择 SAR 或 delta-sigma 型 ADC。 文章目录 一、选型决策树二、特定传感器的应用三、需要 DC 精度但分辨率较低的应用四、需要 DC 精度且分辨率较高的应用五、极低噪声的 DC 精密测量六、需要捕获瞬态信号值的应用七、需要高…

敏感字段加密 - 华为OD统一考试(E卷)

2024华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集 题目描述 【敏感字段加密】给定一个由多个命令字组成的命令字符串: 1、字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号; 2、命令字之间以一个或多个下划线 进行分割; 3、可…

朋友圈信息流广告投放,曝光成本是多少?

微信作为国内最流行的社交平台之一,其朋友圈广告凭借精准的用户画像和强大的社交属性,成为了众多品牌商家进行市场推广的重要渠道。云衔科技推出了专业的微信朋友圈广告开户及代运营服务,旨在帮助企业轻松跨越技术门槛,精准触达目…

猜拳数据集-石头-剪刀-布数据集

“石头-剪刀-布”计算机视觉项目是一个利用摄像头捕捉手势并识别出手势是石头、剪刀还是布的项目。这类项目通常用于学习和展示计算机视觉技术,如图像处理、特征提取以及机器学习或深度学习模型的应用。 数据介绍 rock-paper-scissors Computer Vision Project数…

信息学奥赛复赛复习05-CSP-J2020-01优秀的拆分-对数函数、自然对数、以2为底的对数、幂函数、打表

PDF文档回复:20240927 1 2020 CSP-J 题目1 优秀的拆分 [题目描述] 一般来说,一个正整数可以拆分成若干个正整数的和 例如,11,101234 等。对于正整数 n的一种特定拆分,我们称它为“优秀的”,当且仅当在这种拆分下&am…

[element-ui]记录对el-table表头样式的一些处理

1、表头换行 & 列表项换行 可用element-table组件自带的方法实现列标题换行的效果 2、小圆点样式

程序员成长第一步,从成为开源社区贡献者开始!

程序员想要快速成长,就必须要要阅读大量的代码,学习别人的经验。幸好,这个世界有开源! 从使用开源项目到阅读源码,从阅读源码到贡献代码,是程序员成长的重要标志。 Apache 开源基金会已经成立超过25年了&am…

C++之STL—常用排序算法

sort (iterator beg, iterator end, _Pred) // 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置 // beg 开始迭代器 // end 结束迭代器 // _Pred 谓词 random_shuffle(iterator beg, iterator end); // 指定范围内的元素随机调…

JAVA JVM常见面试题

1.JVM的内存区域是怎么划分的? 2.OOM可能发生在哪些区域上? 根据javadoc的描述,OOM是指JVM的内存不够用了,同时垃圾收集器也无法提供更多的内存。从描述中可以看出,在JVM抛出OutOfMemoryError之前,垃圾收集…

rk3588S 调试USB摄像头

问题: 客户的 usb 摄像头 接上 板卡上的 USB2.0 的接口是可以的,但是 接上 typec 接口上的 OTGUSB的时候 ,就会出现,无法识别USB的问题。 情况的说明: 先来看一下硬件。 这里的 typec 接口实际上 只用到了 otg USB的 两根线, 也就是 把TYPEC 当做 USB2.0 来用了。(通…

2024-09-27 buildroot C和语言将 中文的GBK编码转换为 UTF-8 的代码, printf 显示出来,使用 iconv 库去实现。

一、GBK 的英文全称是 "Guobiao Kuozhan",意为 "National Standard Extended"。它是对 GB2312 编码的扩展,用于表示更多汉字和符号 GBK(国标扩展汉字编码)是一种用于简体中文和繁体中文字符的编码方式&#x…

起号半个月GMV 1300W+,视频号这个赛道真香!

双减”后,教育的主阵地重回学校和家庭,特别是家庭教育被赋予了更多的期待,家庭无疑要承担起更多教育职责。 同时亲子关系进一步受到考验,家庭教育除了辅导孩子学习外,更牵涉孩子成长的每个方面、每个点滴,掌…

计算机视觉|机器学习中图片特征向量的提取方式:开启图像世界的钥匙

文章目录 什么是特征向量?常见的图片特征向量提取方法1. **手工设计的特征**SIFT(尺度不变特征变换)HOG(方向梯度直方图) 2. **卷积神经网络 (CNN)**3. **预训练模型**4. **自监督学习** 结语 今天我们将一起深入探讨机…

C++:采用模板封装顺序表,栈,队列

1.顺序表&#xff1a; list.hpp #ifndef LIST_HPP #define LIST_HPP #include <iostream>using namespace std;template <class L>class Seqlist { private:L *ptr;L size;L len0;public:void init(L n){//堆区申请空间&#xff08;大小为n&#xff09;this->…