L5 机器学习——决策树模型

一、基本概念 

决策树(Decision Tree)是机器学习中一种经典的分类与回归算法。它模拟人类决策过程,通过对数据集进行逐步的分析和判定,最终生成一颗树状结构,每个节点代表一个决策或一个特征。

决策树的核心思想是通过一系列问题将数据集划分成不同的类别或值,从而实现对未知数据的预测和分类。

这一算法的开发灵感源自人类在解决问题时的思考方式,我们往往通过一系列简单而直观的问题逐步缩小解决方案的范围。决策树的构建过程也是类似的,它通过对数据的特征进行提问,选择最能区分不同类别的特征,逐渐生成树状结构,最终形成一个可用于预测的模型。

二、决策树算法发展

  • CLS (Concept Learning System) 是最早的决策树
  • ID3 (Iterative Dichotomiser 3) 通过递归地将数据集划分成子集,选择具有最大信息增益的特征进行决策。
  • C4.5是ID3的改进版本,引入了信息增益比来解决信息增益在处理多值属性时的偏好问题。这两者为决策树算法的发展奠定了基础。
  • CART (Classification and Regression Trees)使用基尼指数来度量数据集的不纯度,通过选择最小化基尼指数的特征进行分裂,以达到更精准的分类和回归。

三、分类决策树

在分类问题中,一颗决策树可以视作 if-then 规则的集合。模型具有可读性,分类速度快的特点,在各种实际业务建模过程中广泛使用。 

分类树代码实现

我们希望通过鸢尾花数据,训练一个决策树模型,之后应用该模型,可以根据鸢尾花的四个特征去预测它的类别。

 3.1 导入数据

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import tree
from sklearn.datasets import load_iris

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

# Load the dataset
df = pd.read_csv(url, names=names)
df.head()

3.2 数据划分 

# Split the data
X = df.iloc[:, :-1].values
Y = df.iloc[:, -1].values
print('X:', X.shape)
print('Y:', Y.shape)

 3.3 模型训练

DecisionTreeClassifier()实际上是基于 CART 算法实现的,默认使用基尼不纯度作为分裂准则

# Train the model
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, Y)
r = tree.export_text(clf) #  export the structure of the trained decision tree as a text representation

3.4 模型预测结果

这段代码从 'X' 中选择特定的行进行测试。选择的行是 Iris 数据集中每个类别的前两个样本(第 0 和 1 行对应第一个类别,第 50 和 51 行对应第二个类别,第 100 和 101 行对应第三个类别)。

# Predict the test set
text_x = X[[0,1,50,51,100,101], :]
pred_target_prob = clf.predict_proba(text_x)        # 预测类别概率
pred_target = clf.predict(text_x)              # 预测类别

3.5 打印结果

# Print the result
print("\n===模型======")
print(r)
print("\n===测试数据:=====")
print(text_x)
print("\n===预测所属类别概率:=====")
print(pred_target_prob)
print("\n===预测所属类别:======")
print(pred_target)

四、回归决策树

回归决策树代码实现

我们希望通过鸢尾花数据,训练一个决策树模型,之后应用该模型,可以根据花萼长度、花萼宽度、花瓣长度 预测 花瓣宽度

4.1 导入数据

此处与分类决策树导入数据部分一致

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

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

# Load the dataset
df = pd.read_csv(url, names=names)
df.head()

4.2 数据划分

X = df.iloc[ : ,[0,1,2]].values
Y = df.iloc[ : ,  3].values
print('X:', X.shape)
print('Y:', Y.shape)

4.3 模型训练

# Train the model
clf = tree.DecisionTreeRegressor()         # sklearn的决策树模型
clf = clf.fit(X, Y)        # 用数据训练树模型构建()
r   = tree.export_text(clf)   # 输出树模型的结构

4.4 模型预测结果

# Predict the test set
test_x = X[[0,1,50,51,100,101], :]
test_y = Y[[0,1,50,51,100,101]]
pred_target = clf.predict(test_x)  # 预测y

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

4.5 打印结果

注:模型输出较长,此处只截取部分打印输出。

# Print the result
print("\n===模型======")
print(r)
print("\n===预测结果======")
print(df)

 

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值