回归树分类器

如果要选择在很大范围的情形下性能都好的、同时不需要应用开发者付出很多的努力并且易于被终端用户理解的分类技术的话,那么Brieman, Friedman, Olshen和Stone(1984)提出的分类树方法是一个强有力的竞争者。

1 分类树

在分类树下面有两个关键的思想。第一个是关于递归地划分自变量空间的想法;第二个想法是用验证数据进行剪枝

2 递归划分

让我们用变量Y表示因变量(分类变量),用X1, X2, X3,...,Xp表示自变量。通过递归的方式把关于变量X的p维空间划分为不重叠的矩形。首先,一个自变量被选择,比如Xi和Xi的一个值xi,比方说选择xi把p维空间为两部分:一部分是p维的超矩形,其中包含的点都满足Xi<=xi,另一个p维的超矩形包含的所有点满足Xi>xi。接着,这两部分中的一个部分通过选择一个变量和该变量的划分值以相似的方式被划分。这导致了三个矩形区域。随着这个过程的持续,我们得到的矩形越来越小。这个想法是把整个X空间划分为矩形,其中的每个小矩形都尽可能是同构的或“纯”的。“纯”的意思是(矩形)所包含的点都属于同一类。我们认为包含的点都只属于一个类(当然,这并不总是可能的,因为经常存在一些属于不同类的点,但这些点的自变量有完全相同的值)。


### 关于分类回归树的案例与示例 #### 分类回归树简介 分类回归树(Classification and Regression Trees, CART)是一种用于分类和回归任务的强大算法。CART 是一种二叉决策树,既可以用来解决分类问题也可以用来解决回归问题[^1]。 以下是基于 Python 和 `scikit-learn` 库的一个完整的分类回归树示例,使用经典的鸢尾花数据集作为演示: --- #### 示例代码:鸢尾花数据集上的分类回归树 ```python import numpy as np import pandas as pd from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier, export_text from sklearn.metrics import accuracy_score # 加载鸢尾花数据集 data = load_iris() X = data.data # 特征矩阵 y = data.target # 标签向量 # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 初始化决策树分类器 clf = DecisionTreeClassifier(criterion='gini', max_depth=3, random_state=42) clf.fit(X_train, y_train) # 训练模型 # 输出决策路径 tree_rules = export_text(clf, feature_names=data.feature_names.tolist()) print("决策树规则:\n", tree_rules) # 测试集预测 y_pred = clf.predict(X_test) # 准确率评估 accuracy = accuracy_score(y_test, y_pred) print(f"模型准确率为: {accuracy:.2f}") # 查看类别顺序 class_names = list(data.target_names[clf.classes_]) print("类别名称:", class_names) ``` --- #### 示例解释 1. **加载数据**:使用 `load_iris()` 方法加载鸢尾花数据集。 2. **划分数据集**:通过 `train_test_split` 将数据划分为训练集和测试集。 3. **初始化模型**:定义一个最大深度为 3 的决策树分类器,并指定分裂标准为 Gini 不纯度。 4. **训练模型**:调用 `.fit()` 方法对模型进行训练。 5. **输出规则**:使用 `export_text` 打印出决策树的具体规则。 6. **性能评估**:在测试集上进行预测并计算准确率。 7. **查看类别映射关系**:通过 `clf.classes_` 获得模型内部使用的类别顺序[^5]。 --- #### 另一示例:波士顿房价回归问题 对于回归任务,可以采用类似的流程,只是将分类器替换为回归器。以下是一个简单的例子: ```python import numpy as np import pandas as pd from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeRegressor from sklearn.metrics import mean_squared_error # 加载波士顿房价数据集 (注意:该数据集已被弃用,建议使用其他替代数据集) boston = load_boston() X = boston.data # 特征矩阵 y = boston.target # 房价标签 # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 初始化决策树回归器 reg = DecisionTreeRegressor(max_depth=5, random_state=42) reg.fit(X_train, y_train) # 训练模型 # 测试集预测 y_pred = reg.predict(X_test) # 均方误差评估 mse = mean_squared_error(y_test, y_pred) print(f"均方误差为: {mse:.2f}") ``` --- #### 波士顿房价回归说明 1. **加载数据**:使用 `load_boston()` 方法加载波士顿房价数据集。 2. **划分数据集**:同样通过 `train_test_split` 进行数据拆分。 3. **初始化模型**:定义一个最大深度为 5 的决策树回归器。 4. **训练模型**:调用 `.fit()` 方法完成训练。 5. **性能评估**:在测试集上进行预测并通过均方误差衡量模型表现。 需要注意的是,由于伦理原因,`sklearn` 已经移除了 `load_boston()` 数据集,推荐寻找新的替代数据集,例如加州住房数据集或其他公开可用的数据源[^3]。 --- #### 总结 无论是分类还是回归任务,分类回归树都提供了一种直观而强大的建模方式。通过调整超参数(如最大深度、最小样本数等),可以在一定程度上控制模型复杂度以避免过拟合[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值