depth = np.arange(1, 15) err_train_list = [] err_test_list = [] clf = DecisionTreeClassifier(criterion='entropy') for d in depth: clf.set_params(max_depth=d) clf.fit(x_train, y_train) y_train_pred = clf.predict(x_train) err_train = 1-accuracy_score(y_train, y_train_pred) err_train_list.append(err_train) y_test_pred = clf.predict(x_test) err_test = 1-accuracy_score(y_test, y_test_pred) err_test_list.append(err_test) print(d, '测试集错误率:%.2f%%' % (100 * err_test)) plt.figure(facecolor='w') plt.plot(depth, err_test_list, 'ro-', markeredgecolor='k', lw=2, label='测试集错误率') plt.plot(depth, err_train_list, 'go-', markeredgecolor='k', lw=2, label='训练集错误率') plt.xlabel('决策树深度', fontsize=13) plt.ylabel('错误率', fontsize=13) plt.legend(loc='lower left', fontsize=13) plt.title('决策树深度与过拟合', fontsize=15) plt.grid(b=True, ls=':', color='#606060') depth = np.arange(1, 15) err_train_list = [] err_test_list = [] clf = DecisionTreeClassifier(criterion='entropy') for d in depth: clf.set_params(max_depth=d) clf.fit(x_train, y_train) y_train_pred = clf.predict(x_train) err_train = 1-accuracy_score(y_train, y_train_pred) err_train_list.append(err_train) y_test_pred = clf.predict(x_test) err_test = 1-accuracy_score(y_test, y_test_pred) err_test_list.append(err_test) print(d, '测试集错误率:%.2f%%' % (100 * err_test)) plt.figure(facecolor='w') plt.plot(depth, err_test_list, 'ro-', markeredgecolor='k', lw=2, label='测试集错误率') plt.plot(depth, err_train_list, 'go-', markeredgecolor='k', lw=2, label='训练集错误率') plt.xlabel('决策树深度', fontsize=13) plt.ylabel('错误率', fontsize=13) plt.legend(loc='lower left', fontsize=13) plt.title('决策树深度与过拟合', fontsize=15) plt.grid(b=True, ls=':', color='#606060') plt.show()
时间: 2024-04-08 15:36:06 浏览: 94
这段代码是用于通过决策树深度来观察决策树的过拟合情况。代码首先定义了一个范围为1到15的深度列表depth,然后创建了两个空列表err_train_list和err_test_list,用于存储训练集和测试集的错误率。接下来,使用决策树分类器DecisionTreeClassifier,并设置criterion为'entropy',创建了一个决策树模型clf。然后,使用for循环遍历深度列表depth,每次将当前深度d设置为clf的最大深度,并使用x_train和y_train进行拟合。然后,分别对训练集和测试集进行预测,并计算错误率,将错误率添加到对应的列表中。最后,使用matplotlib库绘制了深度与错误率的图形,并显示出来。
这段代码可以帮助我们观察决策树在不同深度下的过拟合情况,通过观察错误率的变化,可以选择一个合适的深度来构建决策树模型。
相关问题
depth = np.arange(1, 15) err_train_list = [] err_test_list = [] clf = DecisionTreeClassifier(criterion='entropy') for d in depth: clf.set_params(max_depth=d) clf.fit(x_train, y_train) y_train_pred = clf.predict(x_train) err_train = 1-accuracy_score(y_train, y_train_pred) err_train_list.append(err_train) y_test_pred = clf.predict(x_test) err_test = 1-accuracy_score(y_test, y_test_pred) err_test_list.append(err_test) print(d, '测试集错误率:%.2f%%' % (100 * err_test)) plt.figure(facecolor='w') plt.plot(depth, err_test_list, 'ro-', markeredgecolor='k', lw=2, label='测试集错误率') plt.plot(depth, err_train_list, 'go-', markeredgecolor='k', lw=2, label='训练集错误率') plt.xlabel('决策树深度', fontsize=13) plt.ylabel('错误率', fontsize=13) plt.legend(loc='lower left', fontsize=13) plt.title('决策树深度与过拟合', fontsize=15) plt.grid(b=True, ls=':', color='#606060') plt.show()
这段代码是一个决策树的深度与过拟合关系的实验。代码首先定义了一个从1到14的深度范围,并初始化了两个空列表err_train_list和err_test_list来保存训练集和测试集的错误率。然后创建了一个DecisionTreeClassifier对象clf,并设置其criterion参数为'entropy',即使用信息熵作为分裂标准。
接下来的循环中,根据不同深度设置clf的max_depth参数,并使用训练集x_train和y_train进行拟合。然后分别对训练集和测试集进行预测,计算错误率并将其添加到对应的列表中。最后,打印出每个深度对应的测试集错误率。
代码的最后部分使用matplotlib库绘制了一个图表,横坐标为深度,纵坐标为错误率。其中红色线表示测试集的错误率,绿色线表示训练集的错误率。图表的标题是"决策树深度与过拟合",横轴标签是"决策树深度",纵轴标签是"错误率"。
通过这个实验,可以观察到决策树深度与过拟合之间的关系。一般来说,随着深度的增加,模型在训练集上的错误率会逐渐降低,但在测试集上的错误率可能会先降低后增加,这就是过拟合的现象。通过观察图表,可以找到一个合适的深度,使得模型在训练集和测试集上的错误率都较低。
阅读全文