1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
//! Incremental learning support for weak learners
//!
//! Provides traits and utilities for incrementally updating learners
//! with new data batches, enabling online learning and model updates.
//!
//! # Supported Learners
//!
//! | Learner | Incremental Support | Notes |
//! |---------|---------------------|-------|
//! | LinearBooster | Full | Warm start continues CD from current weights |
//! | TreeBooster | Partial | Trees are additive; new trees trained on residuals |
//! | LinearTreeBooster | Not Supported | Complex leaf structure requires refit |
//!
//! # Example
//!
//! ```ignore
//! use treeboost::learner::{LinearBooster, LinearConfig};
//! use treeboost::learner::incremental::IncrementalLearner;
//!
//! let mut booster = LinearBooster::new(5, LinearConfig::default());
//!
//! // Initial training
//! booster.fit_on_gradients(&features_a, 5, &grads_a, &hess_a)?;
//!
//! // Warm start with new data (continues from current weights)
//! booster.warm_fit(&features_b, 5, &grads_b, &hess_b)?;
//!
//! // Check total iterations across all fits
//! println!("Total iterations: {}", booster.iterations_completed());
//! ```
use crateResult;
/// Trait for learners that support incremental fitting (warm start)
///
/// Learners implementing this trait can continue training from their current
/// state instead of starting from scratch. This enables:
/// - Online learning (streaming data)
/// - Model updates (new batches without full retrain)
/// - Transfer learning (start from pretrained weights)
/// Trait for models that support appending new components
///
/// This is the tree-level incremental training interface.
/// Trees are trained on residuals from the existing ensemble,
/// then appended to grow the model.