我正在尝试在 python 中使用 sklearn 的mutual_info_classif。它给我一个错误?

Posted

技术标签:

【中文标题】我正在尝试在 python 中使用 sklearn 的mutual_info_classif。它给我一个错误?【英文标题】:i am trying to use sklearn's mutual_info_classif in python. It is throwing me a error? 【发布时间】:2020-02-27 13:19:50 【问题描述】:

我有一个 64 列的数据集,我想找到互信息分数或矩阵来了解所有特征之间的关系。我在 sklearn 模块mutual_info_score 中发现了一个函数,它总是抛出:

ValueError: 找到包含 0 个样本 (shape=(0, 1)) 的数组,而至少需要 1 个样本?

谁能指导我?另外,如果有人知道找到整个数据集的互信息的更好方法,请告诉我。

我已经以 numpy 数组的形式在参数中给出了输入。对于 X 和标签。

from sklearn.feature_selection import mutual_info_classif
epoch1 = pd.read_excel('eegforevent_0.xlsx')
X=epoch1

y = []

for i in range(0,360):
     y.append(i)

y1 = pd.DataFrame(y)


mi = mutual_info_classif(X.to_numpy(),y1.to_numpy())
C:\Users\xx\Anaconda4\lib\site-packages\sklearn\utils\validation.py:724: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
  y = column_or_1d(y, warn=True)

    ValueError                                Traceback (most recent call       last)
   <ipython-input-105-7a0d61440a9b> in <module>
   ----> 1 mi = mutual_info_classif(X.to_numpy(),y1.to_numpy())

  ValueError: Found array with 0 sample(s) (shape=(0, 1)) while a minimum of   1 is required.

【问题讨论】:

【参考方案1】:

您收到错误,因为函数 mutual_info_classif() 需要目标 y 的分类变量。如果您的目标y 是一个连续变量,那么您可以使用mutual_info_regression()。有关详细信息,请参阅documentation。

此外,在mi = mutual_info_classif(X.to_numpy(),y1.to_numpy()) 这一行中,无需将y1 转换为numpy 数组。确保 y1 dtype 是 mutual_info_classif() 工作的对象。

【讨论】:

以上是关于我正在尝试在 python 中使用 sklearn 的mutual_info_classif。它给我一个错误?的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中调整 ElasticNet 参数 sklearn 包

使用 sklearn 在 python 中执行逻辑回归分析

python:如何在sklearn中使用逻辑回归系数构建决策边界

通过 Pipeline sklearn (Python) 使用多个自定义类

Python 3.5 尝试使用 sklearn 和 matplotlib 绘制 PCA

DBSCAN 集群甚至无法处理 40k 数据,但使用 python 和 sklearn 处理 10k 数据