特征选择是从原始特征子集中选择出最相关和无冗余的特征。它的目的是:
- 减小过拟合:少量特征可以减小模型复杂度,降低过拟合风险。
- 提高泛化能力:选择与目标变量高度相关的特征可以提高模型泛化能力。
- 提高效率:少量特征意味着少量计算,从而提高训练和预测的效率。
常用的特征选择方法有:
- 过滤方法:根据特征与目标变量的相关性进行选择,如相关系数、互信息等。简单但忽略特征间的依赖关系。
- 包裹方法:使用机器学习模型进行选择。选择能够最大限度提高模型性能的特征子集。考虑了特征间的依赖但计算复杂。
- 嵌入方法:特征选择过程嵌入到机器学习模型中。如LASSO回归会自动进行特征缩减。
代码示例:
python
# 相关系数选择方法
import pandas as pd
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
df = pd.read_csv('dataset.csv')
X = df.drop('target', axis=1)
y = df['target']
selector = SelectKBest(chi2, k=3) #选择3个最佳特征
selector.fit(X, y)
selected_df = selector.transform(X)
# 支持向量机选择方法
from sklearn.svm import LinearSVC
from sklearn.feature_selection import SelectFromModel
svc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
model = SelectFromModel(svc, prefit=True)
selected_df = model.transform(X)
# LASSO回归选择
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import SelectFromModel
lasso = LogisticRegression(penalty='l1')
lasso.fit(X, y)
model = SelectFromModel(lasso, prefit=True)
selected_df = model.transform(X)