机器学习特征选择方法
时间:2020-05-27
本文章向大家介绍机器学习特征选择方法,主要包括机器学习特征选择方法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
单变量特征选择
单变量特征选择是通过选择那些基于单变量统计检验(univariate statistical tests)得出的最优特征来实现的。它可以看作是估计器的一个预处理步骤。Scikit-learn将一系列特征选择程序作为不同的类提供给我们,这些类都实现了 transform
方法:
- SelectKBest 选择得分最高的K个特征,其余的特征都删除。
- SelectPercentile 删除除用户指定的最高得分百分比以外的所有特征
- 对每个特征使用通用的单变量统计检验:假阳率(false positive rate)SelectFpr,伪发现率(false discovery rate) SelectFdr或多重比较谬误(family wise error)SelectFwe。
- GenericUnivariateSelect允许使用可配置的策略来执行单变量特征选择。这允许使用超参数搜索估计器(hyper-parameter search estimator)选择最佳的单变量选择策略。
例如,我们可以对样本执行一个χ2测试来挑选出两个最好的特征(chi2方式)
>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectKBest
>>> from sklearn.feature_selection import chi2
>>> X, y = load_iris(return_X_y=True)
>>> X.shape
(150, 4)
>>> X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
>>> X_new.shape
(150, 2)
这些对象把输入当做计分函数,返回单变量分数(univariate scores)和p值(或对于SelectKBest
和 SelectPercentile
来说,仅仅返回分数):
- 对于回归:f_regression,mutual_info_regression
- 对于分类:chi2,f_classif,mutual_info_classif
基于F-检验的方法可以估计两个随机变量之间的线性依赖度(linear dependency)。另一方面,基于互信息(mutual information)的方法可以捕捉任何类型的统计依赖性(statistical dependency),但由于互信息方法是无参数的,他们需要更多的样本才能进行准确的估计。
#特征相关性权重柱状图输出
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest,f_classif
from sklearn.feature_selection import chi2
import numpy as np
iris=load_iris()
x,y=iris.data,iris.target
print(x.shape)
x_new=SelectKBest(f_classif,k=2).fit_transform(x,y)
print(x_new.shape)
#方法1-采用卡方检验的方式进行特征的提取(统计依赖度)
import numpy as np
from sklearn.feature_selection import SelectKBest,chi2
import matplotlib.pyplot as plt
selector=SelectKBest(chi2,k=2)
selector.fit(x,y)
s=-1*np.log10(selector.pvalues_)
plt.bar(range(len(iris.feature_names)),s)
plt.xticks(range(len(iris.feature_names)),iris.feature_names)
plt.show()
#方法2-采用F检验方法的方式进行特征的提取(线性依赖度)
import numpy as np
from sklearn.feature_selection import SelectKBest,f_classif
import matplotlib.pyplot as plt
selector=SelectKBest(f_classif,k=2)
selector.fit(x,y)
s=-1*np.log10(selector.pvalues_)
plt.bar(range(len(iris.feature_names)),s)
plt.xticks(range(len(iris.feature_names)),iris.feature_names)
plt.show()
#方法3—使用集成学习算法的特征重要性输出进行类比
from sklearn import ensemble
params={"n_estimators":100,"max_depth":4,"min_samples_split":2,"learning_rate":0.01,"loss":"ls"}
clf=ensemble.GradientBoostingRegressor(**params)
clf.fit(x,y)
feature_importance=clf.feature_importances_
feature_importance=100.0*(feature_importance/feature_importance.max())
plt.bar(range(len(iris.feature_names)),feature_importance)
plt.xticks(range(len(iris.feature_names)),iris.feature_names)
plt.show()
原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/12975199.html
- 黑客是如何实施暴力破解的?
- Python的初学者你现在可以自己“看”到代码的运行了!
- ASP.NET Core的配置(3): 将配置绑定为对象[下篇]
- TensorFlow 深度学习笔记 从线性分类器到深度神经网络
- 微信版12306来了!用12306微信小程序买票靠谱吗
- 无需写try/catch,也能正常处理异常
- “人工智能毁灭人类”是一种末世恐惧传染病
- 有状态(Stateful)应用的容器化
- 实现一些字符串操作标准库函数、解决一些字符串问题
- 外卖陷阱,你入坑了么?
- ASP.NET Core的配置(4):多样性的配置来源[上篇]
- 37 个你必须知道的现代数据中心术语
- Python读书笔记7
- 2017年人工智能在游戏领域打败人类,未来我们将何去何从?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Yii框架学习笔记之应用组件操作示例
- laravel 之 Eloquent 模型修改器和序列化示例
- TP5框架请求响应参数实例分析
- laravel 模型查询按照whereIn排序的示例
- 解决在laravel中auth建立时候遇到的问题
- php array 转json及java 转换 json数据格式操作示例
- Thinkphp5 如何隐藏入口文件index.php(URL重写)
- 在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
- thinkphp5使html5实现动态跳转的例子
- php 自定义函数实现将数据 以excel 表格形式导出示例
- 解决tp5在nginx下修改配置访问的问题
- 在PHP中实现使用Guzzle执行POST和GET请求
- c 语言函数指针之回调函数
- 解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
- php和js实现根据子网掩码和ip计算子网功能示例