特征选择-selectKbest介绍

SelectKBest 是一种特征选择方法,它的原理是在一组特征中选择出对目标变量(如分类或回归的输出)影响最大的 K 个特征。它的工作流程可以分为以下几个步骤:

评分函数:选择一个评分函数来评估每个特征与目标变量之间的关联强度。这个评分函数根据特征的类型和问题的性质(分类或回归)来选择。常见的评分函数包括:

对于分类问题:卡方检验(Chi-squared test)、F-值(ANOVA F-value)、互信息评分(Mutual Information)。
对于回归问题:F-值(ANOVA F-value)、互信息回归(Mutual Information for regression)。
计算评分:对数据集中的每个特征应用评分函数,计算每个特征与目标变量之间的统计关联度。

选择特征:根据计算得到的评分,选择评分最高的 K 个特征。这些特征被认为是对预测目标变量最有用的。

结果应用:选出的这些顶级特征随后可以用于训练机器学习模型。

SelectKBest 的关键在于正确选择评分函数,并确定适当的 K 值。不同的评分函数可能适用于不同类型的数据和问题,而选择的 K 值会影响模型的复杂度和性能。选择合适的 K 值通常需要借助交叉验证等技术,以找到最佳的特征数量,从而在模型复杂度和性能之间取得平衡。

# 方差选择法  
from sklearn.feature_selection import VarianceThreshold  
X = VarianceThreshold(threshold=0.1).fit_transform(data, data["label"])  
  
# 相关系数法  
from sklearn.feature_selection import SelectKBest  
from scipy.stats import pearsonr  
sk = SelectKBest(k=5) # 选择 k 个最好的特征  
X = sk.fit_transform(data, data["label"])  
  
# 卡方(需要 X 为正,即半正定矩阵)  
from sklearn.feature_selection import chi2  
sk = SelectKBest(chi2, k=5)  
X = sk.fit_transform(data, data["label"])  
  
# 互信息  
from minepy import MINE  
def mic(x, y):  
    m = MINE()  
    m.compute_score(x, y)  
    return (m.mic(), 0.5)  
sk = SelectKBest(  
    lambda X, Y: array(map(lambda x: mic(x, Y), X.T)).T, k=2)  
X = sk.fit_transform(data, data["label"])  
  
# RFE  
from sklearn.feature_selection import RFE  
from sklearn.linear_model import LogisticRegression  
rfe = RFE(estimator=LogisticRegression(),   
          n_features_to_select=2)  
X = sk.fit_transform(data, data["label"])  
  
# 基于惩罚项  
from sklearn.feature_selection import SelectFromModel  
from sklearn.linear_model import LogisticRegression  
sf = SelectFromModel(  
    LogisticRegression(penalty="l1", C=0.1)  
)  
X = sf.fit_transform(data_train_filter, data_train.isDefault)  
  
# 基于树模型  
from sklearn.feature_selection import SelectFromModel  
from sklearn.ensemble import GradientBoostingClassifier  
sf = SelectFromModel(  
    GradientBoostingClassifier())  
X = sf.fit_transform(data_train_filter, data_train.isDefault)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值