我正在尝试使用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分数的正确方法是什么?
答案 0 :(得分:1)
我不太了解minepy但查看源代码,compute_score
接收x
和y
参数必须是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)
参考