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

基于重采样验证Python无约束决策树深度预期值的问题

决策树深度复现与书本推导结果不符的问题

我尝试验证Aurélian Géron所著《Hands-On Machine Learning with Scikit-Learn, Keras & TensorFlow》第六章问题1的答案:

C61. 在无约束条件下,训练含一百万样本的数据集得到的决策树近似深度是多少?

书中推导结果为19.93,但我通过Python重采样复现时,得到的深度分布均值约17.14、中位数为17,与预期的20差距较大;且修改定义X时randint函数的范围,分布会发生变化。我怀疑代码存在问题,比如是否因每次迭代重采样、使用回归树而非分类树,或是其他代码细节导致?

注:Python运行于Anaconda环境,使用multiprocess替代multiprocessing。

复现代码

import numpy as np
import pandas as pd 
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt
import multiprocess as mp2 

# 定义拟合函数
def random_dt(k): 
    X = pd.DataFrame(np.random.randint(0, 100, size = (1000000, 2)), columns = ['y', 'x'])
    y = X['y'].to_numpy().reshape(-1, 1)
    X = X['x'].to_numpy().reshape(-1, 1)
    dt = DecisionTreeRegressor()
    dt.fit(X, y)
    depth = dt.get_depth()
    return(depth)

# 多进程加速
p = mp2.Pool(processes = mp2.cpu_count() - 1)
with p as mp_pool: 
    depths = mp_pool.map(random_dt, range(10000))

# 绘制深度分布直方图
a = min(depths)
b = max(depths)
plt.hist(depths, bins = np.arange(a - 0.5, b + 0.5))
plt.xticks(range(a, b))
plt.xlabel('深度')
plt.ylabel('模型数量')
plt.title('10000棵决策树的深度分布')
plt.xlim()
plt.show()

多次运行后结果稳定,深度分布均值约17.14、中位数17,与书本答案不符。

10000棵决策树的深度分布

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:20:33