(self, X, Y)
| 17 | self.M = M |
| 18 | |
| 19 | def fit(self, X, Y): |
| 20 | self.models = [] |
| 21 | self.alphas = [] |
| 22 | |
| 23 | N, _ = X.shape |
| 24 | W = np.ones(N) / N |
| 25 | |
| 26 | for m in range(self.M): |
| 27 | tree = DecisionTreeClassifier(max_depth=1) |
| 28 | tree.fit(X, Y, sample_weight=W) |
| 29 | P = tree.predict(X) |
| 30 | |
| 31 | err = W.dot(P != Y) |
| 32 | alpha = 0.5*(np.log(1 - err) - np.log(err)) |
| 33 | |
| 34 | W = W*np.exp(-alpha*Y*P) # vectorized form |
| 35 | W = W / W.sum() # normalize so it sums to 1 |
| 36 | |
| 37 | self.models.append(tree) |
| 38 | self.alphas.append(alpha) |
| 39 | |
| 40 | def predict(self, X): |
| 41 | # NOT like SKLearn API |
no test coverage detected