|
9 | 9 |
|
10 | 10 | from Orange.classification import OneClassSVMLearner, EllipticEnvelopeLearner,\ |
11 | 11 | LocalOutlierFactorLearner, IsolationForestLearner |
12 | | -from Orange.data import Table, DiscreteVariable |
| 12 | +from Orange.data import Table |
13 | 13 | from Orange.widgets import gui |
14 | 14 | from Orange.widgets.settings import Setting |
15 | 15 | from Orange.widgets.utils.sql import check_sql_input |
@@ -238,44 +238,40 @@ def enable_controls(self): |
238 | 238 | self.method_combo.model().item(self.Covariance).setEnabled(False) |
239 | 239 | self.Warning.disabled_cov() |
240 | 240 |
|
241 | | - def _get_outliers(self) -> Tuple[Table, Table, Table]: |
| 241 | + def commit(self): |
| 242 | + inliers, outliers, data = self.detect_outliers() |
| 243 | + summary = len(inliers) if inliers else self.info.NoOutput |
| 244 | + self.info.set_output_summary(summary) |
| 245 | + self.Outputs.inliers.send(inliers) |
| 246 | + self.Outputs.outliers.send(outliers) |
| 247 | + self.Outputs.data.send(data) |
| 248 | + |
| 249 | + def detect_outliers(self) -> Tuple[Table, Table, Table]: |
| 250 | + self.n_inliers = self.n_outliers = None |
242 | 251 | self.Error.singular_cov.clear() |
243 | 252 | self.Error.memory_error.clear() |
| 253 | + if not self.data: |
| 254 | + return None, None, None |
244 | 255 | try: |
245 | | - pred, outlier_var = self.detect_outliers() |
| 256 | + learner_class = self.METHODS[self.outlier_method] |
| 257 | + kwargs = self.current_editor.get_parameters() |
| 258 | + learner = learner_class(**kwargs) |
| 259 | + model = learner(self.data) |
| 260 | + pred = model(self.data) |
246 | 261 | except ValueError: |
247 | 262 | self.Error.singular_cov() |
248 | 263 | return None, None, None |
249 | 264 | except MemoryError: |
250 | 265 | self.Error.memory_error() |
251 | 266 | return None, None, None |
252 | 267 | else: |
253 | | - col = pred[:, outlier_var].metas |
| 268 | + col = pred[:, model.outlier_var].metas |
254 | 269 | inliers_ind = np.where(col == 1)[0] |
255 | 270 | outliers_ind = np.where(col == 0)[0] |
256 | 271 | self.n_inliers = len(inliers_ind) |
257 | 272 | self.n_outliers = len(outliers_ind) |
258 | 273 | return self.data[inliers_ind], self.data[outliers_ind], pred |
259 | 274 |
|
260 | | - def commit(self): |
261 | | - inliers = outliers = data = None |
262 | | - self.n_inliers = self.n_outliers = None |
263 | | - if self.data: |
264 | | - inliers, outliers, data = self._get_outliers() |
265 | | - |
266 | | - summary = len(inliers) if inliers else self.info.NoOutput |
267 | | - self.info.set_output_summary(summary) |
268 | | - self.Outputs.inliers.send(inliers) |
269 | | - self.Outputs.outliers.send(outliers) |
270 | | - self.Outputs.data.send(data) |
271 | | - |
272 | | - def detect_outliers(self) -> Tuple[Table, DiscreteVariable]: |
273 | | - learner_class = self.METHODS[self.outlier_method] |
274 | | - kwargs = self.current_editor.get_parameters() |
275 | | - learner = learner_class(**kwargs) |
276 | | - model = learner(self.data) |
277 | | - return model(self.data), model.outlier_var |
278 | | - |
279 | 275 | def send_report(self): |
280 | 276 | if self.n_outliers is None or self.n_inliers is None: |
281 | 277 | return |
|
0 commit comments