Пример #1
0
 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)
Пример #2
0
 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)
Пример #3
0
    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)
Пример #4
0
    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()
Пример #5
0
    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()
Пример #6
0
    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)
Пример #7
0
    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
Пример #8
0
 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
Пример #9
0
 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