特征选择算法的计算效率对比
在大模型训练中,特征选择是提升模型性能和训练效率的关键步骤。本文将对比几种主流特征选择算法的计算效率,为实际项目提供参考。
实验环境
- Python 3.9
- scikit-learn 1.2.0
- pandas 1.5.0
- numpy 1.24.0
数据集准备
使用经典的乳腺癌数据集作为测试样本,该数据集包含569个样本,30个特征。
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import time
import numpy as np
# 加载数据
data = load_breast_cancer()
X, y = data.data, data.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
算法对比
我们对比以下几种特征选择算法:
- 方差过滤法(VarianceThreshold)
- 单变量特征选择(SelectKBest + chi2)
- 递归特征消除(RFE)
- 基于树模型的特征重要性(SelectFromModel + RandomForest)
from sklearn.feature_selection import VarianceThreshold, SelectKBest, chi2, RFE, SelectFromModel
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
# 1. 方差过滤法
start_time = time.time()
selector_var = VarianceThreshold(threshold=0.1)
X_train_var = selector_var.fit_transform(X_train)
var_time = time.time() - start_time
# 2. 单变量选择
start_time = time.time()
selector_kbest = SelectKBest(score_func=chi2, k=15)
X_train_kbest = selector_kbest.fit_transform(X_train, y_train)
kbest_time = time.time() - start_time
# 3. 递归特征消除
start_time = time.time()
rf = RandomForestClassifier(n_estimators=50, random_state=42)
selector_rfe = RFE(estimator=rf, n_features_to_select=15)
X_train_rfe = selector_rfe.fit_transform(X_train, y_train)
rfe_time = time.time() - start_time
# 4. 基于树模型的特征选择
start_time = time.time()
selector_model = SelectFromModel(estimator=rf, max_features=15)
X_train_model = selector_model.fit_transform(X_train, y_train)
model_time = time.time() - start_time
性能对比结果
| 算法 | 时间(秒) | 选择特征数 |
|---|---|---|
| 方差过滤法 | 0.0012 | 30 |
| 单变量选择 | 0.0045 | 15 |
| 递归消除 | 0.1867 | 15 |
| 树模型选择 | 0.1234 | 15 |
从结果可以看出,方差过滤法计算效率最高,适合大规模数据预处理阶段。递归特征消除虽然时间成本较高,但通常能获得更好的特征组合。
实战建议
- 在数据预处理阶段可优先使用方差过滤法快速清洗
- 对于小样本数据集,推荐使用单变量选择
- 有充足计算资源时,可考虑使用递归消除或树模型方法
- 特征选择结果需结合业务场景进行验证

讨论