一、CART分类树算法
CART(Classification and Regression Tree)分类树算法是一种决策树分类模型,既可以用于分类问题,也可以用于回归问题。它是一种二叉树结构,每个非叶节点代表一个决策,每个叶子节点代表一个类别。
CART分类树算法的基本思路是:根据样本特征,将样本划分为多个子集,并在每个子集上递归地重复这个划分过程,直到子集的大小小于某个预设阈值,或者子集中的样本属于同一类别,或者达到了预设的最大树深。然后,对每个叶子节点中的样本分别赋予相应的类别。
CART分类树算法的特点是:使用基尼指数(Gini Index)或熵(Entropy)作为划分质量的评价指标,选择使得划分后各个子集间差异最小的特征作为划分属性。具体而言,CART分类树算法的步骤如下:
- 计算样本集合的基尼指数或熵
- 对每个属性的所有取值进行划分,计算划分后样本集合的加权基尼指数或加权熵
- 选择加权基尼指数或加权熵最小的属性作为划分属性
- 对于划分后的每个子集,如果子集大小小于某个预设阈值,或者子集中的样本属于同一类别,或者达到了预设的最大树深,将该子集作为叶子节点并给节点赋值
- 对于每个非叶节点,递归执行步骤2~4
二、CART什么时候是分类树
CART算法既可以用于分类问题,也可以用于回归问题。通常情况下,一个变量的取值是分类型的,则CART算法是一种分类算法;如果一个变量的取值是连续的,则CART算法是一种回归算法。
三、CART分类树例子
以鸢尾花数据集为例,演示如何使用CART算法构建一个分类树。数据集包含150条记录,每条记录有四个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度,并且分为三个类别:山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)。
以下是使用Python的sklearn库实现的CART分类树代码:
from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier, export_graphviz iris = load_iris() X = iris.data y = iris.target dtree = DecisionTreeClassifier() dtree.fit(X, y) export_graphviz(dtree, out_file='tree.dot', feature_names=iris.feature_names, class_names=iris.target_names, rounded=True, proportion=False, precision=2, filled=True)
运行以上代码后,会生成一张名为tree.png的决策树图:
四、CART分类树代码Python
使用Python的sklearn库,我们可以非常简单地构建分类树模型。以下是示例代码:
from sklearn.tree import DecisionTreeClassifier X = [[0, 0], [1, 1]] y = [0, 1] clf = DecisionTreeClassifier() clf = clf.fit(X, y)
五、CART分类算法
CART分类算法主要有两个步骤:属性选择和树的生成。在属性选择过程中,我们需要计算每个属性的基尼指数或熵,选择最小值对应的属性作为划分特征。在树的生成过程中,我们需要递归地划分样本子集,停止划分的条件是子集大小小于某个预设阈值,或者子集中的样本属于同一类别,或者达到了预设的最大树深。
六、CART回归树图解
CART回归树是一种二叉树结构,它的每个非叶节点代表一个特征,每个叶子节点代表一个预测值。CART回归树的构建过程包括两个步骤:属性选择和树的生成。在属性选择过程中,我们需要计算每个属性的平方误差或绝对误差,选择最小值对应的属性作为划分特征。在树的生成过程中,我们需要递归地划分样本子集,停止划分的条件是子集大小小于某个预设阈值,或者子集中的样本预测值小于某个预设阈值,或者达到了预设的最大树深。
以下是一张CART回归树图解:
七、CART分类树例题
以一个简单的例子来演示如何使用CART分类树进行分类。
假设我们要使用CART分类树对一个新闻网站的文章进行分类。我们已经收集了100篇文章的关键词,包括政治、经济、体育、娱乐等类别。每篇文章有5个关键词,如下表所示:
文章编号 | 关键词1 | 关键词2 | 关键词3 | 关键词4 | 关键词5 | 类别 |
---|---|---|---|---|---|---|
1 | 政治 | 经济 | 体育 | 娱乐 | 体育 | 体育 |
2 | 政治 | 经济 | 娱乐 | 体育 | 娱乐 | 娱乐 |
3 | 经济 | 体育 | 娱乐 | 娱乐 | 体育 | 体育 |
4 | 政治 | 经济 | 体育 | 娱乐 | 娱乐 | 娱乐 |
5 | 经济 | 体育 | 娱乐 | 体育 | 政治 | 政治 |
6 | 政治 | 经济 | 体育 | 娱乐 | 经济 | 经济 |
7 | 娱乐 | 体育 | 政治 | 经济 | 娱乐 | 娱乐 |
8 | 体育 | 经济 | 体育 | 政治 | 经济 | 体育 |
9 | 经济 | 体育 | 政治 | 体育 | 娱乐 | 体育 |
10 | 政治 | 娱乐 | 经济 | 体育 | 政治 | 政治 |
我们可以用sklearn库构建一个CART分类树模型,代码如下:
import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split df = pd.read_csv('news.csv') X = df.drop(['编号', '类别'], axis=1) y = df['类别'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4) clf = DecisionTreeClassifier() clf = clf.fit(X_train, y_train) score = clf.score(X_test, y_test) print('模型准确率:', score)
运行以上代码后,我们可以得到模型的准确率。为了验证模型的效果,我们可以随机选取一篇文章,提取它的5个关键词,并使用训练好的模型对其进行分类。
八、CART分类树原理
CART分类树算法的原理是通过递归地将样本集合划分成为多个子集,每个子集中的样本都属于同一类别,或子集大小小于某个预设阈值,或者达到了预设的最大树深。具体而言,CART分类树算法的步骤如下:
- 计算样本集合的基尼指数或熵
- 对每个属性的所有取值进行划分,计算划分后样本集合的加权基尼指数或加权熵
- 选择加权基尼指数或加权熵最小的属性作为划分属性
- 对于划分后的每个子集,如果子集大小小于某个预设阈值,或者子集中的样本属于同一类别,或者达到了预设的最大树深,将该子集作为叶子节点并给节点赋值
- 对于每个非叶节点,递归执行步骤2~4
九、CART分类树算法流程
CART分类树算法的流程如下: