决策树算法测试代码 决策树代码实现( 二 )


为了更好的领会那些公式,下图展现了怎样运用基尼指数规则计划计划树的消息增值 。
下图展现了怎样运用熵来计划计划树的消息增值 。
【决策树算法测试代码决策树代码实现】我不安排对详细举行过多的阐明,然而你该当领会,各别的不纯度襟怀(基尼指数和熵)常常会爆发一致的截止 。下图就展现了基尼指数和熵是极端一致的不纯度襟怀 。我探求,基尼指数之以是是scikit-learn的默许值,是由于熵的计划进程略慢少许(由于它运用了对数) 。
各别的不纯度襟怀(基尼指数和熵)常常会爆发一致的截止 。感动Data Science StackExchange 和 Sebastian Raschka为本图供给的灵感 。
在中断本节之前,我应证明,百般计划树算法相互各别 。比拟时髦的算法有ID3,C4.5和CART 。Scikit-learn运用了CART算法的优化本子 。你不妨点击此处领会它的功夫搀杂度 。
运用Python实行分门别类树
咱们在上节引见了分门别类树的表面 。之以是须要进修怎样运用某个编制程序谈话来实行计划树,是由于处置数据不妨扶助咱们来领会算法 。
加载数据
Iris数据集是scikit-learn自带的数据集之一,不须要从外部网站载入 。经过下列代码载入数据 。
import pandas as pdfrom sklearn.datasets import load_irisdata = https://www.juguize.com/b/load_iris()df = pd.DataFrame(data.data, columns=data.feature_names)df['target'] = data.target原始Pandas df(特性和目的)
将数据分别为演练集和尝试集
下述代码将75%的数据分别到为演练集,25%的数据分别到尝试汇合 。
X_train, X_test, Y_train, Y_test = train_test_split(df[data.feature_names], df['target'], random_state=0)图中的脸色标明了数据框df中的数据分别到了哪类(X_train, X_test, Y_train, Y_test)变量
提防,计划树的便宜之一是,你不须要规范化你的数据,这与PCA和论理回归各别,没有规范化的数据对它们的感化特殊大 。
Scikit-learn建立模型的四个办法
之一步:导出你想运用的模子
在scikit-learn中,一切的呆板进修模子都被封装为Python中的类 。
from sklearn.tree import DecisionTreeClassifier第二步:结构模子的范例
鄙人列代码中,我经过设定max_depth=2来预剪枝我的树,进而保证它的深度不会胜过2 。请提防,这个教程的下一节将引见怎样为你的树采用适合的max_depth值 。
还需提防,鄙人列代码中,我设定random_state=0,以是你也不妨获得和我一律的截止 。
clf = DecisionTreeClassifier(max_depth = 2, random_state = 0)第三步:鉴于数据演练模子
该模子将进修X (sepal length, sepal width, petal length, and petal width) 和 Y(species of iris)之间的联系 。
clf.fit(X_train, Y_train)第四步:猜测未知(尝试)数据的标签
# Predict for 1 observationclf.predict(X_test.iloc[0].values.reshape(1, -1))# Predict for multiple observationsclf.predict(X_test[0:10])请记取,猜测不过叶节点中范例的普遍类 。
评价模子本能
纵然有很多评价模子本能的办法(精度,调回率,F1得分,ROC弧线等),咱们仍旧维持大略的基调,运用精确率动作评价的规范 。
精确率的设置为:(精确猜测的比率):精确猜测的数目/总额据量
# The score method returns the accuracy of the modelscore = clf.score(X_test, Y_test)print(score)安排树的深度
探求max_depth更优值的进程即是安排模子的进程 。下列代码输入了各别max_depth值所对应的计划树的精确率 。
# List of values to try for max_depth:max_depth_range = list(range(1, 6))# List to store the accuracy for each value of max_depth:accuracy = []for depth in max_depth_range:clf = DecisionTreeClassifier(max_depth = depth, random_state = 0)clf.fit(X_train, Y_train) score = clf.score(X_test, Y_test) accuracy.append(score)由下图可看出,当max_depth的值大于或即是3时,模子的精确率更高,以是采用max_depth=3,在精确率同样高的情景下,模子的搀杂度更低 。
采用max_depth=3由于此时模子的透彻率高且搀杂度较低 。
你须要牢记,max_depth和计划树的深度并不是一回事 。Max_depth是对计划树举行预剪枝的一个本领 。换而言之,即使一棵树在某个深度纯度仍旧充满高,将会遏止分割 。下图辨别展现了当max_depth的值为3,4,5时的计划树 。由下图可知,max_depth为4和5时的计划树是如出一辙的 。它们的深度沟通 。
请查看咱们是怎样获得两棵如出一辙的树
即使想领会你演练的计划树的深度是几何,不妨运用get_depth本领 。除此除外,不妨经过get_n_leaves本领获得叶子节点的数目 。
纵然本教程仍旧引见了少许采用规则(基尼指数,熵等)和树的max_depth,请记取你也不妨安排要分割的节点的最小样品(min_samples_leaf),更大叶子节点数目(max_leaf_nodes)等 。

推荐阅读