练习

  1. 在 100 万例训练集上训练(没有限制)的决策树的近似深度是多少?

  2. 节点的基尼指数比起它的父节点是更高还是更低?它是通常情况下更高/更低,还是永远更高/更低?

  3. 如果决策树过拟合了,减少最大深度是一个好的方法吗?

  4. 如果决策树对训练集欠拟合了,尝试缩放输入特征是否是一个好主意?

  5. 如果对包含 100 万个实例的数据集训练决策树模型需要一个小时,在包含 1000 万个实例的培训集上训练另一个决策树大概需要多少时间呢?

  6. 如果你的训练集包含 100,000 个实例,设置presort=True会加快训练的速度吗?

  7. moons数据集进行决策树训练并优化模型。

    1. 通过语句make_moons(n_samples=10000, noise=0.4)生成moons数据集

    2. 通过train_test_split()将数据集分割为训练集和测试集。

    3. 进行交叉验证,并使用网格搜索法寻找最好的超参数值(使用GridSearchCV类的帮助文档)

      提示: 尝试各种各样的max_leaf_nodes

    4. 使用这些超参数训练全部的训练集数据,并在测试集上测量模型的表现。你应该获得大约 85% 到 87% 的准确度。

  8. 生成森林

    1. 接着前边的练习,现在,让我们生成 1,000 个训练集的子集,每个子集包含 100 个随机选择的实例。提示:你可以使用 Scikit-Learn 的ShuffleSplit类。

    2. 使用上面找到的最佳超参数值,在每个子集上训练一个决策树。在测试集上测试这 1000 个决策树。由于它们是在较小的集合上进行了训练,因此这些决策树可能会比第一个决策树效果更差,只能达到约 80% 的准确度。

    3. 见证奇迹的时刻到了!对于每个测试集实例,生成 1,000 个决策树的预测结果,然后只保留出现次数最多的预测结果(您可以使用 SciPy 的mode()函数)。这个函数使你可以对测试集进行多数投票预测。

    4. 在测试集上评估这些预测结果,你应该获得了一个比第一个模型高一点的准确率,(大约 0.5% 到 1.5%),恭喜,你已经弄出了一个随机森林分类器模型!

{% endraw %}