决策树(Decision trees)是一种过程直觉单纯、执行效率也相当高的监督式机器学习模型,适用於classification 及 regression 资料类型的预测,与其它的ML模型比较起来,执行速度是它的一大优势。
此外,Decision trees 的特点是每个决策阶段都相当的明确清楚(不是YES就是NO),相较之下,Logistic Regression 与 Support Vector Machines 就好像黑箱一样,我们很难去预测或理解它们内部复杂的运作细节。而且 Decision trees 有提供指令让我们实际的模拟并绘出从根部、各枝叶到最终节点的决策过程。
刚刚提到的决策边界,你现在找到有三个特徵
A:是否戴口罩
B:是否打疫
C:是否14天有出国
假设是你发现找到确诊案例的公式是 sigmoid(-50 + 300 * A + 240 * B + 163 * C) > 0.5 则代表是确诊。你很开心地跑去跟卫生署的人说明,但是却很少人可以懂你的模型在干麽。这时候你用了决策树,你改变你的说法,只要没有打口罩,有70%会确诊;若带口罩的前提之下但是没有打疫苗,还是有70%会确诊...
於是让非专业资料分析人员也可以清楚在干麽,解释力也很强,这就是决策树的优点
挑选拥有最大不纯度的降低值或吉尼不纯度GiniA(S)最小的属性作为分割属性。
说明 | 计算 |
---|---|
female的 Gini index | |
male的 Gini index | |
加权计算後 Gini index |
说明 | 计算 |
---|---|
more than 30 的 Gini index | |
less than 30 的 Gini index | |
加权计算後 Gini index |
性别的分类有比较小的Gini不纯度,代表用该特徵分类後资料比较不混乱
以熵 (Entropy) 为基础
熵 (乱度),可当作资讯量的凌乱程度 (不确定性) 指标,当熵值愈大,则代表资讯的凌乱程度愈高。
说明 | 计算 |
---|---|
female的 Entropy | |
male的 Entropy | |
加权计算後 Entropy |
说明 | 计算 |
---|---|
more than 30 的 Entropy | |
less than 30 的 Entropy | |
加权计算後 Entropy |
性别的分类有比较小熵,代表用该特徵分类後资料比较不混乱
一样套用上次的模板,我们将资料进行切割後喂给模型
from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier(criterion = 'entropy', random_state = 0)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
print(cm)
>>> [[57 10]
[ 6 27]]
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))
绘制 trainin set 和 testing set 的图
# 建立决策树 (3 层) 并预测结果
model = DecisionTreeClassifier(max_depth=3)
model.fit(dx_train, dy_train)
predict = model.predict(dx_test)
test_score = model.score(dx_test, dy_test) * 100
# 印出预测精确率
print(f'Accuracy: {test_score:.1f}%')
# 印出文字版的决策树
print(export_text(model, feature_names=list(feature_names)))
# 绘制决策树
plt.figure(figsize=(16, 16))
plot_tree(model, # 填满颜色, 开启圆角, 显示百分比
filled=True, rounded=True, proportion=True,
feature_names=feature_names,
class_names=class_names)
plt.savefig('tree.jpg') # 写入到档案
更详细可以请参考连结
>>: Day 22 - 运算过载,warning ! warning !
一定要强调一下资料备份的重要性, 分享一个亲身经历的实际案例, 因为我本身还算是ASUS的爱用者,...
前言 在程序历史的进程中,就像是动物历史一样,是在漫漫的演变当中前进。动物会根据环境最适者生存,程序...
这是第一次参加铁人赛,期待自己可以依照书上的教学将Kotlin学好,并具备开发小型系统的能力。 此次...
前一天我们就如何让程序可以认得不同的单字稍微讨论了一下一些基本的处理,那今天我们就继续文字的主题来介...
今天我们来谈谈网路的身分认证-Cognito 1. Cognito应用价值 现在的生活环境,不管是网...