minepy:缓冲区的维数错误

时间:2018-04-25 20:17:22

标签: python python-3.x pandas regression data-science

我正在尝试使用Boston Housing dataset在jupyter笔记本中使用最大信息系数。

import numpy as np
import pandas as pd
from minepy import MINE

#Read dataset
df = pd.read_csv('housing.data', delim_whitespace=True, header=None);
col_name = ['CRIM', 'ZN' , 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
df.columns = col_name;

#Compute MIC
m = MINE()
m.compute_score(df[col_name[0:13]], df.MEDV)
print(m.mic())

m.compute_score(..正在给我一个ValueError: Buffer has wrong number of dimensions (expected 1, got 2)

更新

我现在明白compute_score()期待一个向量而不是一个矩阵。在df.MEDV和13个要素df[col_name[0:13]]之间找到MIC分数的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

我不太了解minepy但查看源代码,compute_score接收xy参数必须是1D数组,然后如果你传递14xN数组( 2D)这不会工作。

取而代之的是pstats (View on API)收到一个二维数组,而cstats (View on API)会收到一对二维数组,所以你可以看看两者,如上所述,我不知道我不太了解你的太多或你正在寻找的目的,但你可以按如下方式使用它们:

from minepy import pstats, cstats

... # Load of the data

micOneVector, ticOneVector = pstats(df)            # Returns mic and tic (Arrays of 1D)

micTwoVectors, ticTwoVectors = cstats(df, df.MEDV) # Returns mic and tic (Arrays of 1D)

参考

minepy - Source code

minepy - Python API