通常,决策树分析是一种预测建模工具,可以应用于许多领域,决策树可以通过一种算法方法构建,该算法可以根据不同条件以不同方式拆分数据集。决策树是属于监督算法类别的最强大的算法。
它们可用于分类和回归任务。一棵树的两个主要实体是决策节点,在这里数据被拆分并离开,在这里无涯教程得到输出。下面提供了用于预测一个人是否合适的二叉树示例,该信息提供了诸如年龄,饮食习惯和运动习惯等各种信息-
在上面的决策树中,问题是决策节点,最终输出是叶子。无涯教程有以下两种类型的决策树。
分类决策树 - 在这种决策树中,决策变量是分类的。上面的决策树是分类决策树的一个示例。
回归决策树 - 在这种决策树中,决策变量是连续的。
它是成本函数的名称,用于判断数据集中的二进制拆分,并与分类目标变量"Success"或"Failure"一起使用。
基尼指数值越高,同质性越高,理想的Gini指数值为0,最差的值为0.5(对于2类问题),拆分的基尼系数可以通过以下步骤计算-
首先,使用公式 p ^ 2 + q ^ 2 计算子节点的基尼系数,该公式是成功和失败的概率平方之和。
接下来,使用该拆分的每个节点的加权Gini得分计算拆分的Gini指数。
分类和回归树(CART)算法使用Gini方法生成二进制拆分。
拆分基本上包括数据集中的一个属性和一个值。可以通过以下三个部分在数据集中创建拆分-
第1部分 - 计算基尼得分,刚刚在上一节中讨论了这一部分。
第2部分 - 拆分数据集,可以定义为将数据集分为具有属性索引和该属性拆分值的两行列表,从数据集中获得左右两个组后,可以使用第一部分中计算的基尼得分来计算split的值,分割值将决定属性将驻留在哪个组中。
第3部分 - 判断所有分割 - 找到基尼得分并分割数据集后的下一部分是对所有分割的判断,为此,首先,必须检查与每个属性关联的每个值作为候选拆分,然后需要通过判断分割成本来找到最佳分割,最佳拆分将用作决策树中的节点。
在以下示例中,无涯教程将在Pima印度糖尿病上实现决策树分类器-
来源:LearnFk无涯教程网
首先,从导入必要的python包开始-
import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split
接下来,如下所示从其网络链接下载iris数据集:
col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label'] pima = pd.read_csv(r"C:\pima-indians-diabetes.csv", header = None, names = col_names) pima.head()
怀孕 | 葡萄糖 | BP | 皮肤 | 胰岛素 | Bmi | 谱系 | 年龄 | 标签 | |
---|---|---|---|---|---|---|---|---|---|
0 | 6 | 148 | 72 | 35 | 0 | 33.6 | 0.627 | 50 | 1 |
1 | 1 | 85 | 66 | 29 | 0 | 33.6 | 0.627 | 50 | 1 |
2 | 8 | 183 | 64 | 0 | 0 | 23.3 | 0.672 | 32 | 1 |
3 | 1 | 89 | 66 | 23 | 94 | 28.1 | 0.167 | 21 | 0 |
4 | 0 | 137 | 40 | 35 | 168 | 43.1 | 2.288 | 33 | 1 |
现在,将数据集分为特征和目标变量,如下所示:
feature_cols=['pregnant', 'insulin', 'bmi', 'age','glucose','bp','pedigree'] X=pima[feature_cols] # Features y=pima.label # Target variable
接下来,将数据分为训练和测试拆分。以下代码将数据集分为70%的训练数据和30%的测试数据-
X_train, X_test, y_train, y_test=train_test_split(X, y, test_size=0.3, random_state=1)
接下来,借助sklearn的DecisionTreeClassifier类训练模型,如下所示:
clf=DecisionTreeClassifier() clf=clf.fit(X_train,y_train)
最后,需要进行预测。可以在以下脚本的帮助下完成-
y_pred=clf.predict(X_test)
接下来,无涯教程可以获得准确性得分,混淆矩阵和分类报告,如下所示:
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score result = confusion_matrix(y_test, y_pred) print("Confusion Matrix:") print(result) result1 = classification_report(y_test, y_pred) print("Classification Report:",) print (result1) result2 = accuracy_score(y_test,y_pred) print("Accuracy:",result2)
输出
Confusion Matrix: [[116 30] [ 46 39]] Classification Report: precision recall f1-score support 0 0.72 0.79 0.75 146 1 0.57 0.46 0.51 85 micro avg 0.67 0.67 0.67 231 macro avg 0.64 0.63 0.63 231 weighted avg 0.66 0.67 0.66 231 Accuracy: 0.670995670995671
上面的决策树可以在以下代码的帮助下可视化-
from sklearn.tree import export_graphviz from sklearn.externals.six import StringIO from IPython.display import Image import pydotplus dot_data=StringIO() export_graphviz(clf, out_file=dot_data, filled=True, rounded=True, special_characters=True,feature_names=feature_cols,class_names=['0','1']) graph=pydotplus.graph_from_dot_data(dot_data.getvalue()) graph.write_png('Pima_diabetes_Tree.png') Image(graph.create_png())
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)
Python实战 · 从0到1搭建直播视频平台 -〔Barry〕