【数据挖掘比赛】之 Null Importances(特征选择)

本文介绍了一种基于特征重要性的稳定性来筛选特征的方法——NullImportances。通过对比正常标签和随机标签下特征的重要性,筛选出稳定且有效的特征,适用于树模型。

Null Importances

在olivier大佬的kernel上看到的https://www.kaggle.com/ogrellier/feature-selection-with-null-importances,思想也很纯粹,最近也用了好多次,效果还不错。

主要思想:

通过利用跑树模型得到特征的importance来判断特征的稳定性和好坏。

1)将构建好的特征和正确的标签扔进树模型中,此时可以得到每个特征的重要性(split 和 gain)

2)将数据的标签打乱,再扔进模型中,得到打乱标签后,每个特征的重要性(split和gain);重复n次;取n次特征重要性的平均值。

3)将1中正确标签跑的特征的重要性和2中打乱标签的特征中重要性进行比较;具体比较方式可以参考上面的kernel

当一个特征非常work,那它在正确标签的树模型中的importance应该很高,但它在打乱标签的树模型中的importance将很低(无法识别随机标签);反之,一个垃圾特征,那它在正确标签的模型中importance很一般,打乱标签的树模型中importance将大于等于正确标签模型的importance。通过,同时判断每个特征在正确标签的模型和打乱标签的模型中的importance(split和gain)来选择特征稳定和work的特征。思想大概就是这样吧,importance受到特征相关性的影响,特征的重要性会被相关特征的重要性稀释,看importance也不一定准,用这个来对暴力特征进行筛选还是可以的。

数据挖掘中,初始数据的特征选择是一个关键步骤,它旨在从原始数据的众多特征中挑选出最具代表性、最有用的特征子集,以提高模型的性能、减少计算成本和增强结果的可解释性。 ### 特征选择的重要性 - **提高模型性能**:去除不相关或冗余的特征可以减少噪声对模型的干扰,使模型更专注于重要特征,从而提升预测的准确性和泛化能力。例如,在垃圾邮件分类任务中,去除一些与邮件主题无关的格式特征,能让分类器更准确地识别垃圾邮件。 - **降低计算成本**:减少特征数量可以显著减少模型训练和预测所需的时间和内存开销,特别是在处理大规模数据集时,这种优势更为明显。 - **增强可解释性**:特征数量减少后,模型的结果更容易理解和解释,有助于领域专家根据特征做出合理的决策。 ### 特征选择的方法 - **过滤法**:基于特征的统计特性来评估每个特征的重要性,独立于后续使用的模型。常见的方法包括: - **方差分析**:计算每个特征的方差,方差较小的特征表示该特征在数据集中的取值变化不大,可能是不相关特征,可以被去除。 - **相关性分析**:通过计算特征与目标变量之间的相关性,选择相关性较高的特征。例如,皮尔逊相关系数适用于连续变量,而卡方检验适用于分类变量。 ```python import pandas as pd from sklearn.feature_selection import VarianceThreshold from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2 # 假设data是包含特征和目标变量的DataFrame X = data.drop('target', axis=1) y = data['target'] # 方差分析 selector = VarianceThreshold(threshold=0.1) X_var = selector.fit_transform(X) # 卡方检验 selector = SelectKBest(score_func=chi2, k=10) X_chi2 = selector.fit_transform(X, y) ``` - **包装法**:将特征选择过程与特定的机器学习模型相结合,通过不断尝试不同的特征子集,根据模型的性能来选择最优的特征组合。常见的方法有: - **递归特征消除**:从所有特征开始,逐步去除最不重要的特征,直到达到预设的特征数量或满足特定的性能指标。 ```python from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression # 递归特征消除 estimator = LogisticRegression() selector = RFE(estimator, n_features_to_select=10, step=1) X_rfe = selector.fit_transform(X, y) ``` - **嵌入法**:在模型训练过程中自动进行特征选择,将特征选择作为模型训练的一部分。例如,在决策树和随机森林等基于树的模型中,可以通过特征的重要性得分来选择重要特征。 ```python from sklearn.ensemble import RandomForestClassifier # 随机森林特征重要性 model = RandomForestClassifier() model.fit(X, y) importances = model.feature_importances_ feature_names = X.columns feature_importance_df = pd.DataFrame({'feature': feature_names, 'importance': importances}) top_features = feature_importance_df.nlargest(10, 'importance')['feature'].tolist() X_embedded = X[top_features] ``` ### 特征选择的评估指标 - **准确率**:在分类任务中,准确率是预测正确的样本数占总样本数的比例。 - **均方误差**:在回归任务中,均方误差衡量预测值与真实值之间的平均平方误差。 - **F1值**:综合考虑了精确率和召回率,适用于不平衡数据集的评估。 ### 特征选择的注意事项 - **数据预处理**:在进行特征选择之前,需要对数据进行预处理,包括缺失值处理、数据标准化等,以确保特征选择的有效性。 - **避免过拟合**:在使用包装法和嵌入法时,要注意避免过拟合问题,可以通过交叉验证等方法来评估特征子集的性能。 - **领域知识的结合**:结合领域知识可以帮助选择更有意义的特征,提高特征选择的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值