QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1732|回复: 0
打印 上一主题 下一主题

决策树分类器简单实现

[复制链接]
字体大小: 正常 放大

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-8-9 11:18 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码实现了一个基本的决策树分类器,下面对代码进行详细解析。( y9 \4 t( y8 b5 r
" r  N- A* G' X; [8 l6 o- v+ f
### 类 `tree`
3 Q) D8 ]' L% O7 e% R6 d# A
" t; A; V: E6 Y9 a! \" Y: P+ T这个类包含了决策树的基本功能,包括计算基尼指数、构建树、训练和预测等。
7 _7 e! F! w% w$ u) K: x8 [) t6 i8 H- j, q  |+ ^0 I' t3 C% G
#### 1. **初始化方法 `__init__`**
# r1 n! }+ y* G" w3 v8 j3 h- **参数**:: Q8 H, @5 D! \: B5 p
  - `feature`: 输入特征数据。/ Y0 `. Y' ]% d' n( \5 M* [
  - `label`: 对应的标签(目标值)。2 g) ^1 B! r2 g7 X) j
- **功能**: 将特征和标签保存为类的属性,以备后续使用。$ b, @4 D: I+ R, Y; J) h

. o/ V" z4 Z1 w#### 2. **方法 `Gini`**4 P. a0 W$ d* h. c5 a7 O8 L
- **参数**:9 \. {8 S2 L9 B, q) z  M. `: N
  - `dataset`: 一个类别标签数组。3 V1 }% h# }3 Z. r
- **功能**: 计算给定数据集的基尼指数(Gini impurity)。
  F9 U; F6 \7 n2 t3 b5 k- **流程**:
- A7 d6 x; P1 K( {% n  - 首先获取数据集中不同类别(标签)的集合。
6 c5 }/ a- q9 W" m  - 对于每个类别,计算其在数据集中出现的概率,并将其平方后累加。" @) T8 E+ L$ |" `* O! X
  - 返回 \(1 - \text{sum}\) 作为基尼指数,值越小表示纯度越高。
* h3 E6 w) h) F( u+ q; D7 F3 F. P, h: v9 w
#### 3. **方法 `cmpgini`**
# j" \# A1 ~4 I) E: M- **参数**:9 l! Y. j( n* ^+ R% D: z
  - `feature`: 当前特征列。, H4 |7 M: E5 l- X, b6 e% v
  - `label`: 对应的标签。
3 b+ K6 h. `, N9 k: Z( ^- **功能**: 计算当前特征对标签的基尼划分,选择出可以最小化基尼指数的特征值。- g$ ^4 S" o$ ^- ]6 N, R3 t
- **流程**:! U" K" e8 O( R  U6 e
  - 遍历特征列中的唯一值,计算每个特征值的基尼指数。( v2 |) S7 H# c. e
  - 根据特征值划分数据集,计算各自的基尼指数并加权求和,找到最小的基尼,加上特征对应的值返回。  f. b& \, }  r& g( D; H0 ^" P

8 W$ `- c3 ^) y/ L7 F8 `( i#### 4. **方法 `maketree`**: e- n0 c( l& W( ~7 Z6 U5 v
- **参数**:& R" _" Y0 _% y, {9 y4 n% ?4 `
  - `feature`: 当前特征数据。" n7 b  C8 |" o6 U
  - `label`: 当前标签数据。
+ t; J  A7 f7 P# I- **功能**: 根据特征和标签递归构建决策树。( f: J7 Q; C: r) f
- **流程**:+ w& @7 Y6 T0 z
  - 首先判断当前标签是否单一(即所有标签相同),如果是,返回该标签。
4 s# s3 h# s! J3 m  - 计算所有特征列的基尼指数,找到最优特征及其值。
: G4 A6 d  m6 ~# [5 S' j) ^! P  - 如果最小基尼指数等于 1,则返回标签。. Q1 d+ B2 ~3 N) d' i* a- L
  - 将数据集按照最优特征值分为左右子集,并递归调用 `maketree`。, L9 k# R$ w1 W. C  ^7 l) N
  - 返回树的结构:[(特征索引, 该特征的最优值), 左子树, 右子树]。$ l( \+ p, S6 G2 L. [) F

" w5 S1 M* X! G# f' J#### 5. **方法 `train`**
& _$ ?2 y6 _1 c& u. k- **功能**: 训练决策树,调用 `maketree` 方法构建树,并保存最终结果。- W8 X9 {& l6 l# u& _
- **作用**: 结果存储在 `self.train_result` 属性中。
8 M# S  E: l$ @: Z
" l- F; A; J0 ~* Z$ {2 y#### 6. **方法 `prediction`**0 {% I& ^2 O- B6 E
- **参数**:# f+ l9 K9 W( G7 e9 b% x2 k
  - `Mat`: 待预测的特征矩阵。# c# m3 g8 _( [
- **功能**: 根据训练得到的决策树进行分类预测。
6 K+ K" O0 y2 u4 \9 l- b: f; i- **流程**:$ Y7 q) T/ j. e6 g
  - 遍历每个样本,通过树结构进行预测。
/ b5 I- B5 M6 l5 }! W# z  - 在树的每一层,根据特征值值进行左右子树的选择,直到到达叶子节点。
8 b+ h7 x3 ?% Z# _3 y  - 返回每个样本的预测结果。
0 M0 B/ O0 R8 s: J( d+ N! \/ J
8 M, B, y) f- Y9 @3 k4 v5 J#### 7. **方法 `isLeaf`**
7 Y7 m/ ~- z2 v9 b6 R4 D5 k$ c- **参数**:
2 k6 P: v: G: ?1 P1 k2 h  - `tree`: 当前树的节点。
' O! |/ O1 T5 L: B/ V2 l- **功能**: 判断当前节点是否为叶子节点。
+ |, g  F- ?9 e* f" c  N1 v- **返回值**: 如果是叶子节点返回 True,否则返回 False。
6 p9 c  g! c9 g/ h% v$ W% e% v" N: `& f6 c
#### 8. **方法 `getLeft` 和 `getRight`**
' n, T" |; ]# a7 u- **参数**:8 u+ h1 |  A# U- V. @% l5 L" t2 }
  - `tree`: 当前树节点。2 r& z: f% ~2 G  D& K: z" _
- **功能**: 分别获取当前节点的左子树和右子树。
) I3 r& E; n% b4 R- **返回值**: 返回子树。
. {5 A0 v0 S( L( H2 @( U+ V" d/ P3 s1 }- `8 r
### 总结4 ?1 F6 D3 u+ L* K6 ?6 d1 Z5 \1 P/ x
该代码实现了一个基本的决策树分类器,主要功能包括:
( \8 D3 _2 P2 q3 M- M- 计算数据集的基尼指数。/ c# L# o- v! x
- 根据特征和标签构建决策树。
: B+ Q# N" R7 Z( K3 b- 利用训练得到的树对新样本进行分类预测。1 H) y" `, Z% Z/ L2 T% m
2 D/ W% B0 a  @- c
该决策树是通过递归的方法构建的,将数据集根据特征进行分割,最终形成由节点和叶子组成的树形结构。叶子节点代表最终的分类结果。这个实现是决策树算法的基础,适合用于分类任务。
+ ]* I% c0 a' N7 u4 l# h5 {: G! M' L. c  o$ H0 t7 s, }

# u% q8 w1 A7 y( k2 t  L4 h2 A% l9 Y( Q9 w# \8 X  e! K7 s

test.py

1018 Bytes, 下载次数: 0, 下载积分: 体力 -2 点

售价: 2 点体力  [记录]  [购买]

cart_Classification_tree.py

2.85 KB, 下载次数: 0, 下载积分: 体力 -2 点

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-6-15 22:21 , Processed in 0.424396 second(s), 54 queries .

回顶部