【解答】决策树是分类还是回归

本文详细解释了决策树(CART)中分类树与回归树的区别,指出CART下有回归树,强调了它们在处理分类和回归任务的应用,并展示了如何使用sklearn库在鸢尾花数据集上进行分类和回归实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、决策树是分类还是回归

二、CART回归树和CART分类树的区别

2.1 CART分类树

2.2 CART回归树

三、CART分类树与回归树的实现

3.1 sklearn实现分类树

3.2 sklearn实现回归树


本文部分图文借鉴自《老饼讲解-机器学习》

一、决策树是分类还是回归

如果直接问决策树是分类还是回归,那么决策树既可以做分类,也可以做回归,

但这样的问答是不准确的,因为决策树有很多种

决策树从技术主线上来分,有两类:CART决策树、ID3系列决策树

其中ID3系列都是用于做分类的,只有CART之下的有关于做回归的回归树,也称为CART回归树

所以,准确来说,决策树有做分类的,也有做回归的,做分类的叫分类树,做回归的叫回归树

关于ID3和CART的区别可以参考:

老饼讲解|【决策树】决策树ID3算法icon-default.png?t=N7T8https://www.bbbdata.com/text/186

二、CART回归树和CART分类树的区别

2.1 CART分类树

CART的分类树模型如下:

决策树是以树形结构表示的模型,其中每个内部节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。决策树模型具有计算复杂度不高、输出结果易于理解、对中间值的缺失不敏感、可以处理多种数据类型等优点。

2.2 CART回归树

而对于CART回归树,则主要是把分类节点上的样本Y值取平均值,作为叶子的回归值。

当样本落在叶子上时,回归值就是样本的预测值。

也就是说,CART回归树虽然是做回归,但它的输出不是连续的,而是枚举的。

三、CART分类树与回归树的实现

3.1 sklearn实现分类树

现已采集150组 鸢尾花数据,包括鸢尾花的四个特征与鸢尾花的类别。数据如下(即sk-learn中的iris数据):
 

 
花萼长度 sepal length (cm) 、花萼宽度 sepal width (cm)   
花瓣长度 petal length (cm) 、花瓣宽度 petal width (cm)  
山鸢尾:0,杂色鸢尾:1,弗吉尼亚鸢尾:2               

下面我们用鸢尾花的特征来预测鸢尾花的类别

在sklearn中代码实现如下:

from sklearn.datasets import load_iris
from sklearn import tree

#----------------数据准备----------------------------
iris = load_iris()                          # 加载数据

#---------------模型训练----------------------------------
clf = tree.DecisionTreeClassifier()         # sk-learn的决策树模型
clf = clf.fit(iris.data, iris.target)        # 用数据训练树模型构建()
r = tree.export_text(clf, feature_names=iris['feature_names'])


#---------------模型预测结果------------------------
text_x = iris.data[[0,1,50,51,100,101], :]
pred_target_prob = clf.predict_proba(text_x)        # 预测类别概率
pred_target = clf.predict(text_x)              # 预测类别

#---------------打印结果---------------------------
print("\n===模型======")
print(r)
print("\n===测试数据:=====")
print(text_x)
print("\n===预测所属类别概率:=====")
print(pred_target_prob)
print("\n===预测所属类别:======")
print(pred_target)

运行结果如下:

3.2 sklearn实现回归树

下面我们再根据花萼长度、花萼宽度、花瓣长度来可以预测花瓣宽度。由于花瓣宽度是数值,所以需要使用回归树。

在sklearn中实现回归树的代码如下:

from sklearn.datasets import load_iris
from sklearn import tree
import pandas as pd


#----------------数据准备----------------------------
iris = load_iris()                          # 加载数据
x = iris.data[:,0:3]
y =  iris.data[:,3]
feature_names = iris['feature_names'][0:3]
target_name = iris['feature_names'][3]
#---------------模型训练----------------------------------
clf = tree.DecisionTreeRegressor()         # sk-learn的决策树模型
clf = clf.fit(x, y)       # 用数据训练树模型构建()
r = tree.export_text(clf, feature_names=feature_names)


#---------------模型预测结果------------------------
text_x = x[[0,1,50,51,100,101], :]
test_y = y[[0,1,50,51,100,101]]
pred_target = clf.predict(text_x)              # 预测类别


df = pd.DataFrame()
df["原y"] = test_y
df["预测y"] = pred_target


#---------------打印结果---------------------------
print("\n===模型======")
print(r)
print("\n===预测结果======")
print(df)

运行结果如下:

如果觉得本文有帮助,点个赞吧!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值