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

使用mutual_info_classif做特征选择时遇字符串转浮点错误求助

问题:使用mutual_info_classif进行特征选择时触发字符串转浮点数错误

执行基于互信息的特征选择代码时,出现如下错误:

ValueError: could not convert string to float: 'Mr. Michael Hall'

使用的代码:

from sklearn.feature_selection import mutual_info_classif
mutual_info = mutual_info_classif(X_train_cat, y_train)

原因及解决办法

错误原因

mutual_info_classif 仅支持处理数值型特征,无法直接解析字符串格式的分类数据。它会默认尝试将所有输入特征转换为浮点数用于计算互信息,遇到字符串类型的分类值(比如示例中的'Mr. Michael Hall')时,转换失败就会抛出该错误。

解决方法

需要先将字符串分类特征转换为数值型,常用两种编码方式:

  • 标签编码(Label Encoding)
    适合处理有序分类特征(比如"低/中/高"这类有层级的类别),将每个唯一字符串映射为一个整数:

    from sklearn.preprocessing import LabelEncoder
    import pandas as pd
    
    # 对每个分类列做标签编码
    le = LabelEncoder()
    X_train_encoded = X_train_cat.apply(lambda col: le.fit_transform(col))
    # 再计算互信息
    mutual_info = mutual_info_classif(X_train_encoded, y_train)
    
  • 独热编码(One-Hot Encoding)
    适合处理无序分类特征(比如姓名、城市这类无层级的类别),避免模型误判类别存在顺序关系:

    from sklearn.preprocessing import OneHotEncoder
    import pandas as pd
    
    ohe = OneHotEncoder(sparse_output=False, drop='first')  # drop='first'避免多重共线性
    X_train_ohe = ohe.fit_transform(X_train_cat)
    # 可选:转换为DataFrame保留特征名
    X_train_ohe_df = pd.DataFrame(X_train_ohe, columns=ohe.get_feature_names_out(X_train_cat.columns))
    # 计算互信息
    mutual_info = mutual_info_classif(X_train_ohe_df, y_train)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:35:21