共计 3449 个字符,预计需要花费 9 分钟才能阅读完成。
申明:本次撰写以 Datawhale 团队提供的学习材料以自学为主,代码为 Datawhale 团队提供,利用阿里云天池实验室与编辑器 pycharm 实现测试。
学习指标
- 理解 决策树 的理论知识
- 把握 决策树 的 sklearn 函数调用应用并将其使用到企鹅数据集预测
决策树介绍与利用
决策树介绍
决策树 (decision tree) 是一种根本的分类与回归办法。决策树的次要长处:
- 具备很好的解释性,模型能够生成能够了解的规定。
- 能够发现特色的重要水平。
- 模型的计算复杂度较低。
决策树的次要毛病:
- 模型容易过拟合,须要采纳减枝技术解决。
- 不能很好利用连续型特色。
- 预测能力无限,无奈达到其余强监督模型成果。
- 方差较高,数据分布的轻微扭转很容易造成树结构齐全不同。
算例:
此算例为书中摘抄过去,次要是为了计算一遍,相熟一下算法的计算流程。
为了失去最优的决策后果。咱们必须向决策树中引入熵和信息增益的概念。
决策树的利用
因为决策树模型中自变量与因变量的非线性关系以及决策树简略的计算方法,使得它成为集成学习中最为宽泛应用的基模型。梯度晋升树(GBDT),XGBoost 以及 LightGBM 等先进的集成模型都采纳了决策树作为基模型,在广告计算、CTR 预估、金融风控等畛域大放异彩,成为当今与神经网络等量齐观的简单模型,更是数据挖掘较量中的常客。在新的钻研中,南京大学周志华老师提出一种多粒度级联森林模型,发明了一种全新的基于决策树的深度集成办法,为咱们提供了决策树倒退的另一种可能。
同时决策树在一些须要明确可解释甚至提取分类规定的场景中被广泛应用,而其余机器学习模型在这一点很难做到。例如在医疗辅助零碎中,为了不便业余人员发现错误,经常将决策树算法用于辅助病症检测。例如在一个预测哮喘患者的模型中,医生发现测试的许多高级模型的成果十分差。所以他们在数据上运行了一个决策树的模型,发现算法认为激烈咳嗽的病人患哮喘的危险很小。但医生十分分明激烈咳嗽个别都会被立即查看医治,这意味着患有激烈咳嗽的哮喘病人都会马上失去收治。用于建模的数据认为这类病人危险很小,是因为所有这类病人都失去了及时医治,所以极少有人在此之后患病或死亡。
代码流程
Part1 Demo 实际
- Step1: 库函数导入
- Step2: 模型训练
- Step3: 数据和模型可视化
- Step4: 模型预测
Part2 数据分析
- Step1: 库函数导入
- Step2: 数据读取 / 载入
- Step3: 数据信息简略查看
- Step4: 可视化形容
Part3 建模预测
- Step1: 利用 决策树模型 在二分类上 进行训练和预测
- Step2: 利用 决策树模型 在三分类 (多分类) 上 进行训练和预测
决策
程序
Step1: 库函数导入
## 根底函数库
import numpy as np
## 导入画图库
import matplotlib.pyplot as plt
import seaborn as sns
## 导入决策树模型函数
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
Step2: 训练模型
##Demo 演示 LogisticRegression 分类
## 结构数据集
x_fearures = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]])
y_label = np.array([0, 1, 0, 1, 0, 1])
## 调用决策树模型
tree_clf = DecisionTreeClassifier()
## 用决策树模型拟合结构的数据集
tree_clf = tree_clf.fit(x_fearures, y_label)
Step3: 数据和模型可视化(须要用到 graphviz 可视化库,对于 graphviz 装置的一些问题,请参见 CSDN 连贯)
## 可视化结构的数据样本点
plt.figure()
plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis')
plt.title('Dataset')
plt.show()
###### 本段代码实际效果为本地生成 PDF 可视化文档,在体验过程中能够不运行,可能无奈失常展现后果;###### 代码生成的可视化后果会截图展现实际效果
import graphviz
dot_data = tree.export_graphviz(tree_clf, out_file=None)
graph = graphviz.Source(dot_data)
graph.render("pengunis") #pdf 名称
###### 'pengunis.pdf'
Step4: 模型预测
## 创立新样本
x_fearures_new1 = np.array([[0, -1]])
x_fearures_new2 = np.array([[2, 1]])
## 在训练集和测试集上散布利用训练好的模型进行预测
y_label_new1_predict = tree_clf.predict(x_fearures_new1)
y_label_new2_predict = tree_clf.predict(x_fearures_new2)
print('The New point 1 predict class:\n',y_label_new1_predict)
print('The New point 2 predict class:\n',y_label_new2_predict)
# The New point 1 predict class:
# [1]
# The New point 2 predict class:
# [0]
预测后果:
The New point 1 predict class:
[1]
The New point 2 predict class:
[0]
##### 数据分析
在实际的最开始,咱们首先须要导入一些根底的函数库包含:numpy(Python 进行科学计算的根底软件包),pandas(pandas 是一种疾速,弱小,灵便且易于应用的开源数据分析和解决工具),matplotlib 和 seaborn 绘图。
## 根底函数库
import numpy as np
import pandas as pd
## 绘图函数库
import matplotlib.pyplot as plt
import seaborn as sns
本次咱们抉择企鹅数据(palmerpenguins)进行办法的尝试训练,该数据集一共蕴含 8 个变量,其中 7 个特色变量,1 个指标分类变量。共有 150 个样本,指标变量为 企鹅的类别 其都属于企鹅类的三个亚属,别离是(Adélie, Chinstrap and Gentoo)。蕴含的三种种企鹅的七个特色,别离是所在岛屿,嘴巴长度,嘴巴深度,脚蹼长度,身材体积,性别以及年龄。
Step2:数据读取 / 载入
## 咱们利用 Pandas 自带的 read_csv 函数读取并转化为 DataFrame 格局
data = pd.read_csv('datalab/531811/Datawhale/penguins_raw.csv')
## 为了不便咱们仅选取四个简略的特色,有趣味的同学能够钻研下其余特色的含意以及应用办法
data = data[['Species','Culmen Length (mm)','Culmen Depth (mm)',
'Flipper Length (mm)','Body Mass (g)']]
Step3:数据信息简略查看
## 利用.info()查看数据的整体信息
data.info()
## 进行简略的数据查看,咱们能够利用 .head() 头部.tail()尾部
data.head()
这里咱们发现数据集中存在 NaN,个别的咱们认为 NaN 在数据集中代表了缺失值,可能是数据采集或解决时产生的一种谬误。这里咱们采纳 - 1 将缺失值进行填补,还有其余例如“中位数填补、平均数填补”的缺失值解决办法有趣味的同学也能够尝试。
data = data.fillna(-1)
data.tail()
## 其对应的类别标签为 'Adelie Penguin', 'Gentoo penguin', 'Chinstrap penguin' 三种不同企鹅的类别。data['Species'].unique()
## array(['Adelie Penguin (Pygoscelis adeliae)',
## 'Gentoo penguin (Pygoscelis papua)',
## 'Chinstrap penguin (Pygoscelis antarctica)'], dtype=object)