机器学习算法中如何执行回归数据的特征选择

特征选择是识别和选择与目标变量最相关的输入变量子集的过程 。
特征选择最简单的情况可能是存在数字输入变量和用于回归预测建模的数字目标的情况 。这是因为可以计算出每个输入变量与目标之间的关系强度,称为相关性,并进行相对比较 。
本文中我们将展示如何使用数值输入数据执行特征选择以进行回归预测建模 。

  • 使用相关性和互信息统计来评估数字输入数据的重要性 。
  • 在拟合和评估回归模型时如何为数字输入数据执行特征选择 。
  • 使用网格搜索调整在建模管道中选择的特征数量 。
本文分为四部分:
  • 1、回归数据集
  • 2、数值特征选择
  • 2.1、相关特征选择
  • 2.2、相关信息特征选择
  • 3、使用选定特征建模
  • 3.1、使用所有特征构建的模型
  • 3.2、使用相关特征构建的模型
  • 3.3、使用相关信息特征构建的模型
  • 4、调整所选特征的数量
一、回归数据集我们将使用综合回归数据集作为本文的基础 。
回归问题是我们要预测数值的问题 。在这种情况下,我们需要一个具有数字输入变量的数据集 。
scikit-learn库中的make_regression()函数可用于定义数据集 。它提供了对样本数量,输入特征数量以及重要的是相关和冗余输入特征数量的控制 。这一点至关重要,因为我们特别希望我们知道的数据集具有一些冗余输入特征 。
在这种情况下,我们将定义一个包含1000个样本的数据集,每个样本具有100个输入特征,其中10个是信息性的,其余90个是冗余的 。
# generate regression datasetX, y = make_regression(n_samples=1000, n_features=100, n_informative=10, noise=0.1, random_state=1)希望特征选择技术可以识别与目标相关的那些特征中的一些或全部,或者至少识别并除去某些冗余输入特征 。
定义后,我们可以将数据分为训练集和测试集,以便我们拟合和评估学习模型 。
我们将使用scikit-learn形式的train_test_split()函数,并将67%的数据用于训练,并将33%的数据用于测试 。
...# split into train and test setsX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=1)123...# split into train and test setsX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=1)将这些特征结合在一起,下面列出了定义,拆分和汇总原始回归数据集的完整示例 。
# load and summarize the datasetfrom sklearn.datasets import make_regressionfrom sklearn.model_selection import train_test_split# generate regression datasetX, y = make_regression(n_samples=1000, n_features=100, n_informative=10, noise=0.1, random_state=1)# split into train and test setsX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=1)# summarizeprint('Train', X_train.shape, y_train.shape)print('Test', X_test.shape, y_test.shape)运行示例将报告训练和测试集的输入和输出特征的大小 。
我们可以看到,我们有670个训练示例和330个测试示例 。
机器学习算法中如何执行回归数据的特征选择

文章插图
 
现在,我们已经加载并准备了数据集,我们可以探索特征选择 。
二、数值特征选择有两种流行的特征选择技术,可用于数字输入数据和数字目标变量 。
他们是:
  1. 相关统计 。
  2. 相互信息统计 。
(一)相关特征选择相关性是两个变量如何一起变化的度量 。也许最常见的相关度量是Pearson相关,它假设每个变量的高斯分布并报告它们的线性关系 。
对于数字预测变量,量化与结果之间的每个关系的经典方法是使用样本相关性统计量 。
线性相关分数通常是介于-1和1之间的值,0表示没有关系 。对于特征选择,我们通常对正值感兴趣,正值越大,关系越大,并且应该更可能选择特征进行建模 。这样,线性相关可以转换为仅具有正值的相关统计量 。
scikit-learn库在f_regression()函数中提供了相关统计的实现 。此函数可用于特征选择策略中,例如通过SelectKBest类选择前k个最相关的特征(最大值) 。
例如,我们可以定义SelectKBest类以使用f_regression()函数并选择所有特征,然后转换训练和测试集 。
# configure to select all featuresfs = SelectKBest(score_func=f_regression, k='all')# learn relationship from training datafs.fit(X_train, y_train)# transform train input dataX_train_fs = fs.transform(X_train)# transform test input dataX_test_fs = fs.transform(X_test)return X_train_fs, X_test_fs, fs


推荐阅读