AdaBoost¶
Algorithm¶
AdaBoost trains weak classifiers in sequence, increasing the weight of observations that previous classifiers misclassified. Predictions combine the classifiers' votes, weighted by their training errors. ToyML includes a one-dimensional threshold classifier as a simple weak learner.
Inputs and limitations¶
- Pass non-empty numeric feature lists and one binary label (
-1or1) per observation. OneDimensionClassifieruses only the first feature; use one-dimensional samples for this learner.- Choose a positive
n_weak_learner. Custom learners must implement theBaseWeakLearnerinterface. - A weak learner with zero training error currently causes division by zero. Use a dataset that cannot be perfectly separated by a single threshold.
predictaccepts one sample.
Minimal example¶
from toyml.ensemble import AdaBoost
from toyml.ensemble.adaboost import OneDimensionClassifier
samples = [[float(i)] for i in range(10)]
labels = [1, 1, 1, -1, -1, -1, 1, 1, 1, -1]
model = AdaBoost(weak_learner=OneDimensionClassifier, n_weak_learner=3).fit(samples, labels)
print(model.predict([2.0]))
API¶
toyml.ensemble.adaboost.AdaBoost
dataclass
¶
AdaBoost(weak_learner: type[BaseWeakLearner], n_weak_learner: int = 5)
The implementation of AdaBoost algorithm.
Examples:
>>> from toyml.ensemble.adaboost import AdaBoost, OneDimensionClassifier
>>> dataset = [[0], [1], [2], [3], [4], [5], [6], [7], [8], [9]]
>>> labels = [1, 1, 1, -1, -1, -1, 1, 1, 1, -1]
>>> ada = AdaBoost(weak_learner=OneDimensionClassifier, n_weak_learner=3).fit(dataset, labels)
>>> print(f"Training dataset error rate: {ada.training_error_rate_}")
Training dataset error rate: 0.0
>>> test_sample = [1.5]
>>> print(f"The label of {test_sample} is {ada.predict(test_sample)}")
The label of [1.5] is 1
References
- Li Hang
- Zhou Zhihua
weak_learner
instance-attribute
¶
weak_learner: type[BaseWeakLearner]
The weak learner to be used in the AdaBoost algorithm.
n_weak_learner
class-attribute
instance-attribute
¶
n_weak_learner: int = 5
The number of weak learners to be used in the AdaBoost algorithm.
predict_labels_
class-attribute
instance-attribute
¶
predict_labels_: list[int] | None = field(default=None, init=False)
The prediction labels of the training dataset.
training_error_rate_
class-attribute
instance-attribute
¶
training_error_rate_: float | None = field(default=None, init=False)
The error rate of the training dataset.
fit
¶
fit(dataset: list[list[float]], labels: list[int]) -> AdaBoost
Fit the AdaBoost model.
Source code in src/toyml/ensemble/adaboost.py
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 | |
predict
¶
predict(x: list[float]) -> int
Predict the label of the input sample.
Source code in src/toyml/ensemble/adaboost.py
127 128 129 130 131 132 133 134 135 136 137 138 | |
toyml.ensemble.adaboost.OneDimensionClassifier
dataclass
¶
OneDimensionClassifier()
Bases: BaseWeakLearner
Binary classifier with one dimension feature.
Ref: Li Hang, 1 ed, E8.1.3
fit
¶
fit(dataset: list[list[float]], weights: list[float], labels: list[int]) -> OneDimensionClassifier
Fit the one-dimension classifier.
Source code in src/toyml/ensemble/adaboost.py
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | |
predict
¶
predict(x: list[float]) -> int
Predict the label of the input sample.
Source code in src/toyml/ensemble/adaboost.py
176 177 178 179 180 181 182 183 184 185 186 187 | |
get_error_rate
¶
get_error_rate() -> float
Get the error rate of the training dataset.
Source code in src/toyml/ensemble/adaboost.py
189 190 191 192 193 194 | |
get_predict_labels
¶
get_predict_labels() -> list[int]
Get the prediction labels of the training dataset.
Source code in src/toyml/ensemble/adaboost.py
196 197 198 199 200 201 | |
get_best_cut
¶
get_best_cut(dataset: list[list[float]], weights: list[float], labels: list[int]) -> tuple[SignMode, float, float]
Get the best cut of the training dataset.
Source code in src/toyml/ensemble/adaboost.py
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 | |