1.如果训练集有100万个实例,训练决策树(无约束)大致的深度 是多少?
一个包含m个叶节点的均衡二叉树的深度等于log2(m)(注: log2是基2对数,log2(m)=log(m)/log(2)。),取整。通常来 说,二元决策树(只做二元决策的树,就像Scikit-Learn中的所有树一 样)训练到最后大体都是平衡的,如果不加以限制,最后平均每个叶节 点一个实例。因此,如果训练集包含100万个实例,那么决策树的深度 为log2(106)≈20层(实际上会更多一些,因为决策树通常不可能完 美平衡)。
2.通常来说,子节点的基尼不纯度是高于还是低于其父节点?是 通常更高/更低?还是永远更高/更低?
一个节点的基尼不纯度通常比其父节点低。这是由于CART训练算 法的成本函数。该算法分裂每个节点的方法,就是使其子节点的基尼不 纯度的加权之和最小。但是,如果一个子节点的不纯度远小于另一个, 那么也有可能使子节点的基尼不纯度比其父节点高,只要那个不纯度更 低的子节点能够抵偿这个增加即可。
3.如果决策树过拟合训练集,减少max_depth是否为一个好主意?
如果决策树过拟合训练集,降低max_depth可能是一个好主意, 因为这会限制模型,使其正则化。
4.如果决策树对训练集欠拟合,尝试缩放输入特征是否为一个好 主意?
决策树的优点之一就是它们不关心训练数据是缩放还是集中,所 以如果决策树不适合训练集,缩放输入特征不过是浪费时间罢了。
5.如果在包含100万个实例的训练集上训练决策树需要一个小时, 那么在包含1000万个实例的训练集上训练决策树,大概需要多长时 间?
决策树的训练复杂度为O(n×mlog(m))。所以,如果将训练 集大小乘以10,训练时间将乘以K=(n×10m×log(10m))/ (n×m×log(m))=10×log(10m)/log(m)。如果m=106,那么 K≈11.7,所以训练1000万个实例大约需要11.7小时。
6.如果训练集包含10万个实例,设置presort=True可以加快训练 吗?
只有当数据集小于数千个实例时,预处理训练集才可以加速训 练。如果包含100 000个实例,设置presort=True会显著减慢训练。