分类算法—决策树练习

1)Xtrain、Ytrain分别表示什么?

Xtrain表示数据集中的特征列中划分出的训练集,作为训练模型时的特征数据。Xtest表示数据集里特征列划分出的测试集,用于评估训练出的模型好坏,作为评估模型时的特征数据。

2)Ytrain、Ytest分别表示什么?

Ytrain表示数据集中的标签列中划分出的训练集,作为训练模型时的标签数据。Ytest表示数据集里标签列划分出的测试集,用于评估训练出的模型好坏,作为评估模型时的类标签数据。

3)训练集测试集分类器中参数test_size值为浮点型、整型分别表示什么?

test_size值为浮点型时,表示测试集数据的占比;test_size值为整型时,表示测试集数据的条数。

4)决策树模型相关参数解释

1、解释超参数min_samples_leaf和min_samples_split的区别

min_samples_leaf为叶子节点最少样本数,由于样本集随着决策树自顶向下的划分不断减少,如果我们采用后剪枝的方式,用此超参数限制叶子节点最少的样本数,那么当叶子节点的样本数小于这个阈值时,则此节点会和兄弟节点一起被剪枝。

min_samples_split为内部节点再划分所需最小样本数,也就是说设定此超参数的阈值后,当某节点样本数少于这个超参数,决策树将不再继续划分。

这两者的区别在于:min_samples_leaf是以一种后剪枝的方式对决策树进行剪枝。即:当决策树完全划分结束时,再针对限制条件对小于样本数阈值的节点剪枝;而min_samples_split是在预剪枝的方式中,先设定一个样本数阈值,在构造决策树的过程中,当训练样本个数小于该值时,停止树的生长。

2、根据决策树模型参数min_samples_leaf绘制学习曲线

test1 = []
for i in range(10):
clf1=tree.DecisionTreeClassifier(min_samples_leaf=i+2,criterion="entropy",random_state=30,splitter="random")
    clf1=clf1.fit(Xtrain,Ytrain)
    score1=clf1.score(Xtest,Ytest)
    test1.append(score1)
plt.plot(range(1,11),test1,label="min_samples_leaf")
plt.legend()
plt.show()

运行结果:

 该图像当迭代次数i=2时,该模型的拟合度的精确率最高,随后迭代次数在2到4之间持平,在i=4之后开始不断下降。所以当i取值在(2,4)区间内时,拟合效果最好。

3、最终确定的模型

clf1=tree.DecisionTreeClassifier(criterion="entropy",splitter='random',random_state=10,max_depth=5,min_samples_leaf=10,min_samples_split=10)
clf1=clf1.fit(Xtrain,Ytrain)
score1=clf1.score(Xtrain,Ytrain)
print("训练集分类分数",score1)
Ypredict = clf1.predict(Xtest)
print("测试集分类结果",Ypredict)
scoretest=clf1.score(Xtest,Ytest)
print("测试集分类分数",scoretest)
test2 = []
for i in range(10):
clf2=tree.DecisionTreeClassifier(min_samples_split=i+2,criterion="entropy",random_state=30,splitter="random")
    clf2=clf2.fit(Xtrain,Ytrain)
    score2=clf2.score(Xtest,Ytest)
    test2.append(score2)
plt.plot(range(1,11),test2,label="min_samples_split")
plt.legend()
plt.show()
dot_data2 = tree.export_graphviz(clf2,out_file=None,feature_names=feature_name,class_names=["琴酒","雪莉","贝尔摩德"],filled=True,rounded=True)
graph2 = graphviz.Source(dot_data2)
print(graph2)
graph2.render(filename=r"tree_test2",format='jpg')

猜你喜欢

转载自blog.csdn.net/m0_52051577/article/details/130353371