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

使用独热编码器构建决策树:分类数据处理入门求助

用Pandas独热编码+Scikit-learn构建决策树(全分类数据场景)

完全明白你的需求,我直接给你一个从头到尾的可运行示例,覆盖从全分类数据集创建到决策树训练的全流程,用的就是你提到的Pandas get_dummies 方法,完美适配Scikit-learn的数值型输入要求。

步骤1:导入所需库

先把要用到的工具库都导进来:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report
from sklearn.preprocessing import LabelEncoder  # 用于处理分类标签

步骤2:创建全分类的示例数据集

模拟一个所有特征和标签都是分类类型的数据集,比如用户购买行为预测场景:

# 构建样本数据
data = {
    '性别': ['男', '女', '男', '女', '男', '女', '男', '女', '男', '女'],
    '职业': ['学生', '上班族', '上班族', '学生', '自由职业', '上班族', '学生', '自由职业', '上班族', '学生'],
    '学历': ['本科', '硕士', '本科', '大专', '硕士', '本科', '大专', '硕士', '本科', '大专'],
    '是否购买': ['是', '否', '是', '否', '是', '是', '否', '是', '否', '是']  # 标签列
}

df = pd.DataFrame(data)
print("原始数据集:")
print(df)

步骤3:拆分特征与标签,处理分类标签

Scikit-learn的模型要求标签是数值型,所以先把标签列转成0/1(两种方式任选其一即可):

# 拆分特征X和标签y
X = df.drop('是否购买', axis=1)
y = df['是否购买']

# 方式1:用LabelEncoder自动编码
le = LabelEncoder()
y = le.fit_transform(y)

# 方式2:手动映射(适合标签取值明确的场景)
# y = y.map({'否': 0, '是': 1})

步骤4:用Pandas get_dummies做独热编码

这一步是核心,get_dummies会自动识别所有分类特征列,生成对应的二进制编码列,完全满足Scikit-learn的数值输入要求:

# 对特征进行独热编码
X_encoded = pd.get_dummies(X)
print("\n独热编码后的特征:")
print(X_encoded)

你会看到原来的每个分类特征的不同取值,都变成了单独的二进制列(比如性别_男、性别_女),既保留了所有分类信息,又不会引入数值顺序的误导。

步骤5:拆分训练集和测试集

把编码后的数据拆分成训练用和测试用的子集:

X_train, X_test, y_train, y_test = train_test_split(X_encoded, y, test_size=0.2, random_state=42)

步骤6:训练并评估决策树模型

现在就可以用Scikit-learn的决策树模型正常训练了:

# 初始化决策树分类器
clf = DecisionTreeClassifier(random_state=42)

# 训练模型
clf.fit(X_train, y_train)

# 预测测试集
y_pred = clf.predict(X_test)

# 评估模型性能
print("\n模型准确率:", accuracy_score(y_test, y_pred))
print("\n分类报告:")
print(classification_report(y_test, y_pred, target_names=le.classes_))

一些实用小提示

  • 如果你的数据里有部分列不需要编码,可以用get_dummies的columns参数指定要编码的列,比如pd.get_dummies(X, columns=['性别', '职业'])
  • 独热编码后不会引入数值型特征的尺度问题,完美适配决策树这类对特征尺度不敏感的模型
  • 如果标签是多分类(超过2类),上述流程同样适用,只需要保持标签的数值编码即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:35:23