如何计算整个数据集的成对互信息?

2024-06-11 22:02:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据框中有50个变量。46个为因变量,4个为独立变量(降水、温度、露水、雪)。我想计算依赖变量的互信息,而不是独立变量

所以最后我想要一个像这样的数据帧enter image description here

现在,我正在使用以下公式计算它,但它花费了很长时间,因为我每次都必须更改我的y

X = df[['Temperature', 'Precipitation','Dew','Snow']] # Features
y = df[['N0037']] #target 

from sklearn.feature_selection import mutual_info_regression
mi = mutual_info_regression(X, y)
mi /= np.max(mi)

mi = pd.Series(mi)
mi.index = X.columns
mi.sort_values(ascending=False)
mi

Tags: 数据infodf温度公式花费mitemperature
2条回答

另一种方法是将自定义方法传递给pandas.DataFrame.corr()函数

from sklearn.feature_selection import mutual_info_regression

def custom_mi_reg(a, b):
    a = a.reshape(-1, 1)
    b = b.reshape(-1, 1)
    return  mutual_info_regression(a, b)[0] # should return a float value
    
    
df_mi = df.corr(method=custom_mi_reg)

使用列表理解:

indep_vars = ['Temperature', 'Precipitation', 'Dew', 'Snow'] # set independent vars
dep_vars = df.columns.difference(indep_vars).tolist() # set dependent vars

from sklearn.feature_selection import mutual_info_regression as mi_reg

df_mi = pd.DataFrame([mi_reg(df[indep_vars], df[dep_var]) for dep_var in dep_vars], index = dep_vars, columns = indep_vars).apply(lambda x: x / x.max(), axis = 1)

相关问题 更多 >