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

AttributeError报错求助:如何将含19个二值列的决策树拆分为10组二值列?

错误原因与修复方案

1. 解决AttributeError错误

AttributeError: 'DecisionTreeClassifier' object has no attribute 'groupby' 是因为你错误地对**决策树分类器实例(clf)**调用了groupby方法——这个方法属于Pandas的DataFrame/Series对象,和sklearn的分类器无关,你应该对原始数据集(或训练集)调用groupby。

2. 实现10个二值列的拆分需求

你的数据集前10列为二值特征,要对每个特征按取值拆分,可遍历这10个列,逐个完成分组拆分。以下是修正后的完整代码:

import pandas as PD
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, accuracy_score

# 加载数据集
data_set = PD.read_csv('hw6.data.csv.gz')

# 提取特征与标签(前10列为特征,保留DataFrame格式方便分组)
x = data_set.iloc[:, :10]
y = data_set.iloc[:, 10]

# 划分训练测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=.2, random_state=42)

# 训练决策树
clf = DecisionTreeClassifier()
clf.fit(x_train, y_train)

# 查看决策树的分裂阈值与节点不纯度(保留原需求)
split_values = clf.tree_.threshold
impurity = clf.tree_.impurity
print("决策树分裂阈值:", split_values)
print("节点不纯度:", impurity)

# 定义二值列拆分函数
def split_binary_column(df, col_name):
    # 获取当前列的两个唯一取值
    unique_vals = df[col_name].unique()
    subgroup_a = df[df[col_name] == unique_vals[0]]
    subgroup_b = df[df[col_name] == unique_vals[1]]
    return {f"{col_name}_{unique_vals[0]}": subgroup_a, f"{col_name}_{unique_vals[1]}": subgroup_b}

# 遍历10个二值特征列,完成拆分
all_split_groups = {}
for col in x.columns:
    all_split_groups.update(split_binary_column(data_set, col))

# 输出拆分结果示例
for group_name, group_data in all_split_groups.items():
    print(f"\n分组 {group_name} 的数据量:{len(group_data)}")
    print(group_data.head())

关键修改说明

  • 保留x为DataFrame格式(移除.values转换),确保能正常使用Pandas的分组方法
  • 替换错误的clf.groupby调用,改为对数据集对象操作
  • 新增遍历逻辑,自动处理10个二值特征列,按每个列的取值拆分出两个子组
  • 拆分结果以字典存储,键为“列名_取值”的格式,便于区分不同分组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:20:41