第六章.决策树(Decision Tree)—CART算法

第六章.决策树(Decision Tree)

6.2 CART算法

CART决策树的生成就是递归地构建二叉决策树的过程。CART用基尼(Gini)系数最小化准则来进行特征选择,生成二叉树

1.Gini系数计算:

在这里插入图片描述

2.CART示例

1).题干:

  • 分别计算它们的Gini系数增益,取Gini系数增益值最大的属性作为决策树的根节点属性。
    在这里插入图片描述

2).计算

①.根节点的Gini系数:
在这里插入图片描述
②.根据是否有房来进行划分:
在这里插入图片描述
③.根据婚姻状况来进行划分:
在这里插入图片描述

④.根据年收入进行划分:

  • 例如年收入为60和70这两个值时,我们算得其中间值为65。 倘若以中间值65作为分割点,则得Gini系数增益为 :
    请添加图片描述

  • 所有年收入的Gini系数增益:
    在这里插入图片描述

⑤.根据计算可知,三个属性划分根节点的增益最大的有两个:婚姻状况和年收入属性,他们的增益都是0.12,可以随机选择一个作为根节点。(以婚姻状况为根节点举例)

  • 婚姻状况作为根节点的Gini系数:
    在这里插入图片描述

  • 根据是否有房来进行划分:
    在这里插入图片描述

  • 根据年收入来进行划分:

    • 例如年收入为70和85这两个值时,中间值为77.5。 倘若以中间值77.5作为分割点,则得Gini系数增益为 :
      在这里插入图片描述
    • 所有年收入的Gini系数增益:
      在这里插入图片描述

⑥.最后构建的CART
在这里插入图片描述

3.剪枝

剪枝可以在一定程度上抑制过拟合的问题。

1).剪枝前

在这里插入图片描述

2).剪枝后

在这里插入图片描述

4.CART算法的优缺点

1).优点

①.小规模数据集有效

2).缺点

①.处理连续变量不好
②.类别较多时,错误增加的比较快
③.不能处理大量数据

5.决策树—CART

1).cart.csv中的数据

在这里插入图片描述

2).代码:

import numpy as np
from sklearn import tree
import graphviz
import csv

# 加载数据
DTree = open(r'D:\\Data\\cart.csv', 'r')
data_show = csv.reader(DTree)

# 属性名称
feature_names = data_show.__next__()
feature_names = np.array(feature_names)[1:-1]
print(feature_names)

# 标签名称
class_names = np.array(['no', 'yes'])
print(class_names)

data = np.genfromtxt('D:\\Data\\cart.csv', delimiter=',')

# 模型
x_data = data[1:, 1:-1]
print(x_data)

# 标签
y_data = data[1:, -1]
print(y_data)

# 创建决策树模型
model_DicisionTree = tree.DecisionTreeClassifier()
model_DicisionTree.fit(x_data, y_data)

# 导出决策树
dot_data = tree.export_graphviz(model_DicisionTree, out_file=None, feature_names=feature_names,
                                class_names=class_names, filled=True, rounded=True, special_characters=True)

graph = graphviz.Source(dot_data)
graph.render('cart')

3).结果展示:

在这里插入图片描述

6.决策树—线性二分类示例

1)LR-testSet.csv中的数据:

2).代码:

import numpy as np
from sklearn import tree
from sklearn.metrics import classification_report
import matplotlib.pyplot as plt
import graphviz

# 加载数据
data = np.genfromtxt('D:\\Data\\LR-testSet.csv', delimiter=',')

x_data = data[:, :-1]
y_data = data[:, -1]

# 创建模型
model_DecisionTree = tree.DecisionTreeClassifier()
model_DecisionTree.fit(x_data, y_data)

predictions = model_DecisionTree.predict(x_data)
print(classification_report(y_data, predictions))

# 导出决策树
feature_names = np.array(['x', 'y'])
class_names = np.array(['label0', 'label1'])
dot_data = tree.export_graphviz(model_DecisionTree, out_file=None, feature_names=feature_names,
                                class_names=class_names, filled=True, rounded=True,
                                special_characters=True)

graph = graphviz.Source(dot_data)
graph.render('Linear_classification')

# 获取数据值所在范围
x_min, x_max = x_data[:, 0].min() - 1, x_data[:, 0].max() + 1
y_min, y_max = x_data[:, 1].min() - 1, x_data[:, 1].max() + 1

# 生成网格矩阵
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))

z = model_DecisionTree.predict(np.c_[xx.ravel(), yy.ravel()])
z = z.reshape(xx.shape)

# 绘制等高线
cs = plt.contourf(xx, yy, z)
plt.scatter(x_data[:, 0], x_data[:, 1], c=y_data)
plt.show()

3).结果展示:

在这里插入图片描述

7.决策树—非线性二分类示例

1).CSV中的数据:

2).代码:

import numpy as np
from sklearn import tree
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import graphviz

# 加载数据
data = np.genfromtxt('D:\\Data\\LR-testSet2.txt', delimiter=',')

x_data = data[:, :-1]
y_data = data[:, -1]

# 分割数据
x_train, x_test, y_train, y_test = train_test_split(x_data, y_data)

# 创建决策树模型
# max_depth,树的深度
# min_samples_split 内部节点再划分所需最小样本数
model_DecisionTree = tree.DecisionTreeClassifier(max_depth=7, min_samples_split=4)
model_DecisionTree.fit(x_train, y_train)

predictions = model_DecisionTree.predict(x_train)
print(classification_report(predictions, y_train))

predictions = model_DecisionTree.predict(x_test)
print(classification_report(predictions, y_test))

# 导出决策树
feature_names = np.array(['x', 'y'])
class_names = np.array(['label0', 'label1'])
dot_data = tree.export_graphviz(model_DecisionTree, out_file=None, feature_names=feature_names,
                                class_names=class_names, filled=True, rounded=True,
                                special_characters=True)

graph = graphviz.Source(dot_data)
graph.render('Linear_classification')

# 获取数据值所在范围
x_min, x_max = x_data[:, 0].min() - 1, x_data[:, 0].max() + 1
y_min, y_max = x_data[:, 1].min() - 1, x_data[:, 1].max() + 1

# 生成网格矩阵
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))

z = model_DecisionTree.predict(np.c_[xx.ravel(), yy.ravel()])
z = z.reshape(xx.shape)

# 绘制等高线
cs = plt.contourf(xx, yy, z)
plt.scatter(x_data[:, 0], x_data[:, 1], c=y_data)
plt.show()

3).结果展示:

在这里插入图片描述

  • 7
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 以下是关于CART决策树的一些参考文献: 1. Breiman, L., Friedman, J., Stone, C. J., & Olshen, R. A. (1984). Classification and regression trees (CART). Wadsworth. 2. Quinlan, J. R. (1993). C4.5: Programs for machine learning. Morgan Kaufmann. 3. Hastie, T., Tibshirani, R., & Friedman, J. (2001). The elements of statistical learning: Data mining, inference, and prediction. Springer. 4. Chen, T., & Guestrin, C. (2016). XGBoost: A scalable tree boosting system. arXiv preprint arXiv:1603.02754. 5. Zhou, Z. H. (2017). Ensemble methods: Foundations and algorithms. CRC press. 6. Liu, Y., & Yao, X. (1999). Evolutionary programming based hyper-heuristic for combinatorial optimization problems. IEEE Transactions on Evolutionary Computation, 3(4), 297-309. ### 回答2: CART决策树(Classification and Regression Tree)是一种基于二叉树结构的监督学习算法,常用于分类和回归问题。以下是介绍CART决策树的一些参考文献: 1. Breiman, L., Friedman, J., Stone, C., & Olshen, R. (1984). Classification and Regression Trees. CRC Press. 这本经典的著作是CART决策树最早的介绍之一,详细解释了CART算法的原理和应用。 2. Hastie, T., Tibshirani, R., & Friedman, J. (2009). The Elements of Statistical Learning: Data Mining, Inference, and Prediction (2nd ed.). Springer. 这本书是统计学习领域的经典教材,其中有一章专门介绍了决策树算法,包括CART。 3. Loh, W. Y. (2011). Classification and Regression Trees. Wiley Interdisciplinary Reviews: Data Mining and Knowledge Discovery, 1(1), 14-23. 这篇综述文章详细介绍了CART决策树的原理、特点和应用领域,并且总结了CART的优点和局限性。 4. Quinlan, J. R. (1993). C4.5: Programs for Machine Learning. Morgan Kaufmann. 这本书是C4.5决策树算法的介绍,C4.5是CART的前身,它们有一些类似的特点和方法。 5. Zhou, Z. H. (2012). Ensemble Methods: Foundations and Algorithms. Chapman and Hall/CRC. 这本书是集成学习算法的综述,其中介绍了一种基于CART决策树的集成学习方法——随机森林。 这些参考文献可以帮助读者深入了解CART决策树的原理、应用和发展历史。同时,还可以通过相关文献中的引用来找到更多相关研究和应用案例。 ### 回答3: 以下是关于CART决策树的一些参考文献: 1. 《决策树在数据挖掘中的研究与应用》- 高安国,赵文然。这本书详细介绍了决策树算法的概念、原理和应用,并在其中包括了CART决策树的详细解释。 2. 《CART决策树算法研究》- 卢俊,张明。这篇论文详细研究了CART决策树算法的思想和实现,包括了算法的原理、构建方法和优化思路等内容。 3. 《The Elements of Statistical Learning: Data Mining, Inference, and Prediction, Second Edition》- Trevor Hastie, Robert Tibshirani, Jerome Friedman。这本书是机器学习领域的经典之作,其中有一章专门介绍了决策树算法,包括CART决策树。这本书对CART算法进行了深入解释,并提供了实现示例和案例应用。 4. 《Decision Trees for Business Intelligence and Data Mining: Using SAS Enterprise Miner》- Barry de Ville。这本书着重介绍了决策树在商业智能和数据挖掘中的应用,其中也包括了CART决策树的相关内容。书中提供了如何使用SAS Enterprise Miner软件进行CART决策树分析的实际示例。 这些文献可以帮助读者进一步了解CART决策树算法的原理、应用和实现方法。但需要注意的是,CART决策树有很多相关文献和研究成果,以上仅为给出参考的一些文献,读者可以根据自己的需求和兴趣进一步查阅。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值