您的位置:

CART分类树

一、CART分类树算法

CART(Classification and Regression Tree)分类树算法是一种决策树分类模型,既可以用于分类问题,也可以用于回归问题。它是一种二叉树结构,每个非叶节点代表一个决策,每个叶子节点代表一个类别。

CART分类树算法的基本思路是:根据样本特征,将样本划分为多个子集,并在每个子集上递归地重复这个划分过程,直到子集的大小小于某个预设阈值,或者子集中的样本属于同一类别,或者达到了预设的最大树深。然后,对每个叶子节点中的样本分别赋予相应的类别。

CART分类树算法的特点是:使用基尼指数(Gini Index)或熵(Entropy)作为划分质量的评价指标,选择使得划分后各个子集间差异最小的特征作为划分属性。具体而言,CART分类树算法的步骤如下:

  1. 计算样本集合的基尼指数或熵
  2. 对每个属性的所有取值进行划分,计算划分后样本集合的加权基尼指数或加权熵
  3. 选择加权基尼指数或加权熵最小的属性作为划分属性
  4. 对于划分后的每个子集,如果子集大小小于某个预设阈值,或者子集中的样本属于同一类别,或者达到了预设的最大树深,将该子集作为叶子节点并给节点赋值
  5. 对于每个非叶节点,递归执行步骤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分类树算法的步骤如下:

  1. 计算样本集合的基尼指数或熵
  2. 对每个属性的所有取值进行划分,计算划分后样本集合的加权基尼指数或加权熵
  3. 选择加权基尼指数或加权熵最小的属性作为划分属性
  4. 对于划分后的每个子集,如果子集大小小于某个预设阈值,或者子集中的样本属于同一类别,或者达到了预设的最大树深,将该子集作为叶子节点并给节点赋值
  5. 对于每个非叶节点,递归执行步骤2~4

九、CART分类树算法流程

CART分类树算法的流程如下: