什么是特征选择,如何进行特征选择?代码举例讲解

特征选择是从原始特征子集中选择出最相关和无冗余的特征。它的目的是:

  1. 减小过拟合:少量特征可以减小模型复杂度,降低过拟合风险。
  2. 提高泛化能力:选择与目标变量高度相关的特征可以提高模型泛化能力。
  3. 提高效率:少量特征意味着少量计算,从而提高训练和预测的效率。

常用的特征选择方法有:

  1. 过滤方法:根据特征与目标变量的相关性进行选择,如相关系数、互信息等。简单但忽略特征间的依赖关系。
  2. 包裹方法:使用机器学习模型进行选择。选择能够最大限度提高模型性能的特征子集。考虑了特征间的依赖但计算复杂。
  3. 嵌入方法:特征选择过程嵌入到机器学习模型中。如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)