【问题标题】:How to calculate pairwise Mutual Information for entire pandas dataset?如何计算整个熊猫数据集的成对互信息?
【发布时间】:2021-01-06 04:28:17
【问题描述】:

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

所以最后我想要一个像这样的数据框

现在我正在使用以下方法计算它,但这需要很长时间,因为我每次都必须更改我的 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

【问题讨论】:

    标签: python pandas dataframe scikit-learn mutual-information


    【解决方案1】:

    使用列表推导:

    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)
    

    【讨论】:

    • 我收到以下错误ValueError: 46 columns passed, passed data had 4 columns
    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 2013-12-27
      • 2022-11-14
      • 1970-01-01
      • 2021-05-23
      相关资源
      最近更新 更多