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

苏米特·班迪帕迪亚

照片由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)

十、结论

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

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

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

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

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

相关文章

LabVIEW中如何达到NI SMU最大采样率

LabVIEW中如何达到NI SMU最大采样率 NISMU的数字化仪功能对于捕获SMU详细的瞬态响应特性或表征待测设备(DUT)响应(例如线性调整率和负载调整率)至关重要。没有此功能,将需要一个外部示波器。 例如,假设在…

Docker start/stop/restart 命令

docker start:启动一个或多个已经被停止的容器。 docker stop:停止一个运行中的容器。 docker restart:重启容器。 语法 docker start [OPTIONS] CONTAINER [CONTAINER...]docker stop [OPTIONS] CONTAINER [CONTAINER...]docker restart…

设计循环队列(详解)

呀哈喽,我是结衣 今天给大家带来的内容如标题所述,我们来设计环形队列,虽然队列没有讲,但是我就是想讲啊。那么环形队列现在开始。 队列的属性 在设计环形队列前,我们先要了解队列的特点(先进先出&#x…

鸿蒙(HarmonyOS)应用开发——ArkTs学习准备

介绍 前面我们已经介绍了,如何安装HarmonyOS的IDE ,那么现在我们来介绍一下。HarmonyOS 开发的语言——ArkTs. ArkTS 是HarmonyOS的开发语言,他是typescript 的扩展,而typesrcipt是javascript的超集,如果你不太熟悉typescript语法…

qml Loader使用介绍

QML Loader 是 Qt Quick 框架中的一个元素,它允许你动态地加载和卸载 QML 组件。Loader 的作用主要体现在以下几个方面: 延迟加载:Loader 允许你在需要时才加载组件,而不是在应用程序启动时一次性加载所有组件。这样可以加快应用程序的启动时间,因为它只需要初始化用户当前…

MIT_线性代数笔记:列空间和零空间

目录 前言子空间综述列空间 Column space零空间(或化零空间)Nullspaceb 值的影响 Other values of b 前言 本节继续研究子空间,特别是矩阵的列空间(column space)和零空间(nullspace)。 子空间…

FreeRTOS的并行与并发思考

FreeRTOS的任务触发是由滴答时钟触发SysTick中断来触发调度器执行或阻塞或挂起和切换任务的。 首先是任务的并发能力,FreeRTOS的任务执行是基于全抢占调度机制,任务优先级按在就绪列表中由高到低排布,系统首先执行最高优先级任务,…

Django web开发(一) - 前端

文章目录 前端开发1.快速开发网站2.标签2.1 编码2.2 title2.3 标题2.4 div和span2.5 超链接2.6 图片小结标签的嵌套2.7 列表2.8 表格2.9 input系列2.10 下拉框2.11 多行文本用户注册案例: 用户注册GET 方式POST 方式表单数据提交优化 3.CSS样式3.1 快速上手3.2 CSS应用方式1. 在…

Docker run 命令

docker run :创建一个新的容器并运行一个命令 语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS说明: -a stdin:指定标准输入输出内容类型,可选STDIN/STDOUT/STDERR三项; -d:后台运行容器&am…

SAP-部分字段变更

在SAP中部分字段是可以自行调整的,例如下图 这个字段是客户组1,已经被改成一级经理,现在来操作改回客户组1 首先选择字段点击F1-技术信息-数据元素(双击) . . 保存,返回,激活,返…

redis运维(十八)pipeline

一 pipeline 流水线 说明: 这里讲解的不是jenkins的pipeline流水线这里pipeline: 管道 redis为什么要提供pipeline功能 事务和pipeline ① pipeline的理念 强调:单纯的pipeline跟事务没有关系redis-cli --pipe --> 使用了pipeline机制说明&a…

排序算法总结

1 排序算法 1.1 快速排序 1.1.1 算法思想 先取一个随机数,然后和数组的最后一个数交换 进行partition过程,也就是比数组最后一个数小的放在数组左边,大的放在右边,相等的在数组中间,最后把数组的最后一个数也要放到中…

【LeetCode刷题-回溯】-- 46.全排列

46.全排列 方法:回溯法 一种通过探索所有可能的候选解来找出所有的解的算法,如果候选解被确认不是一个解,回溯法会通过在上一步进行一些变化抛弃该解,即回溯并且再次尝试 使用一个标记数组表示已经填过的数 class Solution {pu…

【前端】yarn介绍和使用

yarn介绍和使用 一、什么是yarn?二、安装yarn三、yarn用法四、yarn更多用法 一、什么是yarn? yarn是快速、可靠、安全的依赖管理。 yarn官网:https://yarn.nodejs.cn/ Yarn 是代码的包管理器。 它允许你与世界各地的其他开发者使用和共享&am…

如何设置实现本地JumpServer远程访问管理界面

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。JumpS…

C语言for循环结构经典练习

文章目录 一、for循环基本知识二、经典例题及解析1.水仙花数2.求规定范围内的完数3.求规定范围内质数4.计算阶乘之和5.计算55555555555555(类型)6.计算112123123412345(类型)7.判断用户输入正整数的位数8.判断某正整数是否为回文数9.九九乘法表10.统计用户输入的字符中&#xf…

PTA 公路村村通

现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N)&…

JVM 之 javac、java、javap 命令详解

目录 一. 前言 二. javac 命令 三. java 命令 四. javap 命令 一. 前言 在日常工作中,我们新建 Java工程,写好代码后,编译和运行几乎都是通过 IDE(如idea、eclipse)工具完成。但作为 Java开发者还是要了解下 Java虚…

Modbus RTU协议及modbus库函数使用

一、与Modbus TCP的区别 在一般工业场景使用modbus RTU的场景还是更多一些,modbus RTU基于串行协议进行收发数据,包括RS232/485等工业总线协议。 与modbus TCP不同的是RTU没有报文头MBAP字段,但是在尾部增加了两个CRC检验字节(CRC…