肿瘤预测案例中应用自动特征选择

news2024/11/24 19:39:50

肿瘤预测案例中应用自动特征选择

描述

当特征数量比较多时,模型容易变得更复杂,过拟合的可能性也会增加。这时除了进行降维处理外,还可以通过自动化特征选择选出最重要的部分特征,抛弃对结果影响不大的特征,从而得到泛化能力更好、更简洁的模型。如何选择最重要的那些特征?有三种基本策略:单变量统计(univariate statistics)、基于模型的选择(model-based selection)和迭代选择(iterative selection)。

本任务的实践内容包括:

1、应用单变量统计选择器(SelectKBset、SelectPercentile)

2、应用基于模型的特征选择器(SelectFromModel)

3、应用“递归特征消除”选择器(RFE)

源码下载

环境

  • 操作系统:Windows 10、Ubuntu18.04

  • 工具软件:Anaconda3 2019、Python3.7

  • 硬件环境:无特殊要求

  • 依赖库列表

    scikit-learn	0.24.2
    matplotlib      3.3.4
    numpy           1.19.5
    

分析

本任务使用乳腺癌(breast_cancer)数据集,该数据集包括569个样本,30个特征。为了说明特征选择的效果,我们再向数据集中增加50个无意义的噪音特征,要求应用多种特征选择策略选择特征,对比逻辑回归分类模型的预测准确性。

本任务涉及以下环节:

A)加载数据,增加噪音特征

B)使用SelectKBest特征选择器,建立逻辑回归模型,对比性能变化情况

C)将特征选择结果可视化

D)使用SelectPercentile特征选择器

E)使用SelectFromModel特征选择器

F)使用RFE(递归特征消除)选择器

实施

1、加载数据,增加噪音特征

原数据集有30个特征,为了说明自动特征选择的效果,增加50个无意义的噪音特征。

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import SelectPercentile, SelectKBest # 引入特征选择器
import numpy as np
import matplotlib.pyplot as plt

cancer = load_breast_cancer() # 加载肿瘤数据集
print('原数据特征个数:', cancer.data.shape[1]) # 原有30个特征

# 添加50列无意义的噪音特征
rng = np.random.RandomState(42)
noise = rng.normal(size=(len(cancer.data), 50)) 
data= np.hstack([cancer.data, noise])
print('增加噪音特征后的特征个数:', data.shape[1]) # 现有80个特征

结果如下:

原数据特征个数: 30
增加噪音特征后的特征个数: 80

特征个数又30个变为80个(后50个为噪音数据)

2、使用SelectKBest特征选择器,建立逻辑回归模型,对比性能变化情况

lr = LogisticRegression() # 创建逻辑回归模型

# 拆分数据集、建模评估
X_train, X_test, y_train, y_test = train_test_split(data, cancer.target, random_state=0)
lr.fit(X_train, y_train)
print('未使用特征选择时的成绩: %0.2f'%lr.score(X_test, y_test))

# 选择20个最优特征、建模评估
select = SelectKBest(k=20).fit(X_train, y_train)
X_train_select = select.transform(X_train)
X_test_select = select.transform(X_test)
print('自动选取的特征个数:', X_train_select.shape[1]) # 选出了20个特征
lr.fit(X_train_select, y_train) # 在选出的特征上建模
print('使用特征选择后的成绩: %0.2f'%lr.score(X_test_select, y_test))

结果如下:

未使用特征选择时的成绩: 0.87
自动选取的特征个数: 20
使用特征选择后的成绩: 0.95

说明:选择器从80个特征中自动选出20个最优特征,模型性能有所提升。

3、将特征选择结果可视化

# 可视化特征选择
selected = select.get_support() # 得到所选特征(输出为True|False数组)
plt.matshow(selected.reshape(1, -1)) # 可视化矩阵
plt.show()

结果如下:

请添加图片描述

可以看到,自动挑选的特征(黄色部分)都是从原特征(前30个)中选出,选择器剔除了无意义的噪音特征。

4、使用SelectPercentile特征选择器

# 使用SelectPercentile按百分比选择最优特征
select = SelectPercentile(percentile=20).fit(X_train, y_train) # 选择20%最优特征
X_train_select = select.transform(X_train)
print('自动选取的特征个数:', X_train_select.shape[1]) # 选出了16个特征(20%)
X_test_select = select.transform(X_test)

# 可视化特征选择
selected = select.get_support()
plt.matshow(selected.reshape(1, -1)) # 得到所选特征(True|False)
plt.show()

# 使用逻辑回归在选出的特征上建模、评估
lr.fit(X_train_select, y_train)
print('使用特征选择后的成绩: %0.2f'%lr.score(X_test_select, y_test))

结果如下:

请添加图片描述

5、使用SelectFromModel特征选择器

from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier

# 使用SelectFromModel选择器,基于决策树模型选择最优特征
select = SelectFromModel(RandomForestClassifier(n_estimators=50, random_state=0))
select.fit(X_train, y_train)
X_train_select = select.transform(X_train)
print('自动选取的特征个数:', X_train_select.shape[1])
X_test_select = select.transform(X_test)

# 可视化特征选择
selected = select.get_support() # 得到所选特征(True|False)
plt.matshow(selected.reshape(1, -1))
plt.show()

# 使用逻辑回归在选出的特征上建模、评估
lr.fit(X_train_select, y_train)
print('使用特征选择后的成绩: %0.2f'%lr.score(X_test_select, y_test))

结果如下:

请添加图片描述

说明:SelectFromModel(基于模型的特征选择器)首先利用随机森林模型选出最优特征,然后交给任务模型(本例中是逻辑回归)使用。

6、使用RFE迭代特征选择器

from sklearn.feature_selection import RFE

# 使用迭代特征选择器,基于决策树模型选择最优特征
select = RFE(RandomForestClassifier(n_estimators=50, random_state=0), n_features_to_select=30)
select.fit(X_train, y_train)
X_train_select = select.transform(X_train)
print('自动选取的特征个数:', X_train_select.shape[1])
X_test_select = select.transform(X_test)

# 可视化特征选择
selected = select.get_support() # 得到所选特征(True|False)
plt.matshow(selected.reshape(1, -1))
plt.show()

# 使用逻辑回归在选出的特征上建模、评估
lr.fit(X_train_select, y_train)
print('使用特征选择后的成绩: %0.2f'%lr.score(X_test_select, y_test))

结果如下:

请添加图片描述

说明:迭代特征选择效果较好,但由于使用了多个特征,计算效率不高。

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

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

相关文章

【创作赢红包】项目信息分析表

项目的背景和问题 项目背景: 很多父母都希望他们的孩子成为优秀的人,但是在实践中,他们的教育方式往往会出现一些与期望不符的情况。这可能是因为这些父母很大程度上是按照自己的父母的教育方式来教育孩子的,这导致一些不太好的…

思科ASA防火墙:控制防火墙不让访问指定网站

环境: 内网客户机:win10 思科asa防火墙 外网客户机:server 2016 win10可以通过域名访问网站 进入asa全局模式 access-list http permit tcp 192.168.6.0 255.255.255.0 any eq www access-list 名字 permit 协议 要被控制的网段 子网…

【C++】3. 缺省参数

文章目录一、缺省参数的定义二、缺省参数的使用规则一、缺省参数的定义 在c语言中,我们使用一个函数时,必须要传对应的参数,少一个都不可以。难道函数的参数就不能有个默认值吗?于是C对c做出了改良,创造了缺省参数。 …

opencv-4.1.2及opencv-contrib_4.1.2编译解决方案

一、首先在官网上下载opencv-4.1.2及opencv_contrib-4.1.2源码,两者需要保持版本一致,注意目录名称不要包含汉字。 二、到官网下载cmake-3.23.1-windows-x86_64 三、安装vs2017 四、安装Qt5.14.1选则msvc2017_32位、msvc2017_64位、mingw_32位、mingw_64…

【MySQL入门指南】数据库基本操作

文章目录MySQL库操作一、SQL语句二、创建数据库1.语法2.案例3.极其不推荐的方式三、查看数据库1.语法四、修改数据库五、删除数据库六、字符集与校验规则1.是什么2.相关指令3.校验规则的影响七、备份数据库1.基本语法2.注意事项MySQL库操作 一、SQL语句 DDL(data definition l…

算法的时间复杂度和空间复杂度(数据结构)

目录 1、算法效率 1>如何衡量一个算法的好坏 2>算法的复杂度 2、时间复杂度 1>时间复杂度的概念 2>大O的渐进表示法 2>时间复杂度计算例题 1、计算Func2的时间复杂度 2、计算Func3的时间复杂度 3、计算Func4的时间复杂度 4、计算strchr的时间复杂度 5、计算Bubb…

Android双目三维重建:Android双目摄像头实现双目测距

Android双目三维重建:Android双目摄像头实现双目测距 目录 Android双目三维重建:Android双目摄像头实现双目测距 1.开发版本 2.Android双目摄像头 3.双目相机标定 (1)双目相机标定-Python版 (2)双目相机标定-Matlab版 4.相机参数配置 5.Android 双…

【微服务笔记11】微服务组件之Hystrix服务监控的三种方式

这篇文章,主要介绍微服务组件之Hystrix服务监控的三种方式。 目录 一、Hystrix服务监控 1.1、Actuator实现服务监控 (1)引入依赖 (2)开放hystrix.stream端点 (3)运行测试 1.2、dashboard实…

分支机构防火墙里面的为PN怎么配置连接总部防火墙

环境: 分部:防火墙 8.0.48 AF-1000BB1510 总部:防火墙 8.0.75 AF-2000-FH2130B-SC 问题描述: 分支机构防火墙里面的为PN怎么配置连接总部防火墙 解决方案: 一、总部防火墙配置 1.sangfor 为pn配置 基本配置&a…

leetcode492. 构造矩形

题目描述解题思路执行结果leetcode 492. 构造矩形题目描述 作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的。 所以,现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面。要求&…

实例六:MATLAB APP design- 凸透镜成像光学研究小工具

该博文包含APP设计中Plot和Hold on的用法 在MATLAB APP design中,Hold on对应的代码为app.UIAxes.NextPlot=add; 其中app.UIAxes为坐标区域名字。 注:博文最后链接中包括MATLAB源代码及MATLAB APP design设计代码 一、APP 界面设计展示 注:在文本框中输入焦点和入射点…

含有分布式电源的三相不平衡配电网潮流计算【IEEE33节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Linux驱动IO篇——ioctl设备操作

文章目录ioctl命令编码规则ioctl系统调用过程驱动层实现应用层示例应用程序如果想要设置/获取驱动层的数据,一般是驱动提供一个ioclt接口,然后应用层调用。因此,学会在驱动中实现ioctl接口是必要的一项技能。 ioctl命令编码规则 想要定义一个…

每天一道大厂SQL题【Day20】华泰证券真题实战(二)表转置

每天一道大厂SQL题【Day20】华泰证券真题实战(二) 大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题&…

SpringBoot配置加载机制

目录 前言 官方文档:SpringBoot配置加载机制 外化配置加载顺序 application.properties默认位置 命名风格 Spring Boot 中的 ConfigurationProperties 定制PropertySource 主要步骤 切入位置 加载自定义properties文件 自定义文件(yapf.propert…

PM866-2 3BSE050201R1未来的工业将会更加智能化。

PM866-2 3BSE050201R1未来的工业将会更加智能化。 ​ 从工业到智慧工业,半导体厂商可以做什么? 从第一次工业革命开始到现在,工业领域发生了翻天覆地的变化,现在及未来的工业将会更加智能化。 意法半导体(ST&#xf…

南卡全新开放式OE Pro蓝牙耳机震撼上市,行业新标杆,再迎巅峰

近日,Nank南卡全新发布了一款不入耳开放式蓝牙耳机,创新打破无限可能。根据目前透露,新发布的南卡OE Pro不管是音质还是佩戴舒适度都一如既往的好,比市场内其他品牌的开放式耳机要高出几倍,各大媒体猜测,Na…

AI作画生成器,AI作画的优缺点

AI作画生成器,AI作画生成是一种基于人工智能技术的艺术创作方式,其在过去几年中得到了广泛应用和迅速发展。本文将以此为题,从几个方面来探讨AI作画生成。 一.什么是AI作画生成 AI作画生成,顾名思义,指的是使用人工智…

wifi理论数据速率计算

经常看到这样的数据,下面是802.11n协议,2X2天线的理论数据速率。: 下面我们就来了解下这是怎么计算出来的。 影响因素 速率的计算需要考虑的因素包括:调制方式、码率、子载波个数(带宽和协议模式不同,子载…

RK3399平台开发系列讲解(基础篇)延迟和定时器管理

🚀返回专栏总目录 文章目录 一、标准定时器1.1、jiffy和HZ1.2、定时器API二、高精度定时器(HRT)三、动态Tick/Tickless内核四、内核中的延迟和睡眠4.1、原子上下文4.2、非原子上下文沉淀、分享、成长,让自己和他人都能有所收获!😄 📢时间是继内存之后常用的资源之一。…