特征工程完整指南 - 第二部分

苏米特·班迪帕迪亚

照片由Dan Cristian Pădureş在Unsplash上拍摄

一、说明

DATA,通常被称为原油,需要经过加工和清洁才能有效地用于各种用途。正如我们不直接使用来自其来源的石油一样,数据也经过类似的处理以提取其真正价值。

二、特征选择

特征选择是从数据集中的大量可用特征中选择相关特征子集的过程。由于以下原因,这是机器学习的重要一步

  • 它使机器学习算法能够更快地训练。
  • 它减少了过度拟合,增强了可解释性,并降低了计算复杂性。
  • 提高模型性能和准确性

特征工程完整指南 - 第一部分-CSDN博客

三、单变量特征选择:

        单变量特征选择方法侧重于单独评估每个特征,而不考虑特征之间的关系。这些方法包括统计检验,例如卡方、方差分析或互信息。目标是选择与目标变量相关性最高的特征,丢弃不相关的特征。

SelectKBest:根据单变量统计测试(例如卡方、f_regression 或mutual_info_regression)选择前 k 个特征

from sklearn.feature_selection import SelectKBest, chi2

# Assuming X contains the input features and y contains the target variable

# Create an instance of SelectKBest with chi-squared test
selector = SelectKBest(score_func=chi2, k=5)

# Fit the selector to the data
selector.fit(X, y)

# Get the selected features
X_selected = selector.transform(X)

SelectPercentile:使用相同的统计测试,根据得分最高的特征的百分位数选择排名靠前的特征。

from sklearn.feature_selection import SelectPercentile, f_classif

# Assuming X contains the input features and y contains the target variable

# Create an instance of SelectPercentile with f_classif test and percentile=50
selector = SelectPercentile(score_func=f_classif, percentile=50)

# Fit the selector to the data
selector.fit(X, y)

# Get the selected features
X_selected = selector.transform(X)

四、递归特征消除(RFE):

        RFE 是一种迭代特征选择技术,从所有特征开始,逐步消除最不重要的特征。它依靠机器学习模型的性能或特征系数来确定特征重要性。通过迭代删除特征,RFE 可以识别优化模型性能最有影响力的子集。

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

# Assuming X contains the input features and y contains the target variable

# Create an instance of Logistic Regression
estimator = LogisticRegression()

# Create an instance of RFE with the logistic regression estimator
selector = RFE(estimator, n_features_to_select=3)

# Fit the selector to the data
selector.fit(X, y)

# Get the selected features
X_selected = selector.transform(X)

五、基于模型的特征选择:

        基于模型的特征选择技术使用机器学习模型来评估特征重要性。模型根据系数、特征权重或特征重要性来估计特征重要性。基于 L1 的正则化,例如 Lasso 回归,可以将不相关的特征系数缩小到零,从而有效地执行特征选择。

from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import Lasso

# Assuming X contains the input features and y contains the target variable

# Create an instance of Lasso Regression
estimator = Lasso(alpha=0.1)

# Create an instance of SelectFromModel with Lasso estimator
selector = SelectFromModel(estimator)

# Fit the selector to the data
selector.fit(X, y)

# Get the selected features
X_selected = selector.transform(X)

六、基于树的特征选择:

        基于树的算法,例如随机森林和梯度提升,提供了内在的特征选择机制。这些算法根据特征对模型性能的贡献程度来分配特征重要性。具有较高重要性的特征被认为更相关,并且可以被选择用于进一步分析。

from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier

# Assuming X contains the input features and y contains the target variable

# Create an instance of Random Forest Classifier
estimator = RandomForestClassifier()

# Create an instance of SelectFromModel with Random Forest estimator
selector = SelectFromModel(estimator)

# Fit the selector to the data
selector.fit(X, y)

# Get the selected features
X_selected = selector.transform(X)

SelectFromModel方法在内部使用 RandomForestClassifier 模型计算特征重要性来确定要选择的特征。

SelectFromModel方法根据指定的阈值或预定义的重要性标准自动选择特征它根据特征重要性确定重要性阈值,并选择满足或超过该阈值的特征。

七、特征重要性

        特征重要性是一种为数据集中的每个特征分配分数的度量。该分数表示每个特征与目标变量的重要性或相关性级别。

        基于树的分类器,例如随机森林分类器和额外树分类器,具有内置的特征重要性类。此类允许您在数据集(例如虹膜数据集)上训练模型,然后使用 feature_importance_ 属性计算每个特征的重要性得分。

        在下面的示例中,我们将在 iris 数据集中训练额外的树分类器,并使用内置类 feature_importance_ 来计算每个特征的重要性。

# Load libraries
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.ensemble import ExtraTreesClassifier

# Load iris data
iris_dataset = load_iris()
  
# Create features and target
X = iris_dataset.data
y = iris_dataset.target
  
# Convert to categorical data by converting data to integers
X = X.astype(int)
 
 # Building the model
extra_tree_forest = ExtraTreesClassifier(n_estimators = 5,
                                        criterion ='entropy', max_features = 2)
  
# Training the model
extra_tree_forest.fit(X, y)
  
# Computing the importance of each feature
feature_importance = extra_tree_forest.feature_importances_
  
# Normalizing the individual importances
feature_importance_normalized = np.std([tree.feature_importances_ for tree in 
                                        extra_tree_forest.estimators_],
                                        axis = 0)

# Plotting a Bar Graph to compare the models
plt.bar(iris_dataset.feature_names, feature_importance_normalized)
plt.xlabel('Feature Labels')
plt.ylabel('Feature Importances')
plt.title('Comparison of different Feature Importances')
plt.show()

标准化特征重要性

上图显示最重要的特征是花瓣长度 (cm)花瓣宽度 (cm)最不重要的特征是萼片宽度 (cm)。这意味着您可以使用最重要的功能来训练模型并获得最佳性能。

八、皮尔逊相关系数矩阵

相关性是一种统计度量,表示两个变量之间关系的强度。两种主要类型的相关性是正相关性和负相关性。当两个变量朝同一方向移动时,就会出现正相关;当一个增加时,另一个也会增加。

两个变量 X 和 Y 之间的皮尔逊相关系数可以使用以下公式计算

皮尔逊相关系数公式

相关系数的值可以取-1到1之间的任意值。

  • 如果值为 1,则表示两个变量之间呈正相关。这意味着当一个变量增加时,另一个变量也会增加。
  • 如果值为 -1,则表示两个变量之间呈负相关。这意味着当一个变量增加时,另一个变量就会减少。
  • 如果值为 0,则两个变量之间不存在相关性。这意味着变量彼此之间以随机方式变化。

在下面的示例中,我们将使用 Scikit-learn 库中的波士顿房价数据集和pandas 中的corr() 方法来查找数据框中所有特征的成对相关性:

# Load libraries
from sklearn.datasets import load_boston
import matplotlib.pyplot as plt
import seaborn as sns


# load boston data
boston_dataset = load_boston()

# create a daframe for boston data
boston = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)
  
# Convert to categorical data by converting data to integers
#X = X.astype(int)
 
#ploting the heatmap for correlation
ax = sns.heatmap(boston.corr().round(2), annot=True) 

在提供的图中,很明显,特征 RAD 和 RAD 表现出显着的正相关性,而特征 DIS 和 NOX 表现出很强的负相关性。

当您在数据集中发现相关特征时,这表明它们传达了相似的信息。在这种情况下,建议消除相关特征之一。

九、顺序特征选择:

顺序特征选择方法评估特征子集而不是单个特征。他们根据选定的评估指标(例如模型性能或交叉验证分数)迭代地添加或删除功能。前向选择从空集开始,逐步添加特征,而后向消除则从所有特征开始,一一删除。

from sklearn.feature_selection import SequentialFeatureSelector
from sklearn.linear_model import LogisticRegression

# Assuming X contains the input features and y contains the target variable

# Create an instance of Logistic Regression
estimator = LogisticRegression()

# Create an instance of SequentialFeatureSelector with logistic regression estimator
selector = SequentialFeatureSelector(estimator, direction='forward', k_features=3)

# Fit the selector to the data
selector.fit(X, y)

# Get the selected features
X_selected = selector.transform(X)

十、结论

        特征选择是机器学习中提高模型性能、可解释性和效率的重要技术。通过理解和应用适当的特征选择技术,您可以识别与模型最相关的特征,减少过度拟合并增强其泛化能力。无论您使用单变量方法、递归消除、基于模型的方法、基于树的技术还是顺序选择,选择取决于您的特定数据集和问题的要求。

        通过利用这些特征选择技术,您可以简化机器学习流程并构建更准确、更高效、更可解释的模型。

        请记住,特征选择是整个模型开发过程的关键部分,应该仔细执行和评估,以确保所选特征真正具有信息性和相关性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——栈的详细介绍

数据结构——栈 一、栈的结构和概念二、 栈的两种构建方式①、用数组进行构建②、用链表进行构建 三、栈的创建四、栈的初始化五、栈的销毁六、压栈七、出栈八、判空九、获取栈顶元素十、获取栈的size 一、栈的结构和概念 栈:栈是一种特殊的线性表,其只…

【数据分享】全国1-5级流域、河流矢量数据与水体分布、五级水系数据、八级水系边界范围矢量数据

全国3级流域及各级河流数据:今天给大家分享的数据主要为五个,分别为3级流域、1级河流数据、3级以上河流数据以及4级和5级的河流数据。其中1级河流和3级以上河流数据中存在线状矢量以及面状的湖泊数据;4级和5级的河流数据仅为线状的河流矢量数据。数据中大…

Mysql 8.0主从复制模式安装(兼容Mysql 5.7)

Mysql V8.0.35安装 官网地址:MySQL :: Download MySQL Community Server 下载【Mysql 8.0.35】压缩包 解压压缩包,仅保留6个安装文件即可 mysql-community-client-8.0.31-1.el7.x86_64.rpm mysql-community-client-plugins-8.0.31-1.el7.x86_64.rpm my…

一文带你拿下MySQL之增删查改(基础)

✏️✏️✏️今天给各位带来的是关于数据库增删查改基础方面的知识。 清风的CSDN博客 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! 动动你们发财的小手&#xf…

消息中间件——RabbitMQ(三)理解RabbitMQ核心概念和AMQP协议!

前言 本章学习,我们可以了解到以下知识点: 互联网大厂为什么选择RabbitMQ?RabbiMQ的高性能之道是如何做到的?什么是AMQP高级协议?AMQP核心概念是什么?RabbitMQ整体架构模型是什么样子的?Rabbi…

[译]JavaScript中Base64编码字符串的细节

本文作者为 360 奇舞团前端开发工程师 本文为翻译 原文标题:The nuances of base64 encoding strings in JavaScript 原文作者:Matt Joseph 原文链接:https://web.dev/articles/base64-encoding Base64编码和解码是一种常见的将二进制内容转…

【剪枝】torch-pruning的基本使用

论文:DepGraph: Towards Any Structural Pruning 工程:https://github.com/VainF/Torch-Pruning 算法和库的使用介绍:CVPR 2023 | DepGraph 通用结构化剪枝 1 TP的简介 该算法介绍了DepGraph 如何建模结构化剪枝中的层依赖,实现任…

redis的集群

高可用方案 1、持久化 2、高可用 主从复制 哨兵模式 集群 主从复制: 主从复制是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用 主从复制实现数据的多机备份,以及读写分离(主服务器负责写,从服务器…

云HIS系统源码,医院管理系信息统源码,融合B/S版四级电子病历系统

医院管理信息系统是以推进公共卫生、医疗、医保、药品、财务监管信息化建设为着力点,整合资源,加强信息标准化和公共服务信息平台建设,逐步实现统一高效、互联互通的管理系统。 SaaS模式Java版云HIS系统,在公立二甲医院应用三年…

代餐粉产业分析:中国市场销售额增长至116.94亿元

近年来,随着人们生活节奏的加快和健康意识的增强,代餐粉市场规模逐渐壮大。在这个忙碌的时代,快捷、营养而又方便的代餐粉成为了许多人选择的首选。 随着健康理念的不断普及和推广,人们开始更加重视日常饮食的健康与营养。代餐粉作…

Vellum —— 简介

目录 一,介绍 二,原理 三,PBD算法 一,介绍 Vellum是一个解算模拟框架,使用更高级的PBD(XPBD,extended position based dynamics),是2nd Order Integration&#xff08…

Go 实现网络代理

使用 Go 语言开发网络代理服务可以通过以下步骤完成。这里,我们将使用 golang.org/x/net/proxy 包来创建一个简单的 SOCKS5 代理服务作为示例。 步骤 1. 安装 golang.org/x/net/proxy 包 使用以下命令安装 golang.org/x/net 包,该包包含 proxy 子包&am…

2023亿发数字化智能工单,专业管理工单处理全流程,助力企业转型腾飞

伴随着智能化和信息化的不断深入,企业数字化转型势如腾飞。在这个过程中,工单管理成为生产、家电、后勤等多个管理场景下频繁应用的关键环节。如何满足管理方对设备、服务等智能化管理的需求,提升工单管理效率、规范管理流程,并实…

问题:vue2+elementui,tabs切换显示表格并设置表格选中行高亮失败

错误示范: 1.直接setCurrentRow失败(this.currentRow是之前保存的表格当前选中行的数据) this.$refs.table.setCurrentRow(this.currentRow);2.以为是表格没生成就执行了setCurrentRow导致设置不成功,所以使用了this.$nextTick&…

英国国家量子计算中心与IBM签署重要协议!英国进入实用量子时代

​(图片来源:网络) 近日,英国国家量子计算中心(NQCC)与IBM达成了一项重要协议。根据该协议,NQCC将为英国研究人员提供IBM量子高级计划的云访问权限,其中包括IBM的量子计算系统舰队。…

SpringBoot Admin

前言 Spring Boot Admin 是一个管理和监控 Spring Boot 应用程序的开源项目,它提供了一个简洁的 Web 界面来监控 Spring Boot 应用程序的状态和各种运行时指标。Spring Boot Admin 可以帮助开发者快速了解应用程序的状态,并快速定位错误或性能问题。下面…

赛氪荣幸受邀参与中国联合国采购促进会第五次会员代表大会

11 月21 日 (星期二) 下午14:00,在北京市朝阳区定福庄东街1号中国传媒大学,赛氪荣幸参与中国联合国采购促进会第五次会员代表大会。 2022年以来,联合国采购杯全国大学生英语大赛已经走上了国际舞台,共有来自…

HC32L110小华半导体SWD模式切换的问题

在将SWD配置为普通引脚并配置为输出后,如果需要重新配置为SWD,需要将其配置为输入才行,如下: Clk_SetFunc(ClkFuncSwdPinIOEn, TRUE); //配置SWD引脚为普通引脚模式 Gpio_InitIOExt(SWCLK_PORT, SWCLK_PIN, GpioDirOut, TRUE,…

垃圾收集器的种类及概述

1.JVM参数 1.1标准参数所有jdk版本通用参数 -version -help -server -cp 1.2-X参数 非标准参数,也就是在JDK各个版本中可能会变动 -Xint 解释执行 -Xcomp 第一次使用就编译成本地代码 -Xmixed 混合模式,JVM自己来决定 1.3 -XX参数 使用得最多…

一个测试驱动的Spring Boot应用程序开发

文章目录 系统任务用户故事搭建开发环境Web应用的框架Spring Boot 自动配置三层架构领域建模域定义与领域驱动设计领域类 业务逻辑功能随机的Challenge验证 表示层RESTSpring Boot和REST API设计API第一个控制器序列化的工作方式使用Spring Boot测试控制器 小结 这里采用面向需…