首页 > 编程知识 正文

决策树算法的主要思想,决策树算法的基本原理

时间:2023-05-06 01:02:43 阅读:59247 作者:729

1 .决策树算法概要决策树算法可以同时解决分类问题(相应目标值为类别型数据)和回归问题)输出结果可以是连续的数值)。 与其他算法相比,决策树具有非常明显的优点:直观可视化,分类规则容易理解,非专业人士也容易理解。

例如某个周末,根据天气等情况决定是否出门。 下雨的话就不出门了。 不然我看有没有雾。 ……这个决定的过程可以画成这样的树形图。

以sklearn的葡萄酒数据集为例,给出酒精度等数据指标,采用决策树算法判断葡萄酒类别。

2 .为了加载数据,便于图形可视化演示,只选取第一个特征(酒精度)和第七个特征(黄酮量)两个特征,绘制了三种葡萄酒对应的散点图。

importnumpyasnpimportmatplotlib.pyplotaspltfromsklearnimportdatasets #负载酒数据集wine=datasets.load_wine(2 (两个特征x 6 ]仅选择6]y=wine.target#创建散点图PLT.scatter (x [ y==0,0 ],x [ y==0,1 ] ) PLT

3 .调用算法的方法与调用其他算法的方法一样,是将数据集分为训练集和测试集,然后指定相关参数。 在此将决策树的最大深度指定为2,对算法进行评价

froms klearn.model _ selectionimporttrain _ test _ splitfromsklearnimporttree #是训练集和测试集X_train,X_test 分割为y _ train (random _ state=0) #决策树分类算法DTC=tree.decisiontreeclassifier (max _ depth=2) DTC.fit ) y _ traraiee y_train ) )调用算法的y_train () ) print ('测试得分:DTC.score(x_test,y_test ) ) ) )获得训练

如果设置max_depth=1,则算法得分较低,会出现拟合不足的问题。

如果max_depth=10,则算法的分数会较高,但决策树会变得过于复杂,导致拟合问题。

4 .为了更直观地看到决策边界算法的分类效果,定义了绘制决策边界的函数,并绘制了分类的边界线。

frommatplotlib.colorsimportlistedcolormap #绘制决策边界的函数def plot _ decision _ boundary (model,axis ) : x0,x1=NP.mesis int ((axis [1]-axis [0] [ 100 ] ) ) )、reshape(-1 )、NP.Linspace ) axis[2]、axis[3]、int 1) x _ x1.ravel ) ]y_predict=model.predict ) x_new ) ZZ=y _ predict .“# fff 59 d”,“# 90ca F9” cmap=custom_cmap ) )决策边界plot_decision_boundary ) dtt x [ y==0,1 ] (x [ y==1,0 ],x [ y=

从图中也可以看出,大部分得分据点的分类基本准确,说明决策树算法效果较好。

5 .树视图可以在树视图中显示算法的结果,以便更直观地理解决策树算法。

#要导入相关库,请先安装graphviz和pydotplus,然后在计算机上输入graphviz软件importpydotplusfromsklearn.treeimportexport _ gratplus

ingIO # 将对象写入内存中dot_data = StringIO() # 生成决策树结构tree.export_graphviz(dtc, class_names=wine.target_names, feature_names=[wine.feature_names[0], wine.feature_names[6]], rounded=True, filled=True, out_file = dot_data) # 生成树形图并展示出来graph = pydotplus.graph_from_dot_data(dot_data.getvalue())Image(graph.create_png())

6. 结果解读

从上面的树形图来看,在葡萄酒数据的训练集中,有 133 个数据,划分为 3 个类别,数量分别是 43、50、40 个,对应的标签分别是 class_0、class_1、class_2,其中 class_1 的数量最多,所以最上面的根节点认为,类别为 class_1 的可能性最大,Gini 系数为 0.664,它是利用下面的公式计算出来的:

1 - (43/133)**2 - (50/133)**2 - (40/133)**2

在决策树算法中,Gini 系数代表样本的不确定性。当每个类别的数量越趋近于平均值,Gini 系数就越大,也就越不确定。

比如扔硬币的游戏,在一般情况下,正反两面的概率都是 50%,此时 Gini 系数等于 0.5,你猜中的概率也是 50%;假如你对硬币做了手脚,把两面都变成正面图案,此时Gini 系数等于 0, 也就是说,不确定性为 0,你能明确地知道肯定是正面。

在上面葡萄酒的例子中,当黄酮量 <= 1.575 时,有 49 个样本,3 个类别的数量分别是 0、9、40 个,其中 class_2 的数量最多,Gini 系数为 0.3,比上面的节点要低,说明分类结果变得更加确定。当酒精量 > 12.41 时,有 39 个样本,3 个类别的数量分别是 0、2、37个,Gini 系数为 0.097,此时分类结果变得更加确定为 class_2。

树形图中其他节点的结果含义类似,在此不再赘述。

小结

本文介绍了决策树算法的应用,以葡萄酒数据集为例,演示了决策树算法的实现过程,绘制了直观易懂的决策边界和树形图,并对决策结果做了详细解读。

虽然决策树算法有很多优点,比如高效、易懂,但是也有它的不足之处,比如当参数设置不当时,很容易出现过拟合的问题。

为了避免决策树算法出现过拟合的问题,可以使用「集成学习」的方法,融合多种不同的算法,也就是俗话讲的「三个臭皮匠,赛过开朗的跳跳糖」。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。