详解 Scikit-learn 的 feature_selection.SelectKBest函数:选择最好的 k 个特征

  • Post category:Python

Sklearn是一个基于Python语言的机器学习库,包含了众多用于预处理数据,特征选择、分类、回归、聚类等多种机器学习任务的函数和工具。sklearn.feature_selection是sklearn库中的一个特征选择模块,其中的SelectKBest函数用于从给定的特征集中选择出K个最优的特征。

SelectKBest是一个有监督的特征选择方法,它根据给定的目标变量(标签)的相关性评估每个特征,然后选择与目标变量相关性最高的K个特征。SelectKBest支持多种评分函数来度量特征与目标变量之间的相关性,一般常用的有卡方检验、互信息、F值等,在使用时需要根据具体的任务和数据类型选择合适的评分函数。

下面是SelectKBest的基本使用方法:

from sklearn.datasets import load_digits
from sklearn.feature_selection import SelectKBest, chi2

X, y = load_digits(return_X_y=True)
X_new = SelectKBest(chi2, k=20).fit_transform(X, y)

上述代码展示了如何从手写数字数据集中选择k=20个最好的特征。chi2函数被用来计算特征与标签之间的方差,并将其作为特征的度量指标进行排序。fit_transform()函数用于对数据进行特征选择,并返回被选择的k个最好的特征。在使用SelectKBest进行特征选择时,需要注意以下几点:

  1. 需要先从sklearn.feature_selection模块中导入SelectKBest和各种评分函数(如chi2);
  2. 输入数据需要是一个二维数组,其中每行代表一个样本,每列代表一个特征;
  3. 使用fit_transform时,需要传入特征和标签两个参数,用于计算特征和目标变量之间的相关性;
  4. 使用inverse_transform函数可以将被选择的特征重新转换为原始的特征矩阵;

下面提供两个使用SelectKBest的实例:

  1. 选取波士顿房价数据集的最好的特征
from sklearn.datasets import load_boston
from sklearn.feature_selection import SelectKBest, f_regression

boston = load_boston()
X, y = boston.data, boston.target

selector = SelectKBest(f_regression, k=5)
X_new = selector.fit_transform(X, y)

利用f_regression作为评分函数,从波士顿房价数据集中选择出k=5个最好的特征。

  1. 选取MNIST手写数字数据集的最好的特征
from sklearn.datasets import load_digits
from sklearn.feature_selection import SelectKBest, chi2

digits = load_digits()
X, y = digits.data, digits.target

selector = SelectKBest(chi2, k=20)
X_new = selector.fit_transform(X, y)

利用chi2作为评分函数,从MNIST手写数字数据集中选择出k=20个最好的特征。