L5 决策树模型

前言

一、我的环境

  • 电脑系统:Windows 11
  • 语言环境:Python 3.9.7
  • 编辑器:Jupyter Lab

二、基本概念

链接: link
链接: link

三、分类模型代码实现

1. 导入数据

##导入库和数据
import pandas as pd
import numpy as np

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"  
names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class'] 

dataset = pd.read_csv(url, names=names)
dataset

在这里插入图片描述

2. 数据划分

#数据划分
#.iloc:Pandas中用于基于行和列的索引选择数据的函数
#[ : , [0,1,2,3]]:表示选择dataset中所有行(:表示全部行)和第0到第3列的数据
#.values:将选取的DataFrame转换为NumPy数组格式,通常用于机器学习算法中的特征输入
X = dataset.iloc[ : ,[0,1,2,3]].values
Y = dataset.iloc[ : ,  4].values

3. 模型训练

#模型训练
from sklearn import tree     #tree模块提供了决策树模型的实现
from sklearn.datasets import load_iris   #load_iris函数用于加载内置的鸢尾花(Iris)数据集,通常用于演示和测试机器学习算法
#DecisionTreeClassifier是sklearn.tree模块中用于分类任务的决策树模型
clf = tree.DecisionTreeClassifier()  # sk-learn的决策树模型
clf = clf.fit(X, Y)                  # 用数据训练树模型构建()
#使用export_text函数将训练好的决策树模型clf导出为文本形式。r变量将存储导出的文本,它描述了决策树的规则和结构
r   = tree.export_text(clf)

4. 模型预测结果

#模型预测结果
#这行代码从之前定义的特征集X中选取特定的行(索引为0, 1, 50, 51, 100, 101的行)来创建一个新的数组text_x
#这个数组将用于模型的预测
#这里的索引是基于0的,所以实际上选取的是第1行、第2行、第51行、第52行、第101行和第102行的数据
text_x = X[[0,1,50,51,100,101], :]
#这行代码使用训练好的决策树模型clf来预测text_x中每个样本的类别概率
#predict_proba方法返回一个数组,其中包含了每个样本属于每个类别的概率。这些概率的总和对于每个样本都是1。
pred_target_prob = clf.predict_proba(text_x)        # 预测类别概率
#这行代码同样使用clf模型来预测text_x中每个样本的类别
#与predict_proba不同,predict方法返回的是每个样本最有可能的类别,即概率最高的类别。
pred_target = clf.predict(text_x)              # 预测类别

5. 打印结果

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

在这里插入图片描述
在这里插入图片描述

四、回归模型代码实现

1. 导入数据

#导入数据
import pandas as pd
import numpy as np

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"  
names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class'] 

dataset = pd.read_csv(url, names=names)
dataset

在这里插入图片描述

2. 数据划分

#数据划分
X = dataset.iloc[ : ,[0,1,2]].values
Y = dataset.iloc[ : ,  3].values

3. 模型训练

#模型训练
from sklearn import tree
from sklearn.datasets import load_iris
#DecisionTreeRegressor是sklearn.tree模块中用于回归任务的决策树模型
clf = tree.DecisionTreeRegressor()         # sk-learn的决策树模型
clf = clf.fit(X, Y)        # 用数据训练树模型构建()
r   = tree.export_text(clf)

4. 模型预测结果

#模型预测结果
test_x = X[[0,1,50,51,100,101], :]
test_y = Y[[0,1,50,51,100,101]]
#使用训练好的模型clf来预测test_x中每个样本的目标值。predict方法返回的是每个样本最有可能的目标值。
pred_target = clf.predict(test_x)  # 预测y
#创建一个空的Pandas DataFrame对象df,用于存储数据
df = pd.DataFrame()
#将原始目标值test_y添加到DataFramedf中,列名为"原y"
df["原y"] = test_y
#将模型预测的目标值pred_target添加到DataFramedf中,列名为"预测y"
df["预测y"] = pred_target

5. 打印结果

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

在这里插入图片描述

五、心得体会

决策树每个内部节点表示一个测试功能,即类似做出决策的过程(动作),每个叶节点都表示一个类标签,即在计算所有特征之后做出的决定(结果)。

用决策树分类:从根节点开始,对实例的某一特征进行测试,根据测试结果将实例分配到其子节点,此时每个子节点对应着该特征的一个取值,如此递归的对实例进行测试并分配,直到到达叶节点,最后将实例分到叶节点的类中。

决策树分为两大类,分类树和回归树:
分类树用于分类标签值,如晴天/阴天/雾/雨、用户性别、网页是否是垃圾页面;
回归树用于预测实数值,如明天的温度、用户的年龄、网页的相关程度;

两者的区别:

分类树的结果不能进行加减运算,晴天 晴天没有实际意义;
回归树的结果是预测一个数值,可以进行加减运算,例如 20 岁 3 岁=23 岁。
GBDT 中的决策树是回归树,预测结果是一个数值,在点击率预测方面常用 GBDT,例如用户点击某个内容的概率。

决策树的基本概念和核心思想:

问题分解:将复杂的问题分解成多个简单的问题或决策点,每个问题对应一个特征属性。

信息增益:选择最优特征进行分割,通常是通过计算信息增益(或其它标准如基尼不纯度)来实现,以确保每次分割都能最大化类别的分离。

递归构建:从根节点开始,递归地对数据集进行分割,直到满足停止条件,如达到预设的最大深度,或每个子节点中的样本都属于同一类别。

树的深度:决策树的深度影响模型的复杂度,深度过大可能导致过拟合,而过小则可能导致欠拟合。

分支决策:每个内部节点代表一个决策规则,每个分支代表决策规则的一个可能结果。

叶节点:叶节点代表最终的决策结果,可以是分类问题中的一个类别,或回归问题中的一个数值。

特征的重要性:决策树可以揭示特征对预测结果的重要性,因为树的结构显示了哪些特征被用来进行决策。

模型的可解释性:决策树的结构清晰,易于理解和解释,使得非技术用户也能明白模型是如何做出预测的。

适应性:决策树可以适应各种类型的数据,包括数值型和类别型数据,无需复杂的数据预处理。

处理缺失值:决策树算法可以处理数据中的缺失值,通过为缺失值选择一个替代分支来继续决策过程。

多路分割:与二元分割不同,一些决策树算法允许每个节点进行多路分割,即每个节点可以基于多个特征进行分割。

剪枝:为了防止过拟合,决策树可以通过剪枝技术来减少树的大小,剪枝可以是预剪枝(在树生长前设置限制)或后剪枝(在树生长后移除一些分支)。
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值