# 控制决策树的复杂度

控制决策树的复杂度

设置 max_depth=4,这意味着只可以连续问 4 个问题

#  控制决策树的复杂度
# 我们在乳腺癌数据集上更详细地看一下预剪枝的效果
# 我们固定树的 random_state,用于在内部解决平局问题from sklearn.tree import DecisionTreeClassifier
​
cancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
    cancer.data, cancer.target, stratify=cancer.target, random_state=42)
tree = DecisionTreeClassifier(random_state=0)
tree.fit(X_train, y_train)
print("Accuracy on training set: {:.3f}".format(tree.score(X_train, y_train)))
print("Accuracy on test set: {:.3f}".format(tree.score(X_test, y_test)))
Accuracy on training set: 1.000
Accuracy on test set: 0.937



# 不出所料,训练集上的精度是 100%,这是因为叶结点都是纯的,树的深度很大,足以完
# 美地记住训练数据的所有标签。测试集精度比之前讲过的线性模型略低,线性模型的精度
# 约为 95%


# 如果我们不限制决策树的深度,它的深度和复杂度都可以变得特别大。
# 因此,未剪枝的树容易过拟合,对新数据的泛化性能不佳。
# 现在我们将预剪枝应用在决策树上,这可以在完
# 美拟合训练数据之前阻止树的展开。一种选择是在到达一定深度后停止树的展开。
# 这里我
# 们设置 max_depth=4,这意味着只可以连续问 4 个问题(参见图 2-24 和图 2-26)。限制树的
# 深度可以减少过拟合。这会降低训练集的精度,但可以提高测试集的精度


tree = DecisionTreeClassifier(max_depth=4, random_state=0)
tree.fit(X_train, y_train)

print("Accuracy on training set: {:.3f}".format(tree.score(X_train, y_train)))
print("Accuracy on test set: {:.3f}".format(tree.score(X_test, y_test)))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值