def compute_score(self, state): attrs = [self.attrs[i] for i in state] domain = Domain(attributes=attrs, class_vars=[self.attr_color]) data = self.data.transform(domain) radviz_xy, _, mask = radviz(data, attrs) y = data.Y[mask] return -self._evaluate_projection(radviz_xy, y)
def manual_move(self): self.__replot_requested = False if self.plotdata.rand is not None: rand = self.plotdata.rand valid_mask = self.plotdata.valid_mask data = self.data[valid_mask] selection = self._selection[valid_mask] selection = selection[rand] ec, _, valid_mask = radviz( data, list(self.model_selected), self.plotdata.points ) assert sum(valid_mask) == len(data) data = data[rand] ec = ec[rand] data_x = data.X data_y = data.Y data_metas = data.metas else: self.prepare_radviz_data(list(self.model_selected)) ec = self.plotdata.embedding_coords valid_mask = self.plotdata.valid_mask data_x = self.data.X[valid_mask] data_y = self.data.Y[valid_mask] data_metas = self.data.metas[valid_mask] selection = self._selection[valid_mask] attributes = (self.variable_x, self.variable_y) + self.data.domain.attributes domain = Domain( attributes=attributes, class_vars=self.data.domain.class_vars, metas=self.data.domain.metas, ) data = Table.from_numpy( domain, X=np.hstack((ec, data_x)), Y=data_y, metas=data_metas ) self.graph.new_data(data, None) self.graph.selection = selection self.graph.update_data(self.variable_x, self.variable_y, reset_view=True) self.graph.plot_widget.addItem(self._circle) self.graph.scatterplot_points = ScatterPlotItem( x=self.plotdata.points[:, 0], y=self.plotdata.points[:, 1] ) self._update_points_labels() self.graph.plot_widget.addItem(self.graph.scatterplot_points)
def setup_plot(self): if self.data is None: return self.__replot_requested = False self.clear_messages() if len(self.model_selected) < 2: self.Warning.no_features() self.graph.clear() return r = radviz(self.data, self.model_selected) self._embedding_coords = r[0] self.graph.set_points(r[1]) self.valid_data = r[2] if self._embedding_coords is None or \ np.any(np.isnan(self._embedding_coords)): self.Warning.invalid_embedding() self.graph.reset_graph()
def _manual_move(self): self.__replot_requested = False res = radviz(self.data, self.model_selected, self.graph.get_points()) self._embedding_coords = res[0] if self._rand_indices is not None: # save widget state selection = self.graph.selection valid_data = self.valid_data.copy() data = self.data.copy() ec = self._embedding_coords.copy() # plot subset self.__plot_random_subset(selection) # restore widget state self.graph.selection = selection self.valid_data = valid_data self.data = data self._embedding_coords = ec else: self.graph.update_coordinates()
def manual_move(self): self.__replot_requested = False if self.plotdata.rand is not None: rand = self.plotdata.rand valid_mask = self.plotdata.valid_mask data = self.data[valid_mask] selection = self._selection[valid_mask] selection = selection[rand] ec, _, valid_mask = radviz(data, list(self.model_selected), self.plotdata.points) assert sum(valid_mask) == len(data) data = data[rand] ec = ec[rand] data_x = data.X data_y = data.Y data_metas = data.metas else: self.prepare_radviz_data(list(self.model_selected)) ec = self.plotdata.embedding_coords valid_mask = self.plotdata.valid_mask data_x = self.data.X[valid_mask] data_y = self.data.Y[valid_mask] data_metas = self.data.metas[valid_mask] selection = self._selection[valid_mask] attributes = (self.variable_x, self.variable_y) + self.data.domain.attributes domain = Domain(attributes=attributes, class_vars=self.data.domain.class_vars, metas=self.data.domain.metas) data = Table.from_numpy(domain, X=np.hstack((ec, data_x)), Y=data_y, metas=data_metas) self.graph.new_data(data, None) self.graph.selection = selection self.graph.update_data(self.variable_x, self.variable_y, reset_view=True) self.graph.plot_widget.addItem(self._circle) self.graph.scatterplot_points = ScatterPlotItem( x=self.plotdata.points[:, 0], y=self.plotdata.points[:, 1]) self._update_points_labels() self.graph.plot_widget.addItem(self.graph.scatterplot_points)
def get_embedding(self): self.valid_data = None if self.data is None: return None self.Warning.no_features.clear() if len(self.model_selected) < 2: self.Warning.no_features() return None ec, proj, msk = radviz(self.data, self.model_selected, self.projection) angle = np.arctan2(*proj.T[::-1]) self.projection = np.vstack((np.cos(angle), np.sin(angle))).T self.valid_data = msk self.Warning.invalid_embedding.clear() if ec is None or np.any(np.isnan(ec)): self.Warning.invalid_embedding() return None embedding = np.full((len(self.data), 2), np.nan) embedding[self.valid_data] = ec return embedding
def prepare_radviz_data(self, variables): ec, points, valid_mask = radviz(self.data, variables, self.plotdata.points) self.plotdata.embedding_coords = ec self.plotdata.points = points self.plotdata.valid_mask = valid_mask