You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Scikit-learn互信息分类检测数据集单调性的语法与数据拆分问题

解决train_test_split报错与mutual_info_classif的正确使用方法

1. 明确X(特征)和y(目标变量)的定义

假设你的数据集是Pandas DataFrame格式:

  • X:提取所有特征列(即mean、std、skew等你提到的平滑后特征),排除分类目标列。示例:
    X = df[['mean', 'std', 'skew', 'kurtosis']]  # 替换为你的实际特征列名
    
  • y:提取分类目标变量列,必须是离散的类别标签(比如0/1、"normal"/"abnormal"这类,因为mutual_info_classif是为分类任务设计的)。示例:
    y = df['target']  # 替换为你的实际目标列名
    

2. 修复train_test_split的ValueError

你遇到的ValueError: not enough values to unpack (expected 4, got 2),是因为调用train_test_split时只传入了单一数据集,没有分离X和y。函数只有同时接收特征矩阵和目标变量,才会返回4个拆分结果。正确用法:

from sklearn.model_selection import train_test_split

# 按60%训练集、40%测试集拆分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=42)
  • random_state参数用于固定拆分结果,方便复现;可以根据需求调整。

3. 计算互信息并按降序排列

使用mutual_info_classif计算特征与目标的互信息值,再将结果排序输出:

from sklearn.feature_selection import mutual_info_classif
import pandas as pd

# 基于训练集计算互信息(避免测试集数据泄露)
mi_scores = mutual_info_classif(X_train, y_train)

# 构造特征-互信息值的DataFrame
mi_results = pd.DataFrame({
    'feature': X_train.columns,
    'mutual_info_score': mi_scores
})

# 按互信息值降序排序
mi_results_sorted = mi_results.sort_values(by='mutual_info_score', ascending=False)

# 查看结果
print(mi_results_sorted)
  • 互信息值越高,代表该特征与目标变量的关联程度越强;如果需要筛选特征,可以根据这个排序结果选择Top N特征。

内容的提问来源于stack exchange,提问作者mpengel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:50:26