【机器学习|Python】sklearn中的特征选择方法

前言

本文对sklearn中特征选择模块中的常用方法进行介绍和使用说明,主要介绍工具中的内容,即该库中的相关方法包含的常用接口和基本使用,了解原理可以关注以下两篇文章:

sklearn中的特征选择

  • sklearn.feature_selection:sklearn中的特征选择模块

本文主要涉及的方法:

  • 过滤法:特征选择完全独立于任何机器学习算法;根据各种统计检验中的分数或相关性的各项指标来选择特征。
    • 方差过滤:sklearn.feature_selection.VarianceThreshold
    • 卡方检验:sklearn.feature_selection.chi2
    • F检验:sklearn.feature_selection.f_classif(f_regression)
    • 互信息法:sklearn.feature_selection.mutual_info_classif(mutual_info_regression)
    • 选择前 k 个最优值:sklearn.feature_selection.SelectKBest
  • 嵌入法:特征选择和模型训练同时进行,通过使用相关机器学习模型对数据的拟合来计算各个特征的重要性,利用重要性对特征进行筛选。
    • 模型自己决定使用哪些特征:sklearn.feature.SelectFromModel
  • 包装法:特征选择和算法训练同时进行,相对过滤法和嵌入法拥有更高的计算成本,使用特征子集进行多次迭代训练。
    • 递归特征消除法:sklearn.feature.RFE

本文对sklearn中的相关方法仅介绍常用接口、属性以及相关参数。

过滤法

在很多场景下,互信息法的表现要优于卡方检验和F检验,我们一般先使用方差过滤对特征进行初步筛选,然后使用互信息法进一步进行过滤。

  • 视不同情况使用不同方法,互信息法不一定就是最好的,要多尝试

方差过滤

方差过滤:顾名思义就是依据特征本身的方差来进行筛选过滤,只能处理连续型数值变量;对于数据集中的所有特征,首先计算所有特征数据对应的方差,然后自定义设置一个阈值,丢弃方差小于等于该阈值的特征,保留方差大于该阈值的特征。

sklearn中的方差过滤sklearn.feature_selection.VarianceThreshold

  • threshold:设置方差过滤的阈值,默认为0

常用属性或接口

import pandas as pd
import numpy as np
from sklearn.feature_selection import VarianceThreshold

data = pd.DataFrame(np.random.randint(10, 100, (5, 2)))  # 准备测试数据

# 常用接口
var_thre = VarianceThreshold(threshold=0)

var_thre.fit(data)  # 拟合数据

result = var_thre.transform(data)   # 变换数据
result = var_thre.fit_transform(data)    # 拟合和变换一步达成
data = var_thre.inverse_transform(result)  # 逆向变换 (将数据转为过滤之前的原始数据)

# 一般这样用
result = VarianceThreshold(threshold=0).fit_transform(data)

我们一般会先将阈值设置为0,也就是过滤掉所有方差为0的特征,用方差过滤对特征做最初部的选择,然后自行判断阈值设置,一般会先计算所有特征的方差并对其从大到小排序,选择其中的某些值作为超参数(阈值)以指定保留的特征数量;若条件允许,也可

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值