反向特征消除技术介绍

数据科学领域,特征选择是一个重要的步骤,它可以帮助识别出对模型预测能力影响最大的特征。已经了解了缺失值比率和低方差过滤技术,本文将介绍另一种特征选择技术——反向特征消除(Backward Feature Elimination)。

反向特征消除的基本概念

假设目标是根据给定的特征预测健身水平。假设数据集中没有缺失值,所有变量的方差都很高,且独立变量之间的关系很低。在这种情况下,可以使用反向特征消除技术来从数据集中选择重要特征。

反向特征消除的步骤

反向特征消除的第一步是使用所有变量训练模型。不会将ID变量纳入模型训练,因为ID对每个观测值来说都是唯一的。因此,首先使用其他三个独立变量和目标变量(Fitness_Level)来训练模型。

接下来,将计算模型的性能。假设使用所有三个独立变量得到的准确率为92%。然后,将逐个移除变量,并在剩余变量上训练模型。例如,如果移除了Calories_Burnt变量,并在剩余的两个变量(Gender和Plays_Sport)上训练模型,得到的准确率可能会降低到90%。

将继续这个过程,逐个移除每个变量,并在剩余变量上训练模型。这里移除了Gender变量,得到的准确率为91.6%。最后,移除了Plays_Sport变量,并在剩余数据上训练模型,得到的准确率降低到88%。通过这个过程,可以识别出对模型性能影响最小的变量。

回顾一下,使用所有变量时的准确率为92%,而移除每个变量后的准确率如下:移除Calories-Burnt后准确率为90%,移除Gender后准确率为91.6%,移除Plays_Sport后准确率进一步降低到88%。从这些数据中,可以看出Gender变量对模型性能的影响最小,因此可以被移除。

将重复这些步骤,直到不能再移除更多的变量。通过这个过程,可以很好地理解反向特征消除的工作原理。这是一种简单但非常有效的技术。

Python中的实现

接下来,将看到如何在Python中实现反向特征消除。首先,需要导入Pandas库。

import pandas as pd

然后,读取数据集并使用data.head()函数打印前五个观测值。

data = pd.read_csv('backward_feature_elimination.csv') data.head()

有目标变量和其他独立变量。让看看数据的形状。

data.shape

检查数据中是否有缺失值。

data.isnull().sum()

如果没有缺失值,那么可以定义目标变量和独立变量。

X = data.drop(['ID', 'count'], axis=1) y = data['count'] X.shape, y.shape

接下来,需要安装“mlxtend”库,该库包含了反向特征消除和前向特征选择技术的预写代码。

!pip install mlxtend

现在,从mlxtend导入SequentialFeatureSelector,并从sklearn导入LinearRegression。

from mlxtend.feature_selection import SequentialFeatureSelector as sfs from sklearn.linear_model import LinearRegression

将训练模型,并定义特征选择器模型。

lreg = LinearRegression() sfs1 = sfs(lreg, k_features=4, forward=False, verbose=1, scoring='neg_mean_squared_error')

这里解释一下不同的参数:第一个参数是模型名称,传入了lreg,即线性回归模型。然后定义要选取的特征数量,这里传入了“k_features = 4”,所以模型会训练直到只剩下四个特征。“forward = False”表示正在训练反向特征消除而不是前向特征选择方法。“verbose = 1”将允许在每次迭代时打印模型摘要。最后,由于这是一个回归模型,评分将基于均方误差指标,因此“scoring = ‘neg_mean_squared_error'”。

将拟合模型。

sfs1 = sfs1.fit(X, y)

可以看到,模型训练直到只剩下四个特征。将打印出被选中的特征。

feat_names = list(sfs1.k_feature_names_) print(feat_names) new_data = data[feat_names] new_data['count'] = data['count'] new_data.head() new_data.shape, data.shape
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485