分类特征相关

use*_*080 8 machine-learning pandas categorical-data feature-engineering

我的数据中有一些连续的分类特征。对类别特征进行热编码以找到其与其他连续生物与标签的相关性是一个好主意还是绝对坏主意?

Kei*_*iku 16

有一种无需对类别变量进行一次热编码就可以计算相关系数的方法。Cramers V统计量是一种计算分类变量的相关性的方法。可以如下计算。以下链接很有帮助。使用熊猫,计算Cramér系数矩阵。对于具有其他连续值的变量,您可以使用cut进行分类pandas

import pandas as pd
import numpy as np
import scipy.stats as ss
import seaborn as sns

tips = sns.load_dataset("tips")

tips["total_bill_cut"] = pd.cut(tips["total_bill"],
                                np.arange(0, 55, 5),
                                include_lowest=True,
                                right=False)

def cramers_v(confusion_matrix):
    """ calculate Cramers V statistic for categorial-categorial association.
        uses correction from Bergsma and Wicher,
        Journal of the Korean Statistical Society 42 (2013): 323-328
    """
    chi2 = ss.chi2_contingency(confusion_matrix)[0]
    n = confusion_matrix.sum()
    phi2 = chi2 / n
    r, k = confusion_matrix.shape
    phi2corr = max(0, phi2 - ((k-1)*(r-1))/(n-1))
    rcorr = r - ((r-1)**2)/(n-1)
    kcorr = k - ((k-1)**2)/(n-1)
    return np.sqrt(phi2corr / min((kcorr-1), (rcorr-1)))

confusion_matrix = pd.crosstab(tips["day"], tips["time"]).as_matrix()
cramers_v(confusion_matrix)
# Out[10]: 0.93866193407222209

confusion_matrix = pd.crosstab(tips["total_bill_cut"], tips["time"]).as_matrix()
cramers_v(confusion_matrix)
# Out[24]: 0.16498707494988371
Run Code Online (Sandbox Code Playgroud)

  • 我很抱歉误解了这个问题。我认为计算一个热编码特征和另一个连续特征之间的相关性没有问题,但我认为相关系数只会是该类别中的一项的值。 (5认同)
  • 感谢您的回复,但我的问题不是如何计算分类特征之间的相关性。问题是:将热编码器用于分类特征,然后使用包括分类和连续特征在内的特征来计算相关性是一个好主意还是一个非常糟糕的主意。 (3认同)
  • 对不起,没有解释。假设您已对某一项性别进行了热编码。性别项目分为男性和女性以及其他变量。男性变量是0或1的标志,无论是否是男性。我认为有可能与这些标志变量相关联。然而,通常,用于类别变量的相关系数使用统计分析方法,该统计分析方法使用诸如一热编码之前的项目类别频率之类的统计数据。另请参阅https://stats.stackexchange.com/questions/102778/correlations-between-continuous-and-categorical-nominal-variables (2认同)