机器学习06 数据准备-(利用 scikit-learn基于Pima Indian数据集作 数据特征选定)

什么是数据特征选定?

数据特征选定(Feature Selection)是指从原始数据中选择最相关、最有用的特征,用于构建机器学习模型。特征选定是机器学习流程中非常重要的一步,它直接影响模型的性能和泛化能力。通过选择最重要的特征,可以减少模型的复杂性,降低过拟合的风险,并提高模型的训练和预测效率。

特征选定的过程可以采用以下一些常见的方法:

  1. 相关性分析:通过计算特征与目标变量之间的相关性,选择与目标变量高度相关的特征。可以使用相关系数、互信息等指标进行相关性分析。

  2. 特征重要性评估:对于一些机器学习模型(如决策树、随机森林、梯度提升树等),可以通过模型训练过程中特征的重要性评估来选择重要的特征。

  3. 方差选择:选择方差大于某个阈值的特征,过滤掉方差较小的特征,认为方差较小的特征对目标变量的影响较小。

  4. 正则化方法:使用正则化方法(如L1正则化、L2正则化)进行特征选择,通过加入正则化项来惩罚特征的权重,从而使得部分特征的权重变为零,实现特征选择。

  5. 基于模型的特征选择:使用某些机器学习模型(如递归特征消除、稳定性选择等)来评估特征的重要性,并选择最重要的特征。

  6. 基于特征工程的选择:通过领域知识和数据理解来选择最相关的特征,例如选择与问题背景相关的特征、选择对目标变量具有影响的特征等。

特征选定需要结合具体的数据和任务来进行,没有一种通用的方法适用于所有情况。选择合适的特征是一个迭代的过程,通常需要尝试不同的方法和参数来找到最佳的特征子集。重要的是要保持合理的特征维度,确保所选特征能够充分表达数据的信息,并且对于给定的机器学习任务是有效的。

在做数据挖掘和数据分析时,数据是所有问题的基础,并且会影响整个项目的进程。相较于使用一些复杂的算法,灵活地处理数据经常会取到意想不到的效果。

而处理数据不可避免地会使用到特征工程。那么特征工程是什么呢?有这么一句话在业界广为流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

因此,特征过程的本质就是一项工程活动,目的是最大限度地从原始数据中提取合适的特征,以供算法和模型使用。特征处理是特征工程的核心部分,scikit-learn 提供了较为完整的特征处理方法,包括数据预处理、特征选择、降维等。

通过 scikit-learn来自动选择用于建立机器学习模型的数据特征的方法。接下来将会介绍以下四个数据特征选择的方法:

· 单变量特征选定。
· 递归特征消除。
· 主要成分分析。
· 特征的重要性。

特征选定

特征选定是一个流程,能够选择有助于提高预测结果准确度的特征数据,或者有助于发现我们感兴趣的输出结果的特征数据。如果数据中包含无关的特征属性,会降低算法的准确度,对预测新数据造成干扰,尤其是线性相关算法(如线性回归算法和逻辑回归算法)。

因此,在开始建立模型之前,执行特征选定有助于:

  1. 降低数据的拟合度:较少的冗余数据,会使算法得出结论的机会更大。
  2. 提高算法精度:较少的误导数据,能够提高算法的准确度。
  3. 减少训练时间:越少的数据,训练模型所需要的时间越少。

可以在 scikit-learn 的特征选定文档中查看更多的信息(http://scikitlearn.org/stable/modules/feature_selection.html)。下面我们会继续使用PimaIndians的数据集来进行演示。

代码如下:

import pandas as pd
from numpy import set_printoptions
from sklearn.feature_selection import chi2, SelectKBest#数据预处理
path = 'D:\down\\archive\\diabetes.csv'
data = pd.read_csv(path)
#将数据转成数组
array = data.values
#分割数据
X = array[:, 0:8]
Y=array[:,8]#选择K个最好的特征,返回选择特征后的数据
test = SelectKBest(score_func=chi2, k=4)
#fit()方法,计算X中各个特征的相关性
fit = test.fit(X, Y)
#设置数据打印格式
set_printoptions(precision=3)print(fit.scores_)
#得分越高,特征越重要
features = fit.transform(X)
#显示特征
print(features)

执行结束后,我们得到了卡方检验对每一个数据特征的评分,以及得
分最高的四个数据特征。执行结果如下:

[ 111.52  1411.887   17.605   53.108 2175.565  127.669    5.393  181.304]
[[148.    0.   33.6  50. ][ 85.    0.   26.6  31. ][183.    0.   23.3  32. ]...[121.  112.   26.2  30. ][126.    0.   30.1  47. ][ 93.    0.   30.4  23. ]]

从这组数据中我们可以分析出得分最高 的分别是血糖,胰岛素含量,身体质量指数(BMI),年龄

通过设置SelectKBest的score_func参数,SelectKBest不仅可以执行卡方检验来选择数据特征,还可以通过相关系数、互信息法等统计方法来选定数据特征

递归特征消除

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

在 scikitlearn 文档中有更多的关于递归特征消除(RFE)的描述。下面的例子是以逻辑回归算法为基模型,通过递归特征消除来选定对预测结果影响最大的三个数据特征。

代码如下:

import pandas as pd
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression#数据预处理
path = 'D:\down\\archive\\diabetes.csv'
data = pd.read_csv(path)#打印标签名称
print(data.columns)#将数据转成数组
array = data.values
#分割数据,去掉最后一个标签
X = array[:, 0:8]Y = array[:, 8]
#特征选择
model = LogisticRegression()
#递归特征消除法,返回特征选择后的数据
rfe = RFE(model)
#拟合数据
fit = rfe.fit(X, Y)print("特征个数:", fit.n_features_)
print("被选特征:", fit.support_)print("特征排名:", fit.ranking_)

运行结果:

特征个数: 4
被选特征: [ True  True False False False  True  True False]
特征排名: [1 1 3 4 5 1 1 2]

主要成分分析

主要成分分析(PCA)是使用线性代数来转换压缩数据,通常被称作数据降维。

常见的降维方法除了主要成分分析(PCA),还有线性判别分析(LDA),它本身也是一个分类模型。PCA 和 LDA 有很多的相似之处,其本质是将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而 LDA 是为了让映射后的样本有最好的分类性能。

所以说,PCA 是一种无监督的降维方法,而LDA是一种有监督的降维方法。在聚类算法中,通常会利用PCA对数据进行降维处理,以利于对数据的简化分析和可视化。

详细内容请参考 scikit-learn的API文档。代码如下:

import pandas as pd
from sklearn.decomposition import PCA
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression#数据预处理
path = 'D:\down\\archive\\diabetes.csv'
data = pd.read_csv(path)#打印标签名称
print(data.columns)#将数据转成数组
array = data.values
#分割数据,去掉最后一个标签
X = array[:, 0:8]Y = array[:, 8]pca = PCA(n_components=4)fit = pca.fit(X)print("方差:", fit.explained_variance_ratio_)print(fit.components_)
方差: [0.88854663 0.06159078 0.02579012 0.01308614]
[[-2.02176587e-03  9.78115765e-02  1.60930503e-02  6.07566861e-029.93110844e-01  1.40108085e-02  5.37167919e-04 -3.56474430e-03][-2.26488861e-02 -9.72210040e-01 -1.41909330e-01  5.78614699e-029.46266913e-02 -4.69729766e-02 -8.16804621e-04 -1.40168181e-01][-2.24649003e-02  1.43428710e-01 -9.22467192e-01 -3.07013055e-012.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01][-4.90459604e-02  1.19830016e-01 -2.62742788e-01  8.84369380e-01-6.55503615e-02  1.92801728e-01  2.69908637e-03 -3.01024330e-01]]

没感觉,看不懂这个结果数据是怎么去进行分析的,先知道有这么个东西,后面再来补充

特征重要性

袋装决策树算法(Bagged Decision Tress)、随机森林算法和极端随机 树算法都可以用来计算数据特征的重要性。

这三个算法都是集成算法中的袋装算法,在后面的集成算法章节会有详细的介绍。下面给出一个使用ExtraTreesClassifier类进行特征的重要性计算的例子。

代码如下:

import pandas as pdfrom sklearn.ensemble import ExtraTreesClassifier#数据预处理
path = 'D:\down\\archive\\diabetes.csv'
data = pd.read_csv(path)#打印标签名称
print(data.columns[0:8])#将数据转成数组
array = data.values
#分割数据,去掉最后一个标签
X = array[:, 0:8]Y = array[:, 8]model = ExtraTreesClassifier()fit = model.fit(X, Y)print(fit.feature_importances_)

运行结果:

Index(['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin','BMI', 'DiabetesPedigreeFunction', 'Age'],dtype='object')
[0.10886677 0.22739778 0.10066603 0.07878746 0.07515111 0.146191220.11598885 0.14695078]

执行后,我们可以看见算法给出了每一个数据特征的得分,从得分中我们可以分析 得分高的也是跟前面特征 血糖,BMI,年龄等

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

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

相关文章

Linux安装操作(Mac版本)

Parallels Desktop的简介 Parallels Desktop是Mac平台上的虚拟机软件,也是Mac平台最好的虚拟机软件之一。它允许用户在Mac OS X系统上同时运行其他操作系统,例如Windows、Linux等。Parallels Desktop为Mac用户提供了使用其他操作系统和软件的便利性&…

【ASP.NET MVC】使用动软(三)(11)

一、问题 上文中提到,动软提供了数据库的基本操作功能,但是往往需要添加新的功能来解决实际问题,比如GetModel,通过id去查对象: 这个功能就需要进行改进:往往程序中获取的是实体的其他属性,比如…

基于 JavaScript 的富文本编辑器框架简单使用

1.打开wangEditor wangEditor开源 Web 富文本编辑器&#xff0c;开箱即用&#xff0c;配置简单https://www.wangeditor.com/ 2.html文件 <link href"https://unpkg.com/wangeditor/editorlatest/dist/css/style.css" rel"stylesheet"> <style&…

直播预告 | 开源运维工具使用现状以及可持续产品的思考

运维平台自上世纪90年代开始进入中国市场&#xff0c;曾形成以传统四大外企&#xff1a;IBM、BMC、CA、HP为代表的头部厂商&#xff0c;还有一众从网管起家的国内厂商。2010年前后&#xff0c;出现了以Zabbix、Nagios、Cacti为代表的开源工具&#xff0c;后来又陆续出现了Prome…

13-5_Qt 5.9 C++开发指南_基于信号量的线程同步_Semaphore

文章目录 1. 信号量的原理2. 双缓冲区数据采集和读取线程类设计3. QThreadDAQ和QThreadShow 的使用4. 源码4.1 可视化UI设计框架4.2 qmythread.h4.3 qmythread.cpp4.4 dialog.h4.5 dialog.cpp 1. 信号量的原理 信号量(Semaphore)是另一种限制对共享资源进行访问的线程同步机制…

PHP实践:用openssl打造安全可靠的API签名验证系统

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f3c6;本文已…

(前后端交互式)Ajax上传图片 + 更换背景图片

前后端交互图片文件 上传-图片 注意1&#xff1a;上传的图片必须在2MB以内 注意2&#xff1a;服务器端oss&#xff08;阿里云对象存储&#xff09;为了安全性&#xff0c;图片url网址不能直接在浏览器地址栏访问 请用img/背景图方式进行使用 上传图片的代码实现 \* 目标&#…

爬虫---练习源码

选取的是网上对一些球员的评价&#xff0c;来评选谁更加伟大一点 import csv import requests import re import timedef main(page):url fhttps://tieba.baidu.com/p/7882177660?pn{page}headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/53…

熟练掌握ChatGPT解决复杂问题——学会提问

目录 引言 一、5W1H分析法 1. 简单的问题&#xff08;what、where、when、who&#xff09; 2.复杂的问题&#xff08;why、how&#xff09; 2.1 为什么&#xff08;Why&#xff09;——原因 2.2 方式 &#xff08;How&#xff09;——如何 二、如何提问得到更高质量的答案…

【前端实习生备战秋招】—HTML 和 CSS面试题总结(二)

【前端实习生备战秋招】—HTML 和 CSS面试题总结&#xff08;二&#xff09; 1.有哪些方式可以对一个 DOM 设置它的 CSS 样式&#xff1f; 外部样式表&#xff0c;引入一个外部 css 文件内部样式表&#xff0c;将 css 代码放在 <head> 标签内部内联样式&#xff0c;将 c…

word怎么压缩到10m以下?文件压缩很简单

Word文档是我们工作和学习中一直需要用到的&#xff0c;但有时候Word文档体积过大&#xff0c;给存储和传输带来了不便&#xff0c;这时候我们可以做的就压缩Word。 通常情况下&#xff0c;影响Word文档过大的主要因素主要是图片过多、音视频插入、格式的设置、文字内容的增多以…

Html5播放器按钮在移动端变小的问题解决方法

Html5播放器按钮在移动端变小的问题解决方法 用手机浏览器打开酷播云视频&#xff0c;有时会出现播放器按钮太小的情况&#xff0c;此时只需在<head>中加入下面这段代码即可解决&#xff1a; <meta name"viewport" content"widthdevice-width, initia…

Java02-迭代器,数据结构,List,Set ,TreeSet集合,Collections工具类

目录 什么是遍历&#xff1f; 一、Collection集合的遍历方式 1.迭代器遍历 方法 流程 案例 2. foreach&#xff08;增强for循环&#xff09;遍历 案例 3.Lamdba表达式遍历 案例 二、数据结构 数据结构介绍 常见数据结构 栈&#xff08;Stack&#xff09; 队列&a…

word转pdf怎么转?几种常用方法分享

word转pdf怎么转&#xff1f;在日常工作和学习中&#xff0c;将Word文档转换为PDF格式是一项必要的任务。不仅可以保证文档的格式不变&#xff0c;还可以防止文档被他人篡改。但是&#xff0c;Word文档并不是所有人都能够轻松打开和编辑的&#xff0c;而PDF文件则可以在各种设备…

[SCOI2005] 繁忙的都市 并查集/最小生成树

城市中有 n n n个路口&#xff0c;交叉路口之间有道路相连&#xff0c;两个交叉路口之间最多有一条道路相连接。这些道路是双向的&#xff0c;且有一个分值。现在要求对道路进行构造&#xff0c;提出下面的要求&#xff1a; 改造的那些道路能够把所有的交叉路口直接或间接的连…

spring注解驱动开发(二)

17、Bean的生命周期 bean的生命周期&#xff1a;bean的创建—初始化—销毁的过程 容器负责管理bean的生命周期 我们可以自定义初始化和销毁方法&#xff0c;容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法 构造&#xff08;对象创建&#xff09; 单…

【更新】119所院校考研重点勾画更新预告!

截至目前&#xff0c;我已经发布了47篇不同院校的择校分析。发布了87套名校信号考研真题以及119所不同院校的考研知识点重点勾画。 另外为了更好服务已经报名的同学&#xff0c;24梦马全程班也到了收尾的阶段。即将封班&#xff01;需要报名的同学抓紧啦&#xff01; 去年开始…

从excel中提取嵌入式图片的解决方法

1 发现问题 我的excel中有浮动图片和嵌入式图片&#xff0c;但是openpyxl的_image对象只提取到了浮动图片&#xff0c;通过阅读其源码发现&#xff0c;这是因为openpyxl只解析了drawing文件导致的&#xff0c;所以确定需要自己解析 2 解决思路 1、解析出media资源 2、解析…

LeetCode 热题 100 JavaScript--20. 有效的括号

给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有…

React 路由使用-详细介绍

路由初使用 抽象路由模块 src\page\Article\index.js const Article () > {return (<div><p>文章页</p></div>); };export default Article;src\router\index.js // 导入页面 import Article from "../page/Article"; import Login fr…