(self, X, Y, tol=0.00001, eps=0.01)
| 196 | return 0 |
| 197 | |
| 198 | def fit(self, X, Y, tol=0.00001, eps=0.01): |
| 199 | # we need these to make future predictions |
| 200 | self.tol = tol |
| 201 | self.eps = eps |
| 202 | self.Xtrain = X |
| 203 | self.Ytrain = Y |
| 204 | self.N = X.shape[0] |
| 205 | self.alphas = np.zeros(self.N) |
| 206 | self.b = 0. |
| 207 | self.errors = self._decision_function(self.Xtrain) - self.Ytrain |
| 208 | |
| 209 | # kernel matrix |
| 210 | self.K = self.kernel(X, X) |
| 211 | self.YY = np.outer(Y, Y) |
| 212 | self.YYK = self.K * self.YY |
| 213 | |
| 214 | iter_ = 0 |
| 215 | numChanged = 0 |
| 216 | examineAll = 1 |
| 217 | losses = [] |
| 218 | |
| 219 | while numChanged > 0 or examineAll: |
| 220 | print("iter:", iter_) |
| 221 | iter_ += 1 |
| 222 | numChanged = 0 |
| 223 | if examineAll: |
| 224 | # loop over all training examples |
| 225 | for i in range(self.alphas.shape[0]): |
| 226 | examine_result = self._examine_example(i) |
| 227 | numChanged += examine_result |
| 228 | if examine_result: |
| 229 | loss = self._loss(self.Xtrain, self.Ytrain) |
| 230 | losses.append(loss) |
| 231 | else: |
| 232 | # loop over examples where alphas are not already at their limits |
| 233 | for i in np.where((self.alphas != 0) & (self.alphas != self.C))[0]: |
| 234 | examine_result = self._examine_example(i) |
| 235 | numChanged += examine_result |
| 236 | if examine_result: |
| 237 | loss = self._loss(self.Xtrain, self.Ytrain) |
| 238 | losses.append(loss) |
| 239 | if examineAll == 1: |
| 240 | examineAll = 0 |
| 241 | elif numChanged == 0: |
| 242 | examineAll = 1 |
| 243 | |
| 244 | plt.plot(losses) |
| 245 | plt.title("loss per iteration") |
| 246 | plt.show() |
| 247 | |
| 248 | def _decision_function(self, X): |
| 249 | return (self.alphas * self.Ytrain).dot(self.kernel(self.Xtrain, X)) - self.b |
no test coverage detected