基于python的机器学习(七)—— 数据特征选择

目录

一、特征选择概念

二、特征选择的方法

2.1 过滤式特征选择

2.1.1 方差分析

2.1.2 相关系数

2.1.3 卡方检验

2.2 包裹式特征选择

2.2.1 递归特征消除

2.3 嵌入式特征选择

2.3.1 决策树特征重要性


一、特征选择概念

特征选择是机器学习非常重要的一个步骤,它指的是从原始数据中选择最相关的特征,以用于训练模型和预测。通过特征选择,可以提高模型的性能、减少过拟合、降低计算复杂度。

下面是使用随机森林进行特征选择的示例代码:

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification# 创建一个样本数据集
X, y = make_classification(n_samples = 1000, n_features = 20, n_informative = 10, random_state = 0)# 使用随机森林进行特征选择
clf = RandomForestClassifier()
clf.fit(X, y)# 输出特征重要性
feature_importances = clf.feature_importances_
print("Feature importances:\n", feature_importances)# 选择重要性大于阈值的特征
selected_features = [i for i, importance in enumerate(feature_importances) if importance > 0.05]
print("Selected features:\n", selected_features)

二、特征选择的方法

特征选择的方法主要分为三类:过滤式特征选择、包裹式特征选择和嵌入式特征选择。

2.1 过滤式特征选择

过滤式特征选择是在特征选择和模型训练之前独立进行的,它基于特征之间的统计指标或特征和目标变量之间的相关性来评估特征的重要性。常用的过滤方法包括方差分析、相关系数、卡方检验等。这种方法的优势在于计算简单快速,适用于大规模数据集,但可能忽略了特征之间的相互关系。

2.1.1 方差分析

方差分析用于比较两个或多个组之间的平均值是否有显著差异。在特征选择中,可以利用方差分析来评估不同特征对目标变量的影响程度。

from scipy import stats# 示例数据
group1 = [10, 20, 30, 40, 50]
group2 = [15, 25, 35, 45, 55]
group3 = [5, 15, 25, 35, 45]# 进行方差分析
f_statistic, p_value = stats.f_oneway(group1, group2, group3)if p_value < 0.05:print("均值之间存在显著差异")
else:print("均值之间不存在显著差异")

2.1.2 相关系数

相关系数用于衡量两个变量之间的线性相关性。在特征选择中,可以通过计算特征与目标变量之间的相关系数来筛选与目标变量相关性高的特征。

import pandas as pd# 示例数据
data = {'feature1': [1, 2, 3, 4, 5],'feature2': [2, 4, 6, 8, 10],'target': [5, 10, 15, 20, 25]}df = pd.DataFrame(data)# 计算特征与目标变量之间的相关系数
correlation = df.corr()['target']
print(correlation)

2.1.3 卡方检验

卡方检验适用于分类变量之间的关联性检验,用于判断两个分类变量之间是否存在显著关联。

在scikit-learn中提供了SelectKBest类, 是对卡方验证的实现,通过SelectKBest 使用一系列的统计方法来选定数据特征。

卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趋于符合,若两个值完全相等时,卡方值就为0,表明理论值完全符合。

下面是通过卡方检验的方式来选择四个对结果影响最大的数据特征:(印地安人糖尿病数据集

from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2filename = 'Sklearn\pima_data.csv'          # 导入数据
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names = names)array = data.values
X = array[:, 0:8]       # 将数据分为输入数据和输出结果
Y = array[:, 8]test = SelectKBest(score_func = chi2, k = 4)    # 特征选定
fit = test.fit(X, Y)
set_printoptions(precision = 3)
print(fit.scores_)
features = fit.transform(X)
print(features)

2.2 包裹式特征选择

包裹式特征选择是在模型训练的过程中进行的,它直接利用模型的性能来评估特征的重要性。常见的包裹式方法包括递归特征消除(RFE)、基于模型的特征选择等。这种方法的优势在于考虑了特征之间的相互影响,但计算开销较大,不适用于大规模数据集。

2.2.1 递归特征消除

递归特征消除(RFE),使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。通过每一次基模型的精度,来找到对最终的预测结果影响最大的数据特征。在scikit-learn文档中有更多的关于递归特征消除(RFE)的描述。

下面是通过递归特征消除来选定对预测结果影响最大的三个数据特征:(印地安人糖尿病数据集

from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegressionfilename = 'Sklearn\pima_data.csv'        # 注意数据集的路径
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names = names)array = data.values
X = array[:, 0:8]
Y = array[:, 8]model = LogisticRegression()            # 特征选定
rfe = RFE(model, n_features_to_select = 3)
fit = rfe.fit(X, Y)print("特征个数:\n",fit.n_features_)
print("被选定的特征:\n",fit.support_)
print("特征排名:",fit.ranking_)

2.3 嵌入式特征选择

嵌入式特征选择是将特征选择嵌入到模型训练的过程中,常用的方法包括Lasso回归、决策树特征重要性等。这种方法可以同时考虑特征的重要性和模型的性能,得到的特征选择结果较为稳健。但是,嵌入式特征选择通常需要调节超参数,对模型的选择和调优有一定要求。

2.3.1 决策树特征重要性

决策树是一种常用的机器学习算法,除了用于预测和分类外,还可以用于特征选择。在决策树算法中,可以通过计算特征的重要性来衡量特征对模型预测的贡献程度,从而进行特征选择。

使用ExtraTreesClassifier类进行特征重要性计算,让算法给出每一个数据特征的得分:

from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifierfilename = 'Sklearn\pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names = names)array = data.values
X = array[:, 0:8]
Y = array[:, 8]model = ExtraTreesClassifier()
fit = model.fit(X, Y)
print(fit.feature_importances_)

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

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

相关文章

《AI工程技术栈》:三层结构解析,AI工程如何区别于ML工程与全栈工程

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Redis数据库-消息队列

一、消息队列介绍 二、基于List结构模拟消息队列 总结&#xff1a; 三、基于PubSub实现消息队列 (1)PubSub介绍 PubSub是publish与subscribe两个单词的缩写&#xff0c;见明知意&#xff0c;PubSub就是发布与订阅的意思。 可以到Redis官网查看通配符的书写规则&#xff1a; …

归一化函数 & 激活函数

目录 Softmax函数 定义 输入输出 例子 总结 Layernorm 定义 输入输出 Sigmoid函数 定义 Tanh函数 定义 Relu函数 定义 Elu函数 定义 Gelu函数 定义 总结 Softmax函数 定义 softmax函数又称归一化指数函数&#xff0c;其作用是将一个 n 维的实值向量转换为…

使用 C# 入门深度学习:线性代数详细讲解

在深度学习的领域中&#xff0c;线性代数是基础数学工具之一。无论是神经网络的训练过程&#xff0c;还是数据的预处理和特征提取&#xff0c;线性代数的知识都无处不在。掌握线性代数的核心概念&#xff0c;对于理解和实现深度学习算法至关重要。在本篇文章中&#xff0c;我们…

【通用智能体】Serper API 详解:搜索引擎数据获取的核心工具

Serper API 详解&#xff1a;搜索引擎数据获取的核心工具 一、Serper API 的定义与核心功能二、技术架构与核心优势2.1 技术实现原理2.2 对比传统方案的突破性优势 三、典型应用场景与代码示例3.1 SEO 监控系统3.2 竞品广告分析 四、使用成本与配额策略五、开发者注意事项六、替…

CICD遇到npm error code EINTEGRITY的问题

场景 CICD编译时抛出npm error code EINTEGRITY的错误 npm error code EINTEGRITY npm error sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA integrity checksum failed when using sha512: wanted sha512-PlhdFcillOINfeV…

Android13 wifi设置国家码详解

Android13 wifi设置国家码详解 文章目录 Android13 wifi设置国家码详解一、前言二、设置wifi国家码相关代码1、adb或者串口也能设置和获取当前国家码&#xff08;1&#xff09;查询命令的方式&#xff08;2&#xff09;获取和设置国家码的示例 2、Java代码设置国家码3、获取当前…

c/c++的opencv高斯模糊

深入探索图像高斯模糊&#xff1a;原理、C/C实现与OpenCV应用 在图像处理的众多技术中&#xff0c;模糊&#xff08;或平滑&#xff09;是最为基础且不可或缺的一环。它广泛应用于降噪、图像预处理、特征提取前的平滑以及计算机图形学中的各种视觉效果。在高斯模糊&#xff08…

Java求职者面试:从Spring Boot到微服务的技术点解析

Java求职者面试&#xff1a;从Spring Boot到微服务的技术点解析 场景&#xff1a;互联网医疗-预约挂号系统 面试官&#xff1a; “小明&#xff0c;我们今天的场景是一个互联网医疗的预约挂号系统。我们需要支持高并发的用户预约操作&#xff0c;同时保证数据一致性和系统的高…

专业 YouTube SEO 方案:打造高排名视频的关键步骤

YouTube 是全球订阅量最高的社交媒体平台之一。YouTube 为发布创意视频内容和针对特定受众开展营销活动提供了无限可能&#xff0c;是任何品牌内容营销策略的重要组成部分。 但是&#xff0c;为了发展您的 YouTube 频道并消除噪音&#xff0c;优化您的视频内容以便可以在搜索结…

Java Collection(集合) 接口

Date: 2025-05-21 20:21:32 author: lijianzhan Java 集合框架提供了一组接口和类&#xff0c;以实现各种数据结构和算法。 以下是关于 Java 集合的核心内容说明&#xff1a; /*** Java Collection Framework 说明&#xff1a;** 在 Java 中&#xff0c;集合&#xff08;Collec…

如何用ipmitool修改FRU信息?

如何用ipmitool修改FRU信息&#xff1f; FRU&#xff08;Field Replaceable Unit&#xff0c;现场可更换单元&#xff09;记录了服务器硬件的关键信息&#xff0c;如序列号、制造商、型号等。通过ipmitool修改FRU信息&#xff0c;常用于硬件维护、资产标签更新或调试场景。以下…

uniapp vue 开发微信小程序 分包梳理经验总结

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“uniapp vue 开发微信小程序 分包梳理经验总结”。 在使用 UniAppvue框架开发微信小程序时&#xff0c;当项目比较大的时候&#xff0c;经常需要分包加载。它有助于控制主包的大小&#xff0c;从而提升小程序的启…

git合并多次commit提交

首先查看历史记录 git log 查看你想要合并的commit是哪些&#xff08;注意&#xff1a;这里是逆序&#xff0c;最上的是最新提交&#xff09; 找到当前想要合并的最后一个记录&#xff0c;复制该记录的下一个记录的 id&#xff08;黄色部分commit id&#xff09;&#xff0c…

系统架构设计(七):数据流图

定义 数据流图&#xff08;Data Flow Diagram, DFD&#xff09;是一种用于表示信息系统数据流转及处理过程的图形工具。 它反映系统功能及数据之间的关系&#xff0c;是结构化分析与设计的重要工具。 主要符号 符号说明描述举例方框外部实体&#xff08;源或终点&#xff09…

MAUI与XAML交互:构建跨平台应用的关键技巧

文章目录 引言1. 代码隐藏文件关联1.1 XAML文件与代码隐藏文件的关系1.2 部分类机制1.3 InitializeComponent方法1.4 XAML命名空间映射 2. 元素名称与x:Name属性2.1 x:Name属性的作用2.2 命名规则与最佳实践2.3 x:Name与x:Reference的区别2.4 编译过程中的名称处理 3. 在代码中…

php://filter的trick

php://filter流最常见的用法就是文件包含读取文件&#xff0c;但是它不止可以用来读取文件&#xff0c;还可以和RCE&#xff0c;XXE&#xff0c;反序列化等进行组合利用 filter协议介绍 php://filter是php独有的一种协议&#xff0c;它是一种过滤器&#xff0c;可以作为一个中…

微信小程序开发中,请求数据列表,第一次请求10条,滑动到最低自动再请求10条,后面请求的10条怎么加到第一次请求的10条后面?

在微信小程序中实现分页加载数据列表&#xff0c;可通过以下步骤将后续请求的10条数据追加到首次加载的数据之后&#xff1a; 实现步骤及代码示例 定义页面数据与参数 在页面的 data 中初始化存储列表、页码、加载状态及是否有更多数据的标识&#xff1a; Page({data: {list…

如何利用 Java 爬虫根据 ID 获取某手商品详情:实战指南

在电商领域&#xff0c;获取商品详情数据对于市场分析、选品上架、库存管理和价格策略制定等方面具有重要价值。某手作为国内知名的电商平台&#xff0c;提供了丰富的商品资源。通过 Java 爬虫技术&#xff0c;我们可以高效地根据商品 ID 获取某手商品的详细信息。本文将详细介…

电平匹配电路

1、为什么要电平匹配? 现在很多SOC器件为了降低功耗,都把IO口的电平设计成了1.8V,核电压0.85V,当这种SOC做主平台时,在做接口设计需要格外关注电平的匹配。单板中经常需要将1.8V的电平转换成3.3V或者转成5V。如果没有注意到输入和输出信号之间的电平匹配,系统就无法正常…