如何使用sklearn(卡方或ANOVA)删除冗余特征

在特征选择步骤中,我们希望识别相关特征并删除冗余特征。

根据我的理解,冗余特征是依赖的特征。(因此,我们希望在特征之间只保留相互独立的特征)

我的问题是关于使用sklearn和ANOVA/卡方检验来删除冗余特征的方法。

据我所读(以及看到的例子),我们使用SelectKBestSelectPercentile来保留与目标(y)相关的最高分特征。

但是,我们可以使用这些方法和chi2, f_classif来删除依赖的特征吗?

换句话说,我想用sklearn的方法删除冗余特征。我们该怎么做?


回答:

您可以使用SelectKBest来使用提供的函数(例如卡方)对特征进行评分,并获取得分最高的N个特征。例如,为了保留前10个特征,您可以使用以下代码:

from sklearn.feature_selection import SelectKBest, chi2, f_classif# 卡方top_10_features = SelectKBest(chi2, k=10).fit_transform(X, y)# 或ANOVAtop_10_features = SelectKBest(f_classif, k=10).fit_transform(X, y)

然而,在特征减少的背景下,通常有很多有用的方法和技术。您通常需要根据您的数据、您正在训练的模型以及您想要预测的输出,决定使用哪些方法。例如,即使您最终得到20个特征,您还需要检查每对特征之间的相关性,并在它们高度相关的情况下删除其中一个。

以下函数将为您提供最相关的特征。您可以使用此输出进一步减少当前的变量列表:

def get_feature_correlation(df, top_n=None, corr_method='spearman',                            remove_duplicates=True, remove_self_correlations=True):    """    计算特征相关性并根据其相关性排序特征对    :param df: 包含预测变量的数据框    :type df: pandas.core.frame.DataFrame    :param top_n: 要报告的前N个特征对(如果为None,将返回所有对)    :param corr_method: 相关性计算方法    :type corr_method: str    :param remove_duplicates: 指示是否必须删除重复特征    :type remove_duplicates: bool    :param remove_self_correlations: 指示是否删除自身相关性    :type remove_self_correlations: bool    :return: pandas.core.frame.DataFrame    """    corr_matrix_abs = df.corr(method=corr_method).abs()    corr_matrix_abs_us = corr_matrix_abs.unstack()    sorted_correlated_features = corr_matrix_abs_us \        .sort_values(kind="quicksort", ascending=False) \        .reset_index()    # 删除同一特征的比较    if remove_self_correlations:        sorted_correlated_features = sorted_correlated_features[            (sorted_correlated_features.level_0 != sorted_correlated_features.level_1)        ]    # 删除重复项    if remove_duplicates:        sorted_correlated_features = sorted_correlated_features.iloc[:-2:2]    # 为列创建有意义的名称    sorted_correlated_features.columns = ['特征1', '特征2', '相关性(绝对值)']     if top_n:        return sorted_correlated_features[:top_n]    return sorted_correlated_features

其他选项可能包括:

  • 缺失值的百分比
  • 与目标变量的相关性
  • 包含一些随机变量,看它们是否会进入后续的减少变量列表
  • 特征随时间的稳定性
  • 等等

正如我提到的,实际上这取决于您想要实现什么。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注