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进行特征选择时,需要注意以下几点:
- 需要先从sklearn.feature_selection模块中导入SelectKBest和各种评分函数(如chi2);
- 输入数据需要是一个二维数组,其中每行代表一个样本,每列代表一个特征;
- 使用fit_transform时,需要传入特征和标签两个参数,用于计算特征和目标变量之间的相关性;
- 使用inverse_transform函数可以将被选择的特征重新转换为原始的特征矩阵;
下面提供两个使用SelectKBest的实例:
- 选取波士顿房价数据集的最好的特征
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个最好的特征。
- 选取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个最好的特征。