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

news2024/11/26 12:48:50

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

过拟合是如何发生的?

过拟合(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.coloradmin.cn/o/2207334.html

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

相关文章

好用,易用,高效,稳定 基于opencv 的 图像模板匹配 - python 实现

在定位、搜索固定界面图块时,经常用到模板匹配,opencv自带的图像模板匹配好用,易用,高效,稳定,且有多种匹配计算方式。 具体示例如下: 模板图: 待搜索图: 具体实现代码…

苹果正式宣布:iPhone全面开放近场通信(Near Field Communication,简称NFC)【使用安全元件提供app内NFC数据交换功能】

文章目录 引言I iPhone的NFC功能开发者用户数据交换的体验革新安全与隐私II 知识扩展:近场通信(NFC)技术钱包NFC开关打开读取NFC标签(NFC tags )权限demo引言 2014年iPhone 6开始,苹果首次引入了NFC功能,但最初只允许自家的Apple Pay进行移动支付。慢慢地适配了交通卡,增…

基于go开发的终端版即时通信系统(c-s架构)

项目架构图 类似一个聊天室一样 整体是一个客户端和服务端之间的并发多线程网络通信,效果可以翻到最后面看。 为了巩固基础的项目练手所以分为9个阶段进行迭代开发 版本⼀:构建基础Server 新建一个文件夹就叫golang-IM_system 第一阶段先将server的大…

沈阳化工大学第十一届程序设计沈阳区竞赛:凿冰 Action(博弈论,思维)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 北极探险队有新收获了!!! 北极探险队发现了NNN条长度不一的冰柱,由于冰柱里封存有价值的生物,现在需要两名生物学家小A和小…

TON生态小游戏开发:推广、经济模型与UI设计的建设指南

随着区块链技术的快速发展,基于区块链的Web3游戏正引领行业变革。而TON生态小游戏,借助Telegram庞大的用户基础和TON(The Open Network)链上技术,已成为这一领域的明星之一。国内外开发者正迅速涌入,开发和…

如何在算家云搭建Kolors(图像生成)

一、模型介绍 Kolors 是快手 Kolors 团队基于潜在扩散的大规模文本转图片生成模型。经过数十亿个文本-图片对的训练,Kolors 在视觉质量、复杂语义准确性和中英文文本渲染方面均比开源和闭源模型具有显著优势。此外,Kolors 支持中英文输入,在…

C语言基础语法——类型转换

数据有不同的类型,不同类型数据之间进行混合运算时涉及到类型的转换问题。 转换的方法有两种: 自动类型转换(隐式转换):遵循一定的规则,由编译系统自动完成强制类型转换(显示转换)…

http协议概述与状态码

目录 1.HTTP概述 1.1请求报文起始行与开头 ​1.2响应报文起始行 ​ 1.3响应报文开头 ​ 2.http状态协议码 1.HTTP概述 默认端口 80 HTTP超文本传输与协议: 数据请求和响应 传输:将网站的数据传递给用户 超文本:图片 视频等 请求request:打开网站 访问网站 响应r…

Python数据分析-垃圾邮件分类

一、研究背景 随着电子通信技术的飞速发展,电子邮件已经成为人们日常工作和生活中不可或缺的一部分。然而,伴随着这一趋势,垃圾邮件(Spam)的数量也在急剧增加。垃圾邮件不仅会占用用户的邮箱空间,还可能含…

设置dl服务解决github pushTimed out问题

提交代码到GitHub,一直提示提交失败 我们一般是fq挂的dl服务器进行的,而git需要配置下dl,此时我们要将dl服务器对应的IP地址和端口为我们所调用。 查找dl服务器(windows直接搜索dl服务器设置,mac参考官网&#xff09…

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第二十二章 安装VMware Tool 工具

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

学习python自动化——pytest单元测试框架

一、什么是pytest 单元测试框架,unittest(python自带的),pytest(第三方库)。 用于编写测试用例、收集用例、执行用例、生成测试结果文件(html、xml) 1.1、安装pytest pip instal…

【ARM Linux驱动开发】嵌入式ARM Linux驱动开发基本步骤

【ARM Linux驱动开发】嵌入式ARM Linux驱动开发基本步骤 文章目录 开发环境驱动开发(以字符设备为例)安装驱动应用程序开发附录:压缩字符串、大小端格式转换压缩字符串浮点数压缩Packed-ASCII字符串 开发环境 首先需要交叉编译器和Linux环境…

豆包PixelDance指南:字节跳动推出的AI视频生成大模型,突破多主体互动难关

豆包PixelDance是由字节跳动旗下火山引擎发布的AI视频生成大模型。它是业界首个突破多主体互动难关的视频生成模型,支持多风格多比例的一致性多镜头生成。PixelDance基于DiT架构,具备高效的DiT融合计算单元,能够实现复杂的多主体运动交互和多…

【高等数学】 一元函数积分学

1. 不定积分的计算 1.1. 基本积分表 知识点 例题 1.2. 凑微分(第一类换元法) 知识点 本质:利用复合函数求导法则的逆运算 第一步,识别或者凑出来复合函数的导函数 如果被积函数具备以下特点: 1.它由两项相乘来表…

《案例》—— OpenCV 实现2B铅笔填涂的答题卡答案识别

文章目录 一、案例介绍二、代码解析 一、案例介绍 下面是一张使用2B铅笔填涂选项后的答题卡 使用OpenCV 中的各种方法进行真确答案识别,最终将正确填涂的答案用绿色圈出,错误的答案不圈出,用红色圈出错误题目的正确答案最终统计正确的题目数…

PCL用KDtree,给搜索到的邻近点上色

用KDtree&#xff0c;给搜索到的邻近点上色。 #include <pcl/io/pcd_io.h> #include <pcl/point_types.h>#include <pcl/search/kdtree.h> // 包含kdtree头文件 #include <pcl/visualization/pcl_visualizer.h> #include <boost/thread/thread.hpp&…

【MATLAB】基于RSSI的蓝牙定位程序,4个锚点、二维平面

目录 ​编辑 商品描述 主要功能 技术细节 适用场景 下载链接 商品描述 这款基于接收信号强度指示&#xff08;RSSI&#xff09;原理的蓝牙定位程序&#xff0c;专为需要高效、可靠定位解决方案的开发者和研究人员设计。它能够在二维平面内&#xff0c;通过4个锚点实现对未…

ESNP静态路由进阶

0x01 前言 前一篇文章说了一个简单的ESNP静态路由实验&#xff0c;那么后面给了一个进阶拓扑&#xff1a;https://blog.csdn.net/Moxin1044/article/details/142850946 现在我们来解决一下 0x02 拓扑图 在上一个拓扑图基础上&#xff0c;规划了一个新的7.0网段&#xff0c;那…

DGX平台

NVIDIA DGX 平台 文章目录 前言一、优势经过验证的企业 AI 标准体验 DGX 平台的优势1. 先进的 AI 开发平台2. 融入了 NVIDIA AI 专业技术和服务3. 性能卓越、成本可预测二、用例DGX 助力 AI 走向各行各业1. 壳牌推动能源领域不断取得突破2. 宝马借助 AI 重新定义工厂物流3. 索尼…