机器学习特征选择方法总结

部署运行你感兴趣的模型镜像

常用的特征选择方法有:过滤式(filter)、包裹式(wrapper)、嵌入式(embedding)。

过滤式

过滤式特征选择是通过评估每个特征和结果的相关性,来对特征进行筛选,留下相关性最强的几个特征。核心思想是:先对数据集进行特征选择,然后再进行模型的训练。过滤式特征选择的优点是思路简单,往往通过 Pearson 相关系数法、方差选择法、互信息法等方法计算相关性,然后保留相关性最强的N个特征,就可以交给模型训练;缺点是没有考虑到特征与特征之间的相关性,从而导致模型最后的训练效果没那么好。

包裹式

包裹式特征选择是把最终要使用的机器学习模型、评测性能的指标作为特征选择的重要依据,每次去选择若干特征,或是排除若干特征。通常包裹式特征选择要比过滤式的效果更好,但由于训练过程时间久,系统的开销也更大。最典型的包裹型算法为递归特征删除算法,其原理是使用一个基模型(如:随机森林、逻辑回归等)进行多轮训练,每轮训练结束后,消除若干权值系数较低的特征,再基于新的特征集进行新的一轮训练。

嵌入式

嵌入式特征选择法是根据机器学习的算法、模型来分析特征的重要性,从而选择最重要的 N 个特征。与包裹式特征选择法最大的不同是,嵌入式方法是将特征选择过程与模型的训练过程结合为一体,这样就可以快速地找到最佳的特征集合,更加高效、快捷。常用的嵌入式特征选择方法有基于正则化项(如:L1正则化)的特征选择法和基于树模型的特征选择法(如:GBDT)

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

### LightGBM中的特征选择过滤方法机器学习领域,特征选择是一种用于减少数据维度并提高模型性能的技术。对于LightGBM而言,虽然它本身是一个高效的梯度提升框架,能够自动处理一些不重要的特征,但在实际应用中,通过外部的特征选择技术可以进一步优化模型表现。 #### 过滤法(Filter Method)简介 过滤法是一种基于统计测试的方法来评估特征的重要性,而不依赖于任何特定的学习算法。这种方法通常计算每个特征与目标变量之间的相关性或其他衡量标准,并根据这些分数保留最重要的特征[^1]。 #### 常见的过滤方法及其适用场景 以下是几种常见的过滤方法以及它们如何应用于LightGBM: 1. **方差阈值** 方差阈值是最简单的基线方法之一,其核心思想是移除那些变化较小的特征。如果某个特征的变化范围很小,则该特征可能对预测没有帮助。 ```python from sklearn.feature_selection import VarianceThreshold selector = VarianceThreshold(threshold=0.5) X_filtered = selector.fit_transform(X) ``` 2. **卡方检验(Chi-Square Test)** 卡方检验适用于分类问题,特别是当输入特征为离散型时。它可以测量两个随机变量之间是否存在关联关系。 ```python from sklearn.feature_selection import SelectKBest, chi2 selector = SelectKBest(chi2, k=10) # 选择前10个最佳特征 X_new = selector.fit_transform(X, y) ``` 3. **互信息(Mutual Information)** 互信息是一种更通用的相关性度量方,适合连续和离散类型的特征。它能捕捉到非线性的相互作用模。 ```python from sklearn.feature_selection import mutual_info_classif mi_scores = mutual_info_classif(X, y) selected_features = [col for col, score in zip(columns, mi_scores) if score > threshold] ``` 4. **皮尔逊相关系数(Pearson Correlation Coefficient)** 对于回归任务或者某些特殊情况下的分类任务,可以通过计算每列特征与标签间的皮尔逊相关系数来进行初步筛选。 以上提到的各种过滤方法都可以作为预处理步骤,在构建LightGBM之前执行以降低维数。 #### 将过滤方法集成至LightGBM工作流 一旦选择了合适的过滤策略之后,就可以将其无缝嵌入到整个建模过程中去。下面给出一个完整的例子展示如何结合`mutual information`完成这一过程: ```python import lightgbm as lgb from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from sklearn.feature_selection import mutual_info_classif # 计算MI得分 mi_scores = mutual_info_classif(X_train, y_train) # 设定阈值挑选重要特征 selected_columns = [column for column, score in zip(X.columns, mi_scores) if score >= THRESHOLD] X_selected = X[selected_columns] # 划分训练集验证集 X_train_sel, X_val_sel, y_train_sel, y_val_sel = train_test_split( X_selected, y, test_size=0.2, random_state=42 ) train_data = lgb.Dataset(X_train_sel, label=y_train_sel) val_data = lgb.Dataset(X_val_sel, label=y_val_sel) params = { 'objective': 'binary', 'metric': 'auc' } bst = lgb.train(params, train_data, valid_sets=[val_data], num_boost_round=100, early_stopping_rounds=10) y_pred_prob = bst.predict(X_val_sel) threshold = 0.5 predictions = [1 if prob > threshold else 0 for prob in y_pred_prob] accuracy = accuracy_score(y_val_sel, predictions) print(f"Validation Accuracy: {accuracy}") ``` 上述代码片段展示了如何利用互信息进行特征选择后再喂给LightGBM做最终训练的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值