监督学习之决策树原理与代码实现

决策树:

根据已知的条件,从根节点到叶子节点,根据不同的特征逐步判断,最终得到分类结果。决策树的分类过程就像人思考的过程。

举个栗子:
小明的妈妈给他介绍了一个相亲对象,小明正在考虑要不要去。
在这里插入图片描述

决策树的构建(ID3决策树):

随着树深度的增加节点的熵迅速降低,熵降低的速度越快越好。这样有望构造一颗高度最矮的决策树。

这里的熵指的是信息熵。事情越复杂,出现不同情况的种类就越多,信息熵越大;事情越简单,出现情况种类很少(极端情况为1种情况,那么对应概率为1,那么对应的信息熵为0),此时的信息熵较小。
信息熵的计算公式:
在这里插入图片描述

过拟合问题:

研究发现,随着决策树深度的增加,训练集上的精度是单调上升的。但是在独立的测试数据样例上的精度是先上升后下降的,这就是过拟合。这个现象在大多数机器学习的算法中都有可能发生。

举个栗子:
政治老师给了我们一套题库,说过几天的考试就是在这个题库训练集)中出题。我们开始背题训练模型),有的同学背题干和选项,有的同学背题号和答案。背题干和选项的同学可能背的不是很完美,有的答案还记错了,但是考试数据测试)的时候成绩还不错拟合程度刚刚好)。背题号和答案的同学,虽然记得很清楚每个题号选择什么,但是考试却一塌糊涂过拟合)。
在这里插入图片描述

过拟合产生的原因:

  1. 噪声、样本数据冲突。即错误的样本数据。
  2. 特征不能完全作为分类的标准。
  3. 数据量不够大,具有巧合性。

解决过拟合:

  1. 收集更多的数据。
  2. 模型太复杂,使用合适的模型。
  3. 结合多种模型。

决策树的剪枝(决策树解决过拟合):

  1. 当决策树到达一定高度时就停止生长。
  2. 当到达此节点的数据量小于某个阈值的时候就停止生长。
  3. 到达此节点的实例具有相同的特征向量,不必属于同一类,也可停止生长。
  4. 计算每次扩张对系统性能的增益,如果增益小于某个阈值,也可以停止生长

代码实现:

现有一份儿乳腺癌数据,用决策树算法判断一个人是否患癌。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import StandardScaler
from sklearn import tree
from matplotlib import pyplot as plt

# 加载数据
data = pd.read_csv(r'G:\学习文件\机器学习\data_mining_data\breast_cancer.csv')
# print(data)

# 切分特征和标签
features = data.iloc[:, :-1]
# print(features)
labels = data.iloc[:, -1]
# print(labels)
# 切分训练集和测试集
train_features, test_features, train_labels, test_labels = train_test_split(features, labels)
# 归一化
ss = StandardScaler()
ss.fit(train_features)
train_features_std = ss.transform(train_features)
# print(train_features_std)
test_features_std = ss.transform(test_features)
# 模型训练
dtc = DecisionTreeClassifier()
dtc.fit(train_features_std, train_labels)
# 模型测试
predict_labels = dtc.predict(test_features_std)
# print(predict_labels)
# 文本形式查看决策树模型
print(tree.export_text(dtc))
# 图形展现决策树模型
tree.plot_tree(dtc, feature_names=features.columns, class_names=['0', '1'], filled=True)
# plt.show()
plt.savefig(fname='决策树模型')
# 模型评分
score = dtc.score(test_features_std, test_labels)
print(score)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值