Python中连续变量与多分类类别变量的相关性计算方法咨询
连续变量与多分类标签相关性计算方案
核心问题说明
你之前对类别做One-Hot编码后用pd.corr()出现大量NaN,是因为One-Hot生成的多列标签是互斥关系,默认的皮尔逊相关系数不适合这种二分类标签和连续变量的关联计算,直接使用逻辑回归系数不做预处理的话,结果会受特征量纲影响,鲁棒性不足。
推荐实现方案
方案1:ANOVA F值(对应示例B输出,全局关联度)
用方差分析的F值衡量连续特征整体和多分类标签的关联强度,F值越大说明特征对类别区分的贡献越高,归一化后即可得到0-1区间的关联度,结果统计显著性强,鲁棒性高。
import pandas as pd from sklearn.feature_selection import f_classif # 沿用你构造的数据集 df = pd.DataFrame({ "Class" : ["High", "High", "Medium", "Medium", "Low", "Low"], "Feature 1" : [10, 20, 30, 40, 50, 60], "Feature 2" : [20, 40, 60, 80, 100, 120], "Feature 3" : [30, 90, 120, 150, 180, 210] }) X = df.drop(columns=["Class"]) y = df["Class"] # 计算ANOVA F值,忽略p值输出 f_scores, _ = f_classif(X, y) # 归一化到0-1区间,所有特征关联度和为1 f_scores_norm = f_scores / f_scores.sum() # 生成示例B格式输出 result_b = pd.DataFrame([f_scores_norm], columns=X.columns, index=["Class"]) print(result_b)
方案2:标准化+归一化多分类逻辑回归系数(对应示例A输出,类别特异性关联度)
针对你当前已经实现的逻辑回归方案做两处优化即可大幅提升鲁棒性:
- 先对特征做标准化,消除不同量纲对系数大小的影响
- 对系数取绝对值后按行归一化,得到每个类别下各特征的贡献占比
import pandas as pd from sklearn.linear_model import LogisticRegression from sklearn.preprocessing import StandardScaler X = df.drop(columns=["Class"]) y = df["Class"] # 标准化特征 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 可调整C参数控制正则强度,C越小正则越强,鲁棒性越高 lr = LogisticRegression(multi_class="multinomial", solver="lbfgs", max_iter=10000, random_state=1, C=1.0) lr.fit(X_scaled, y) # 取系数绝对值后按行归一化,每行和为1 importances = abs(lr.coef_) importances_norm = importances / importances.sum(axis=1, keepdims=True) # 生成示例A格式输出 result_a = pd.DataFrame(importances_norm, columns=X.columns, index=y.unique()) print(result_a)
可选替代方案:点二列相关系数
如果不想用模型类方法,可以分别对每个类别做二值化转换,计算点二列相关系数,也能得到和示例A一致的输出,适合对统计显著性有要求的场景。
内容的提问来源于stack exchange,提问作者zoump
相关产品推荐
相关产品推荐

