Backward Elimination, Forward Selection and Stepwise

Backward Elimination,Forward Selection和Stepwise这三种是特征选择中经常用到的方法。当有时候特征的数量太多的时候,我们除了可以用PCA等方法降维之外,还可以用特征选择的方法,筛选出几个对结果影响最大的特征(feature),从而在对结果影响不大的情况下,减少计算量。


Backward Elimination的方法很简单:

首先包含了所有的feature,然后每个feature都尝试去删除,测试删除的哪个feature对模型准确性有最大的提升,最终删掉对模型提升最高的一个特征。如此类推,直到删除feature并不能提升模型为止。


Forward Selection则完全相反,一个一个加进去。

相对于Forward Selection,Backward Elimination的优点在于,其允许一些低贡献值的特征能够进到模型中去(有时候低贡献值的特征能在组合中有更大的贡献值,而Forward Selection忽略了这种组合的可能性),因此Backward Elimination能够避免受一两个占主导地位的特征的干扰。


Stepwise则是结合上述两者的方法,当一个feature新加入后,stepwise会尝试删去一个feature,直至达到某个预设的标准。这种方法的缺点是,预设的标准不好定,而且容易陷入到过拟合当中。

向前和向后特征选择方法是两种常用的特征选择技术,用于从数据集中选择最有预测能力的特征子集。以下是这两种方法的简介以及如何使用鸢尾花(Iris)数据集和K最近邻(KNN)分类器进行特征选择和特征排名。 向前特征选择(Forward Feature Selection): 向前特征选择是一种贪心算法,它从一个空的特征集合开始,然后逐步添加特征,每一步都添加一个最能提高模型性能的特征。具体步骤如下: 1. 初始化:开始时没有特征,模型性能为基线水平。 2. 迭代添加:在每一步迭代中,尝试添加每个未被选中的特征,并使用KNN分类器评估新特征的加入对模型性能的提升。 3. 选择最佳特征:选择在迭代中提升模型性能最大的特征添加到特征集合中。 4. 终止条件:当添加更多特征不再显著提升模型性能,或者达到了预先设定的特征数量限制时停止。 向后特征选择(Backward Feature Elimination): 向后特征选择与向前特征选择相反,它从完整特征集合开始,逐步移除特征。具体步骤如下: 1. 初始化:开始时所有特征都在模型中,模型性能为基线水平。 2. 迭代移除:在每一步迭代中,尝试移除每个特征,并使用KNN分类器评估移除每个特征后模型性能的变化。 3. 移除最差特征:选择在迭代中模型性能下降最小的特征将其移除。 4. 终止条件:当移除更多特征不再显著降低模型性能,或者只剩下一个特征时停止。 特征排名: 特征排名是通过计算每个特征对模型性能的贡献来进行的。这通常通过评估模型性能随特征的增加或减少而变化的程度来完成。排名高的特征被认为是更有影响力的特征,因为它们对提高模型性能有更大的贡献。 以Iris数据集为例,可以使用KNN分类器对特征进行排序,以确定哪些特征最有助于区分不同种类的鸢尾花。在Python中,可以使用`sklearn`库中的`SelectKBest`和`f_classif`(用于特征评估)来实现向前和向后特征选择,也可以直接使用`KNeighborsClassifier`评估不同特征组合的性能。 以下是使用向前特征选择的一个简单示例代码片段: ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.feature_selection import SequentialFeatureSelector # 加载数据集 iris = load_iris() X, y = iris.data, iris.target # 分割数据集为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # KNN分类器初始化 knn = KNeighborsClassifier() # 向前特征选择 forward_feature_selector = SequentialFeatureSelector(knn, n_features_to_select=4, direction="forward") forward_feature_selector.fit(X_train, y_train) # 输出被选中的特征索引 selected_features = forward_feature_selector.get_support(indices=True) print("被选择的特征索引:", selected_features) ``` 请注意,上述代码仅作为说明向前特征选择的一个示例,实际实现时需要考虑特征选择的性能评估、模型选择、交叉验证等步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值