机器学习 | 特征选择如何减少过拟合?

在快速发展的机器学习领域,精确模型的开发对于预测性能至关重要。过度拟合的可能性,即模型除了数据中的潜在模式外,还拾取训练集特有的噪声和振荡,这是一个固有的问题。特征选择作为一种有效的抗过拟合武器,为提高模型的效率和通用性提供了一种途径。

过拟合是如何发生的?

过拟合(Overfitting)是机器学习中的一个重要概念,它通常发生在模型训练的过程中。过拟合描述的是模型在训练数据上表现过于优秀,以至于对训练数据中的噪声或异常值也进行了学习,导致模型在未知数据或测试数据上的泛化能力较差。此外,如果模型与训练集中的观测数量相比具有太多的参数,则模型可能能够记住训练数据,而不是理解底层模式。

什么是特征选择?

特征选择(Feature Selection)是一种数据预处理技术,旨在从原始的特征集中选择出最有效、最具代表性的特征子集,以便提高学习算法的性能和降低计算开销。特征选择的过程主要包括产生特征子集、评价特征子集、确定停止准则以及验证所选特征子集的有效性。

特征选择如何减少过拟合?

特征选择可以通过简化模型和关注最相关的特征来减少过拟合。

具体来说,特征选择减少过拟合的方式主要有以下几点:

  1. 减少噪声和冗余特征:通过特征选择,我们可以去除那些与目标变量不相关或者相关性很弱的特征,这些特征往往包含噪声或冗余信息,如果将其纳入模型,可能会导致模型过于复杂,增加过拟合的风险。

  2. 降低模型复杂度:减少特征数量实际上也相当于降低了模型的复杂度。在模型复杂度过高时,模型可能过于关注训练数据中的细节和噪声,导致过拟合。通过特征选择,我们可以使模型更加简洁,减少其拟合噪声的能力,从而降低过拟合的可能性。

  3. 提高模型的可解释性:通过特征选择,我们可以保留那些对预测结果有重要影响的特征,使得模型更加易于理解和解释。这不仅有助于我们更好地理解数据的内在规律,也有助于我们发现和纠正可能导致过拟合的问题。

  4. 加速模型训练:减少特征数量还可以加速模型的训练过程。在特征数量较多时,模型的训练时间可能会很长,而且容易陷入局部最优解。通过特征选择,我们可以缩短训练时间,同时提高模型的稳定性和泛化能力。

需要注意的是,虽然特征选择可以降低过拟合的风险,但也不能过度简化模型。如果去除的特征过多,可能会导致模型欠拟合,即模型无法充分学习数据的内在规律,从而在测试数据上的性能较差。因此,在进行特征选择时,需要根据具体问题和数据集的特点进行权衡和选择。

具体实践案例

导入相关库

import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest, SelectPercentile, RFE, SelectFromModel
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

加载数据集

# Load the iris dataset
iris = load_iris()
X, y = iris.data, iris.target# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

1. 特征选择的相关性

使用相关性是识别数据集中特征之间关系的常用技术。它有助于理解哪些功能是密切相关的,并且可能是冗余的。以下是如何使用相关性:

  • 计算相关矩阵:计算数据集的相关矩阵。该矩阵显示了每对特征之间的相关系数。
  • 可视化相关矩阵:创建相关矩阵的热图,以可视化特征之间的关系。较高的相关系数(接近1或-1)表示关系较强。
  • 确定重要特征:寻找与目标变量(如果是监督学习问题)或其他特征高度相关的特征。与目标高度相关的特征通常是良好的预测器,而与其他特征高度相关的特征可能是冗余的。
  • 选择特征:根据相关性矩阵,您可以决定保留、删除或进一步调查某些特征。特征之间的高相关性可能表明多重共线性,这可能会对某些模型(如线性回归)产生不利影响。
# Calculate the correlation matrix
iris_corr_matrix = iris_df.corr()# Create a heatmap of the correlation matrix
plt.figure(figsize=(8, 6))
sns.heatmap(iris_corr_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('Correlation Matrix for Iris Dataset')
plt.show()

在这里插入图片描述
在这里,我们看到目标主要与花瓣长度和花瓣宽度相关,因此如果我们想获得最重要的特征,我们也可以选择这些特征。

如果您要在此数据集上执行特征选择或特征重要性分析,选择花瓣长度和花瓣宽度作为最重要的特征可能是一种合理的方法,因为它们与目标变量具有高度相关性。这些特征为区分不同种类的鸢尾提供了有价值的信息。

2. 筛选方法

A. SelectKBest

SelectKBest基于评分函数对前k个特征进行评分。在这种情况下,k=2用于选择前2个特征。

# SelectKBest
selector_kbest = SelectKBest(k=2) # Select top 2 features
X_train_kbest = selector_kbest.fit_transform(X_train, y_train)

B. SelectPercentile

根据最高分数的百分位数对最高特征进行排序。这里,百分位数=50用于选择前50%的特征。

# SelectPercentile
selector_percentile = SelectPercentile(percentile=50) # Select top 50% features
X_train_percentile = selector_percentile.fit_transform(X_train, y_train)

C. RFE (Recursive Feature Elimination)

递归删除最不重要的特征,直到达到所需的特征数量。n_features_to_select=2用于选择前2个特征。

# RFE (Recursive Feature Elimination)
estimator = LogisticRegression(max_iter=1000) # Base estimator
selector_rfe = RFE(estimator=estimator, n_features_to_select=2) # Select top 2 features
X_train_rfe = selector_rfe.fit_transform(X_train, y_train)

D. 从估计器模型选择

基于由估计器计算的重要性权重的阈值来识别特征。threshold ='mean’用于选择重要性大于平均重要性的特征。

# RFE (Recursive Feature Elimination)
estimator = LogisticRegression(max_iter=1000) # Base estimator
selector_rfe = RFE(estimator=estimator, n_features_to_select=2) # Select top 2 features
X_train_rfe = selector_rfe.fit_transform(X_train, y_train)

E.随机森林相关性

使用随机森林模型中的特征重要性作为筛选方法。选择重要性大于阈值=0.1的特征。

# SelectFromModel
estimator = RandomForestClassifier() # Base estimator
selector_model = SelectFromModel(estimator=estimator, threshold='mean') # Select features with importance greater than mean
X_train_model = selector_model.fit_transform(X_train, y_train)# Random Forest correlations
model = RandomForestClassifier()
model.fit(X_train, y_train)
importances = model.feature_importances_
threshold = 0.1
X_train_rf_corr = X_train[:, importances > threshold]

比较通过不同方法所选的特征

# Display selected features for each method
print("Selected features using SelectKBest:")
print(selector_kbest.get_support(indices=True))
print("\nSelected features using SelectPercentile:")
print(selector_percentile.get_support(indices=True))
print("\nSelected features using RFE:")
print(selector_rfe.get_support(indices=True))
print("\nSelected features using SelectFromModel:")
print(selector_model.get_support(indices=True))
print("\nSelected features using Random Forest correlations:")
print([i for i in range(len(importances)) if importances[i] > threshold])

输出

Selected features using SelectKBest:
[2 3]Selected features using SelectPercentile:
[2 3]Selected features using RFE:
[2 3]Selected features using SelectFromModel:
[2 3]Selected features using Random Forest correlations:
[2, 3]

使用不同方法选择的特征是相同的,这表明所有方法都同意特征2和3的重要性。数据集中的特征对应于花瓣长度和花瓣宽度,这对于分类来说是非常有用的。

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

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

相关文章

JAVA科技赋能共享台球室无人系统小程序源码

科技赋能共享台球室无人系统 —— 智慧台球新体验 🎱 科技引领,台球室迎来无人新纪元 在这个日新月异的科技时代,共享经济的浪潮席卷而来,为我们的生活带来了诸多便利。而今天,我要为大家介绍的,正是科技…

【高等代数笔记】线性空间(十九-二十四上半部分)

课程视频剪辑得太抽象了,一节课不能完整学完,拆的零零散散得。 3. 线性空间 3.19 满秩矩阵 【推论4】设 rank ( A ) r \text{rank}(\boldsymbol{A})r rank(A)r,则 A \boldsymbol{A} A的不为0的 r r r阶子式所在的列(行&#x…

2.3MyBatis——插件机制

2.3MyBatis——插件机制 1.基本用法2.原理探究2.1加载过程2.2执行过程2.2.1 插件的执行点2.2.2 SQL执行的几个阶段2.2.3 如何梳理出执行流程 合集总览:Mybatis框架梳理 插件机制是一款优秀框架不可或缺的组成部分,比如spring、dubbo,还有…

链表(2)_两两交换链表中的节点_面试题

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 链表(2)_两两交换链表中的节点_面试题 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌…

T11:优化器对比实验

T11周:优化器对比实验 **一、前期工作**1.设置GPU,导入库 **二、数据预处理**1.导入数据2.检查数据3.配置数据集4.数据可视化 **三、构建模型****四、训练模型****五、模型评估**六、总结 🍨 本文为🔗365天深度学习训练营 中的学习记录博客&a…

【前端碎片记录】大文件分片上传

大文件分片上传,主要是为了提高上传效率,避免网络问题或者其他原因导致整个上传失败。 HTML部分没什么特殊代码,这里只写js代码。用原生js实现,框架中可参考实现 // 获取上传文件的 input框 const ipt document.querySelector(…

aws(学习笔记第五课) AWS的firewall SecurityGroup,代理转发技术

aws(学习笔记第五课) AWS的firewall– SecurityGroup,代理转发技术 学习内容: AWS的firewall– SecurityGroup代理转发技术 1. AWS的filewall– SecurityGroup 控制进入虚拟服务器的网络流量 通常的firewall(防火墙)配置 AWS上使用安全组进行网络流量…

息肉检测数据集 yolov5 yolov8适用于目标检测训练已经调整为yolo格式可直接训练yolo网络

息肉检测数据集 yolov5 yolov8格式 息肉检测数据集介绍 数据集概述 名称:息肉检测数据集(基于某公开的分割数据集调整)用途:适用于目标检测任务,特别是内窥镜图像中的息肉检测格式:YOLO格式(边…

Transactional注解导致Spring Bean定时任务失效

背景 业务需要定时捞取数据库中新增的数据做数据处理及分析,更新状态,处理结束。而我们不能随意定义线程池,规定使用统一的标准规范来定义线程池。如在配置文件中配置线程池的属性:名称,线程核心数等,任务…

04-SpringBootWeb案例(中)

3. 员工管理 完成了部门管理的功能开发之后,我们进入到下一环节员工管理功能的开发。 基于以上原型,我们可以把员工管理功能分为: 分页查询(今天完成)带条件的分页查询(今天完成)删除员工&am…

Linux_kernel内核定时器14

一、内核定时器 1、内核定时器 使用方法: 2、系统时钟中断处理函数 1)更新时间 2)检查当前时间片是否耗尽 Linux操作系统是基于时间片轮询的,属于抢占式的内核 3)jiffies 3、基本概念 1)HZ HZ决定了1秒钟产…

OCP迎来新版本,让OceanBase的运维管理更高效

近期,OceanBase的OCP发布了新版本,全面支持 OceanBase 内核 4.3.2 及更低版本。新版本针对基础运维、性能监控、运维配置、外部集成等多个方面实现了 20余项的优化及强化措施,增强产品的易用性和稳定性,从而帮助用户更加高效地管理…

中国地级市生态韧性数据及城市生态韧性数据(2000-2022年)

一测算方式: 参考C刊《管理学刊》楚尔鸣(2023)老师的做法,城市生态韧性主要衡量一个城市在面临生态环境系统压力或突发冲击时,约束污染排放、维护生态环境状态和治理能力提升的综合水平。 参考郭海红和刘新民的研究&a…

Redis持久化机制(RDBAOF详解)

目录 一、Redis持久化介绍二、Redis持久化方式1、RDB持久化(1) 介绍(2) RDB持久化触发机制(3) RDB优点和缺点(4) RDB流程 2、AOF(append only file)持久化(1) 介绍(2) AOF优点和缺点(3) AOF文件重写(4) AOF文件重写流程 三、AOF和RDB持久化注意事项 一、Redis持久化介绍 Redis…

【小工具分享】下载保存指定网页的所有图片

一、保存百度首页所有的图片 先看一下保存的图片情况 二、思路 1、打开网页 2、获取所有图片 3、依次下载保存图片到指定路径 三、完整代码 from selenium import webdriver from selenium.webdriver.common.by import By b webdriver.Firefox() import urllib.request…

C++系统教程004-数据类型(03)

一 .变量 变量是指在程序运行期间其值可以发生改变的量。每个变量都必须有一个名称作为唯一的标识,且具有一个特定的数据类型。变量使用之前,一定要先进行声明或定义。 1.变量的声明和定义 C中,变量声明是指为变量提供一个名称&#xff0c…

嵌入式面试——FreeRTOS篇(七) 软件定时器

本篇为:FreeRTOS 软件定时器篇 一、软件定时器的简介 1、定时器介绍 答: 定时器:从指定的时刻开始,经过一个指定时间,然后触发一个超时事件,用户可以自定义定时器周期。 硬件定时器:芯片本…

基于差分进化灰狼混合优化的SVM(DE-GWO-SVM)数据预测算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 DE优化 4.2 GWO优化 5.完整程序 1.程序功能描述 基于差分进化灰狼混合优化的SVM(DE-GWO-SVM)数据预测算法matlab仿真,对比SVM和GWO-SVM。 2.测试软件版本以及运行结果展示…

论文阅读:Split-Aperture 2-in-1 Computational Cameras (二)

Split-Aperture 2-in-1 Computational Cameras (一) Coded Optics for High Dynamic Range Imaging 接下来,文章介绍了二合一相机在几种场景下的应用,首先是高动态范围成像,现有的快照高动态范围(HDR)成像工作已经证…

自然语言处理(NLP)论文数量的十年趋势:2014-2024

引言 近年来,自然语言处理(NLP)已成为人工智能(AI)和数据科学领域中的关键技术之一。随着数据规模的不断扩大和计算能力的提升,NLP技术从学术研究走向了广泛的实际应用。通过观察过去十年(2014…