基于重采样验证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,与书本答案不符。

内容的提问来源于stack exchange,提问作者jasmyace
相关产品推荐
相关产品推荐

