如何使用pandas或sklearn识别非分类数值型与回归类特征
识别数据集中非分类数值型/回归类特征的实现方法
判断非分类数值特征的核心逻辑有两个:一是列本身为数值类型(整数、浮点数等),二是列的唯一值占总样本的比例较高(分类特征通常唯一值数量极少,比如性别、等级类特征通常只有2-10种取值,回归类数值特征取值离散/连续且重复少)。以下分别给出pandas和sklearn的实现方案:
方法1:仅用pandas实现
步骤1:构造示例DataFrame
import pandas as pd df = pd.DataFrame({ 'A': [1, 2, 3], 'B': [224, 9978, 5], 'C': ['A', 'B', 'D'] })
步骤2:特征筛选
你可以根据业务场景自定义唯一值占比阈值,以下示例阈值设置为0.8(即唯一值占总样本80%以上判定为非分类数值特征):
# 第一步:筛选所有数值类型的列,排除字符串、对象类非数值列 numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns.tolist() # 第二步:按唯一值占比筛选非分类数值特征 threshold = 0.8 non_categorical_features = [] for col in numeric_cols: unique_ratio = df[col].nunique() / len(df) if unique_ratio > threshold: non_categorical_features.append(col) print("非分类数值/回归类特征:", non_categorical_features)
上述代码在示例数据集的输出结果为['A', 'B'],如果A列是ID类无需保留,可额外加规则排除。
方法2:结合sklearn实现
可以用sklearn自带的目标类型推断工具直接判断:
import pandas as pd from sklearn.utils.multiclass import type_of_target non_categorical_features = [] for col in df.columns: # 先判断列是否为数值类型 if pd.api.types.is_numeric_dtype(df[col]): # 类型为continuous即为连续/回归类数值特征 if type_of_target(df[col]) == 'continuous': non_categorical_features.append(col) print("非分类数值/回归类特征:", non_categorical_features)
注意:
type_of_target默认判断为continuous的条件是数值型且唯一值数量大于10,或列类型为浮点数。如果你的数据集样本量小、数值唯一值少但确实属于回归类特征,可以自行调整判断规则。
内容的提问来源于stack exchange,提问作者jr123456jr987654321
相关产品推荐
相关产品推荐

