QQ登录

只需要一步,快速开始

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

决策树分类器简单实现

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-8-9 11:18 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这段代码实现了一个基本的决策树分类器,下面对代码进行详细解析。
  |8 L7 T: V/ e" g  \- R
# u8 ~2 L/ e& [4 e5 U2 [. `+ j### 类 `tree`
2 o" y% W- A# T6 w- {: {8 l# z; ~& }6 x  \. J+ F+ E6 ~
这个类包含了决策树的基本功能,包括计算基尼指数、构建树、训练和预测等。, F2 P( P6 t: R
8 L+ ^% t: h1 \/ d2 W4 x! O
#### 1. **初始化方法 `__init__`**
8 n' ~$ K  b6 C$ r- **参数**:
: b# t2 A$ j6 ^5 A6 X  - `feature`: 输入特征数据。* \0 F' t) H4 P8 L' }5 n) Y
  - `label`: 对应的标签(目标值)。6 e8 ]) V6 ?5 n6 K- z4 R& V
- **功能**: 将特征和标签保存为类的属性,以备后续使用。
) w# ~, `) V. T4 Y& D% s/ j( T+ F8 k5 W( J  a# k2 `2 P/ @5 L
#### 2. **方法 `Gini`**
8 K1 R% Y; A( L1 k  Q- **参数**:9 E4 I  ^  I  X2 X8 F1 f1 p% m
  - `dataset`: 一个类别标签数组。
( g, E5 G8 I& E6 {, X. ~2 V- **功能**: 计算给定数据集的基尼指数(Gini impurity)。
, X7 x$ o- A0 u3 ^, h( K- **流程**:
/ s# o) G0 I1 Z/ w2 f  - 首先获取数据集中不同类别(标签)的集合。- @4 {) m4 q# A: P
  - 对于每个类别,计算其在数据集中出现的概率,并将其平方后累加。
$ C- M2 K1 a/ i) Q! ]* O0 Y4 c4 k  - 返回 \(1 - \text{sum}\) 作为基尼指数,值越小表示纯度越高。
8 p6 Y% S" O0 i$ n& N5 |$ a3 ]* N  G! l
#### 3. **方法 `cmpgini`**
, O  I8 T1 U% l( a1 R7 r- **参数**:8 D+ M+ e& R9 g3 j! o4 E8 c
  - `feature`: 当前特征列。
' @. X0 ?- C+ ?. \  - `label`: 对应的标签。; a: l* F: Y7 X9 L' l# m
- **功能**: 计算当前特征对标签的基尼划分,选择出可以最小化基尼指数的特征值。
4 Y6 z7 u! _, l* W6 V2 B- **流程**:5 K9 V* I5 o: W( \
  - 遍历特征列中的唯一值,计算每个特征值的基尼指数。# \" M& |& w0 y
  - 根据特征值划分数据集,计算各自的基尼指数并加权求和,找到最小的基尼,加上特征对应的值返回。
* `! F! A/ b" b$ L# c- e, q/ u1 I
0 q/ v9 C% L/ m9 Q2 L4 M#### 4. **方法 `maketree`**7 O" a* L" r* v5 Z
- **参数**:
  w/ q( x+ Y2 ^' V  - `feature`: 当前特征数据。
# S: Q. Q2 |+ ?$ V! n0 d  - `label`: 当前标签数据。
  ?" b6 z1 m' s0 B- w- y# |- **功能**: 根据特征和标签递归构建决策树。; W7 p* \! K3 a& t/ A
- **流程**:
* T$ Y4 Q3 i+ c+ T4 e0 v  - 首先判断当前标签是否单一(即所有标签相同),如果是,返回该标签。
+ o+ O7 e$ f, i. O$ a  - 计算所有特征列的基尼指数,找到最优特征及其值。" x# K9 G% a: \! B6 d! k
  - 如果最小基尼指数等于 1,则返回标签。; i/ h/ @9 t4 s. `$ v8 I
  - 将数据集按照最优特征值分为左右子集,并递归调用 `maketree`。- g( ?+ C8 Q, c) Y
  - 返回树的结构:[(特征索引, 该特征的最优值), 左子树, 右子树]。0 Y3 T. {) T& Q8 v! o
" [& x; U& U; l4 u! l- U
#### 5. **方法 `train`**
( E$ R! L2 r+ B) H- **功能**: 训练决策树,调用 `maketree` 方法构建树,并保存最终结果。1 p! F- `( s% H$ ]
- **作用**: 结果存储在 `self.train_result` 属性中。
+ F' m; C9 p/ D1 i" H* i' B! I, U* \9 {' z, @/ r8 y! Q+ I8 n
#### 6. **方法 `prediction`**" ?/ o9 i3 w# N' C; q: Q& Y, k
- **参数**:
. a. l6 l' A1 a" c& w; p' R  - `Mat`: 待预测的特征矩阵。5 y: H+ \6 p6 i3 T4 e
- **功能**: 根据训练得到的决策树进行分类预测。
; y: O4 p5 K4 W- **流程**:
" F- E, n  `' z' {) H  - 遍历每个样本,通过树结构进行预测。1 x9 n% {. P" A5 I) K) H
  - 在树的每一层,根据特征值值进行左右子树的选择,直到到达叶子节点。
1 ]* T9 d8 o& w) A( Q  - 返回每个样本的预测结果。* k4 p$ r, V- e- N2 X, t( h% K1 [

: t0 `# f1 M, U#### 7. **方法 `isLeaf`**
$ Z. Y) K1 I9 v0 y& P, D  }- **参数**:
1 \+ D9 U) ?+ y3 {  - `tree`: 当前树的节点。
3 e: S+ ]$ [" c# [- **功能**: 判断当前节点是否为叶子节点。
. o6 F" U6 H+ i- f- **返回值**: 如果是叶子节点返回 True,否则返回 False。
' C2 h: p$ u* E' J1 \) b6 B5 k: K: {' L. e  m* }6 M, ^
#### 8. **方法 `getLeft` 和 `getRight`**+ U: [% v8 G* K# C9 P0 y
- **参数**:# X6 w9 F( e2 }# W7 p
  - `tree`: 当前树节点。0 x/ Y' ]# z4 U) a- d
- **功能**: 分别获取当前节点的左子树和右子树。
1 e, k) F' s9 ~% _+ n5 W- **返回值**: 返回子树。
# u, w& H1 {6 i' P( l% w' e2 b+ ]
# Y. D" ~, t3 D4 \### 总结
0 \3 `1 D! y/ P* P9 B# a该代码实现了一个基本的决策树分类器,主要功能包括:9 U- H9 l" ]$ B' l/ K* ]
- 计算数据集的基尼指数。
  ]* _; L* U* p% E0 e% G- 根据特征和标签构建决策树。) r# K# u# B+ l0 P: j/ C' I% I
- 利用训练得到的树对新样本进行分类预测。" S7 k9 y* m. C/ d$ ?3 j2 z

" X/ l9 n2 `  x  G- J1 m0 T, O/ x该决策树是通过递归的方法构建的,将数据集根据特征进行分割,最终形成由节点和叶子组成的树形结构。叶子节点代表最终的分类结果。这个实现是决策树算法的基础,适合用于分类任务。5 b3 b1 i* O& H; U5 m( X
+ d: t" ?: K+ [4 J% x7 h+ k: x& s: D
' \$ z( h# F3 c

2 Z4 \& Z- }8 r. Z4 `

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-4-10 13:18 , Processed in 0.411851 second(s), 55 queries .

回顶部