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

如何在Scikit-learn中向DecisionTreeRegressor传入分类与数值混合特征?

在Scikit-learn的DecisionTreeRegressor中处理分类与数值混合特征

嘿,我来帮你搞定这个问题!Scikit-learn的DecisionTreeRegressor本身只能处理数值型输入,没法直接用原始的分类特征(比如字符串类型的类别标签)。不过没关系,有两种常用的预处理方法可以搞定混合特征的情况,下面我结合示例给你详细说明:

方法1:独热编码(One-Hot Encoding)

这是处理无序分类特征的首选方案,比如颜色(红/蓝/绿)、城市名称这类没有顺序关系的类别。它会把每个类别转换成一个独立的二进制列,避免模型误以为类别之间有数值上的大小关系。

示例代码:

from sklearn import tree
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
import pandas as pd

# 构造含混合特征的示例数据集
data = {
    '数值特征1': [10, 20, 30, 40, 50],
    '数值特征2': [0.5, 0.7, 0.3, 0.8, 0.2],
    '分类特征': ['A', 'B', 'A', 'C', 'B'],
    '目标值': [100, 200, 150, 300, 250]
}
df = pd.DataFrame(data)

# 拆分特征与目标变量
X = df.drop('目标值', axis=1)
y = df['目标值']

# 定义预处理管道:分类特征做独热编码,数值特征直接保留
preprocessor = ColumnTransformer(
    transformers=[
        ('cat_encoder', OneHotEncoder(sparse_output=False), ['分类特征']),
        ('num_passthrough', 'passthrough', ['数值特征1', '数值特征2'])
    ])

# 执行特征预处理
X_processed = preprocessor.fit_transform(X)

# 训练决策树回归器
make_tree = tree.DecisionTreeRegressor()
fit_tree = make_tree.fit(X_processed, y)

方法2:标签编码(Label Encoding)

如果你的分类特征是有序的(比如等级:低/中/高、学历:本科/硕士/博士),可以用标签编码把每个类别映射成一个整数。但要注意:无序类别绝对不能用这个方法,否则会让模型错误地认为类别之间存在数值大小关系。

示例代码:

from sklearn import tree
from sklearn.preprocessing import LabelEncoder
import pandas as pd

# 构造含有序分类特征的示例数据集
data = {
    '数值特征1': [10, 20, 30, 40, 50],
    '数值特征2': [0.5, 0.7, 0.3, 0.8, 0.2],
    '分类特征': ['低', '中', '低', '高', '中'],
    '目标值': [100, 200, 150, 300, 250]
}
df = pd.DataFrame(data)

# 对有序分类特征执行标签编码
le = LabelEncoder()
df['分类特征_编码'] = le.fit_transform(df['分类特征'])

# 拆分特征与目标变量
X = df[['数值特征1', '数值特征2', '分类特征_编码']]
y = df['目标值']

# 训练决策树回归器
make_tree = tree.DecisionTreeRegressor()
fit_tree = make_tree.fit(X, y)

额外提示

  • 独热编码会增加特征维度,如果分类特征的类别数量极多,可以用OneHotEncoder的drop='first'参数去掉一个冗余列,避免维度爆炸;
  • 决策树系列模型对特征缩放不敏感,所以数值特征不需要做标准化/归一化,这一点比线性模型省心很多!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:29:13