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)
| 归档时间: |
|
| 查看次数: |
6983 次 |
| 最近记录: |