如何进行特征选择

序言

特征选择是机器学习和数据挖掘中至关重要的一步,它旨在从大量的特征中挑选出对解决特定问题有用的子集。这个过程不仅有助于降低数据维度,还能提高模型的性能和效率。特征选择的方法多种多样,包括过滤式、包裹式和嵌入式等,每种方法都有其独特的评估标准和优缺点。

简介

特征选择(Feature Selection)是机器学习中的一个关键步骤,用于从原始特征集中选择出最相关、最有效的特征子集,以提高学习算法的性能和效率。以下是关于特征选择的详细介绍:

定义与目的

特征选择,也称为特征子集选择或属性选择,是指从已有的M个特征中选择N个特征(N≤M),使得系统的特定指标最优化。其目的在于降低数据集维度,减少计算复杂度,提高模型的预测性能和泛化能力。

重要性与作用

  • 简化模型:通过选择有效特征,减少特征数量,从而降低模型的复杂性,使模型更加简洁明了。
  • 提高性能:去除不相关或冗余特征,有助于减少噪声干扰,提高模型的预测精度和稳定性。
  • 节省资源:降低计算复杂度和存储需求,节省计算资源和时间成本。
  • 便于理解:减少特征数量有助于更好地理解模型,提高模型的可解释性。

方法分类

特征选择方法大致可分为以下三类:

  • 过滤法(Filter Methods):基于特征的统计特性进行评估,如信息增益、卡方检验、相关系数等。这类方法计算简单、速度快,但可能忽略学习器的性能。
  • 包裹法(Wrapper Methods):将特征选择嵌入到学习器的训练过程中,直接使用学习器的性能作为评价标准。这类方法能够充分考虑学习器的性能,但计算复杂、速度较慢。
  • 嵌入式法(Embedded Methods):将特征选择嵌入到学习器的训练过程中,通过正则化方法或模型参数的学习来选择特征。这类方法计算相对较快,但可能受学习器类型限制。

过程与要素

特征选择过程一般包括产生过程、评价函数、停止准则和验证过程四个部分。其中,搜索起点和方向、搜索策略、特征评估函数和停止准则是特征选择算法必须确定的四个要素。

  • 搜索起点和方向:决定了搜索的起点和搜索方向,从而影响搜索策略。
  • 搜索策略:用于从包含2^n-1个候选解的搜索空间中寻找最优特征子集。常见的搜索策略包括穷举式搜索、序列搜索等。
  • 特征评估函数:用于评价特征子集的性能和有效性。常见的评估函数包括准确率、召回率、F1值等。
  • 停止准则:用于确定何时停止搜索。常见的停止准则包括达到设定阈值、达到最大迭代次数等。

案例源码

# coding: utf-8
"""
特征选择阶段
特征(或叫要素)选择是一个过程,其中可以自动选择数据中那些您感兴趣的预测变量或输出贡献最大的特征。
拥有数据中不相关的要素会降低许多模型的精度,尤其是线性模型线性回归和逻辑回归等算法。
在对数据进行建模之前,执行特征选择的三个好处:
1. 减少过拟合(Reduce Overfitting):更少的冗余数据意味着更少的根据噪音做出决策的机会。
2. 提高准确性(Improve Accuracy):减少误导性数据意味着建模准确性提高。
3. 减少训练时间(Reduce Training Time):更少的数据意味着算法的训练速度更快。
(1)删除无用特征;
(2)删除冗余特征;
(3)删除缺失值特征;
(4)删除低方差特征;
(5)删除相关特征;
(6)删除低方差

将从以下几个方面演示自动特征选择技术:
1. 单变量的选择(Univariate Selection)
2. 递归特征消除(Recursive Feature Elimination)
3. 主成分分析(Principal Component Analysis, PCA)
4. 特征重要性(Feature Importance)

"""
from pathlib import Path
import pandas as pd
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest, chi2, RFE
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = (3, 3) #(10, 6)

# 读取数据文件并对列名进行修改
filename = Path(__file__).parent / 'data/pima-indians-diabetes.csv'
data = pd.read_csv(filename)
column_names = {'Pregnancies': 'pregnant_times',
                 'Glucose': 'glucose',
                 'BloodPressure': 'blood_pressure',
                 'SkinThickness': 'skin_thickness',
                 'Insulin': 'insulin',
                 'BMI': 'BMI',
                 'DiabetesPedigreeFunction': 'DPF',
                 'Age': 'age',
                 'Outcome': 'outcome'}
data.rename(columns=column_names, inplace=True)
array = data.values

# 将数据拆分为输入和输出组件
X = array[:, 0:8]
Y = array[:, 8]

######## Univariate Selection ########
"""
单变量选择:
使用卡方检验(chi2)评估每个特征与目标变量的相关性,选择最佳的4个特征。
"""
print("\033[1;30mThe following is Univariate Selection:\033[0m\n")
# Feature extraction
selectKBest = SelectKBest(score_func=chi2, k=4)
fit = selectKBest.fit(X, Y)
# Summarize scores
set_printoptions(precision=3)
print(fit.scores_)
# Summarize selected features
features = fit.transform(X)
print(features[0:6, :])

######## Recursive Feature Elimination ########
"""
递归特征消除:
通过不断删除特征来找到最重要的3个特征。
"""
print("\n\033[1;30mThe following is Recursive Feature Elimination:\033[0m\n")
# Feature extraction
model = LogisticRegression()
rfe = RFE(model, n_features_to_select=3, step=1)
fit = rfe.fit(X, Y)
print("Num of Features: %d", fit.n_features_)
print("Selected Features: %s", fit.support_)
print("Feature Ranking: %s", fit.ranking_)

######## Principal Component Analysis ########
"""
主成分分析:
通过降维找到最重要的3个主成分,解释数据中最大的方差。
"""
print("\n\033[1;30mThe following is Principal Component Analysis:\033[0m\n")
# Feature extraction
pca = PCA(n_components=3)
fit = pca.fit(X)
# Summarize components
print("Explained Variance: %s", fit.explained_variance_ratio_)
print("Principal Components: %s", fit.components_)

######## Feature Importance ########
"""
特征重要性:
使用随机森林估计器来评估每个特征的重要性。
"""
print("\n\033[1;30mThe following is Feature Importance:\033[0m\n")
# Feature extraction
model = ExtraTreesClassifier()
model.fit(X, Y)
print("Feature importance: %s", model.feature_importances_)

# 输出(略)

总结

特征选择是机器学习中的一个重要环节,它有助于提高模型的性能和效率。通过选择有效特征,我们可以简化模型、提高性能、节省资源和便于理解。在实际应用中,我们需要根据具体问题和数据集选择合适的特征选择方法,并结合实际情况进行调整和优化。

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绎岚科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值