为什么我的相关系数和互信息得分很低?

我正在为二分类问题生成随机样本:

X, y = make_classification(n_features=40, n_redundant=4, n_informative=36,n_clusters_per_class=2, n_samples=50000)

我想检查特征与目标之间的相关性(用于特征选择步骤)。

我使用了两种不同的方法:

1. 相关性(皮尔逊)2. 互信息

对于这两种方法,我得到的特征与目标之间的得分都很低。

互信息:

    from sklearn.feature_selection import mutual_info_classif    res1 = mutual_info_classif(X, y)

相关性:

df = pd.DataFrame(data=X)df['Taregt'] = yres2 = df.apply(lambda x: x.corr(df['Taregt']))

对于这两种方法,我得到的结果都低于0.4

为什么我的得分很低?我期望得到更高的得分?我遗漏了什么?


回答:

这是一个由scikit-learn的便捷函数make_classification生成的人工随机分类数据集。绝对没有理由期望特征与标签之间的相关系数会落在某个特定的值范围内。实际上,一个简单的实验表明,确实存在一系列的相关系数值,从高达约0.65(正值或负值)到接近零,正如在这种随机数据中所预期的那样;为了简洁,保持n_features=10

from sklearn.datasets import make_classificationfrom sklearn.feature_selection import mutual_info_classifimport pandas as pdfor i in range(10):  X, y = make_classification(n_features=10, n_redundant=4, n_informative=6,n_clusters_per_class=2, n_samples=50000)  df = pd.DataFrame(data=X)  df['Target'] = y  res2 = df.apply(lambda x: x.corr(df['Target']))  print(res2)

结果:

0        -0.2996191         0.0198792        -0.2712263         0.3246324        -0.2998245         0.2775746         0.0284627         0.3951188         0.2973979         0.001334Target    1.000000dtype: float640        -0.0085461        -0.1318752         0.0095823         0.3147254         0.2921525         0.0027546         0.2038957         0.0095308        -0.3146099         0.310828Target    1.000000dtype: float640         0.0619111         0.6482002        -0.2938453         0.0024024         0.5925915        -0.3875686         0.2774497         0.5742728        -0.4488039        -0.000266Target    1.000000dtype: float640         0.2893611         0.3068372        -0.5657763         0.0182114        -0.0016505        -0.0083176        -0.3182717         0.0258308        -0.0015119         0.461342Target    1.000000dtype: float640         0.3162921         0.2233312        -0.0018173         0.4237084        -0.4661665        -0.2837356        -0.2120397         0.3116008        -0.2923529         0.302497Target    1.000000dtype: float640         0.0063511        -0.0046312        -0.3311843         0.0839914         0.0022275        -0.0008836        -0.1239987         0.3747928        -0.0870079         0.530111Target    1.000000dtype: float640        -0.2788371         0.3603392        -0.4076223        -0.0264604        -0.2759855        -0.0074046         0.2959557        -0.2900088         0.2937109         0.138187Target    1.000000dtype: float640         0.0059731        -0.1828022        -0.0010293        -0.0009934         0.2075855         0.0021446         0.2989497        -0.2888918        -0.2772029        -0.203653Target    1.000000dtype: float640         0.2989331         0.0004612        -0.0048373         0.2902854        -0.0130165        -0.0032806        -0.1318177         0.0487338        -0.0329109         0.002162Target    1.000000dtype: float640         0.4948091         0.3820982         0.5493773         0.0046324         0.3005725        -0.4862026        -0.5819247         0.3000248         0.3082409        -0.398422Target    1.000000dtype: float64

仅从相关系数值来看,我们甚至无法确定哪些特征是有信息量的(这里是6个),哪些是冗余的(这里是4个)。

简而言之:这里没有什么需要解释的,再者,你所说的“低于0.4”并不准确。

类似的论点也适用于互信息。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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