@@ -40,6 +40,7 @@ class OWOutliers(widget.OWWidget):
4040 class Error (widget .OWWidget .Error ):
4141 singular_cov = Msg ("Singular covariance matrix." )
4242 multiclass_error = Msg ("Multiple class data is not supported" )
43+ memory_error = Msg ("Not enough memory" )
4344
4445 def __init__ (self ):
4546 super ().__init__ ()
@@ -137,6 +138,28 @@ def set_data(self, dataset):
137138
138139 self .commit ()
139140
141+ def _get_outliers (self ):
142+ try :
143+ y_pred = self .detect_outliers ()
144+ except ValueError :
145+ self .Error .singular_cov ()
146+ self .in_out_info_label .setText (self .in_out_info_default )
147+ except MemoryError :
148+ self .Error .memory_error ()
149+ return None , None
150+ else :
151+ inliers_ind = np .where (y_pred == 1 )[0 ]
152+ outliers_ind = np .where (y_pred == - 1 )[0 ]
153+ inliers = self .new_data [inliers_ind ]
154+ outliers = self .new_data [outliers_ind ]
155+ self .in_out_info_label .setText (
156+ "{} inliers, {} outliers" .format (len (inliers ),
157+ len (outliers )))
158+ self .n_inliers = len (inliers )
159+ self .n_outliers = len (outliers )
160+
161+ return inliers , outliers
162+
140163 def commit (self ):
141164 self .clear_messages ()
142165 inliers = outliers = None
@@ -145,21 +168,7 @@ def commit(self):
145168 if self .data .Y .ndim > 1 :
146169 self .Error .multiclass_error ()
147170 else :
148- try :
149- y_pred = self .detect_outliers ()
150- except ValueError :
151- self .Error .singular_cov ()
152- self .in_out_info_label .setText (self .in_out_info_default )
153- else :
154- inliers_ind = np .where (y_pred == 1 )[0 ]
155- outliers_ind = np .where (y_pred == - 1 )[0 ]
156- inliers = self .new_data [inliers_ind ]
157- outliers = self .new_data [outliers_ind ]
158- self .in_out_info_label .setText (
159- "{} inliers, {} outliers" .format (len (inliers ),
160- len (outliers )))
161- self .n_inliers = len (inliers )
162- self .n_outliers = len (outliers )
171+ inliers , outliers = self ._get_outliers ()
163172
164173 self .send ("Inliers" , inliers )
165174 self .send ("Outliers" , outliers )
0 commit comments