Example #1
0
    def validationDialog(self, parent):
        """Return the classifier specific (cross-)validation widget."""

        if self._cvwidget is None:
            self._cvwidget = CrossValidationDialog(parent, self)
        return self._cvwidget
Example #2
0
class Svc(Classifier):

    KERNEL = "rbf"
    name = "Support Vector Classifier"

    def __init__(self, *args, **kw):
        super(Svc, self).__init__(*args, **kw)
        self._pp = None
        self._cvwidget = None
        self._pwidget = None
        self._clf = sklearn.svm.SVC(C=1.0,
                                    kernel=self.KERNEL,
                                    gamma=0.0,
                                    probability=True)

    def parameterWidget(self, parent):
        """Returns the classifier specific parameter widget."""
        if self._pwidget is None:
            self._pwidget = SvcParameterWidget(parent)
        return self._pwidget

    def validationDialog(self, parent):
        """Return the classifier specific (cross-)validation widget."""

        if self._cvwidget is None:
            self._cvwidget = CrossValidationDialog(parent, self)
        return self._cvwidget

    def description(self):
        if self._cvwidget is None:
            return ""
        else:
            return self._cvwidget.text()

    def train(self, features, labels):
        self.setupPreProcessor(features)
        self._clf.fit(self._pp(features), labels)

    def predict(self, features):

        if self._clf is None:
            return super(Svc, self).predict(features)
        else:
            features = self._pp(features)
            proba = self._clf.predict_proba(features)

            # turn indices into class labels, asumeing ascending order
            predictions = [
                self._classes.keys()[i] for i in np.argmax(proba, axis=1)
            ]

            classes = [self.classes[pred].clone() for pred in predictions]

            for c, p in zip(classes, proba):
                c.score = dict(
                    ((k, v) for k, v in zip(self.classes.keys(), p)))

        return classes

    def saveToHdf(self,
                  name,
                  file_,
                  feature_selection,
                  description,
                  overwrite=False,
                  labels=None,
                  sample_info=None):

        if self._cvwidget is None:
            raise HdfError(("You need to validate the classifier first\n"
                            "Open the Cross validation dialog"))

        writer = SvcWriter(name, file_, description, overwrite)
        writer.saveTrainingSet(self._pp.data, feature_selection.values())
        writer.saveAnnotations(labels)
        writer.saveClassDef(self.classes, self._clf.get_params())
        writer.saveNormalization(self._pp)
        writer.saveConfusionMatrix(self._cvwidget.confusion_matrix)
        writer.saveSampleInfo(sample_info)
        writer.flush()
Example #3
0
File: svc.py Project: rhoef/afw
class Svc(Classifier):

    KERNEL = "rbf"
    name = "Support Vector Classifier"

    def __init__(self, *args, **kw):
        super(Svc, self).__init__(*args, **kw)
        self._pp = None
        self._cvwidget = None
        self._pwidget = None
        self._clf = sklearn.svm.SVC(C=1.0, kernel=self.KERNEL, gamma=0.0,
                                    probability=True)

    def parameterWidget(self, parent=None):
        """Returns the classifier specific parameter widget."""
        if self._pwidget is None:
            self._pwidget = SvcParameterWidget(parent)
        return self._pwidget

    def validationDialog(self, parent):
        """Return the classifier specific (cross-)validation widget."""

        if self._cvwidget is None:
            self._cvwidget = CrossValidationDialog(parent, self)
        return self._cvwidget

    def description(self):
        if self._cvwidget is None:
            return ""
        else:
            return self._cvwidget.text()

    def checkParameters(self, parent):
        """Pop up a dialog and ask the user wether to proceed with current
        unoptimized parameters, run cross validation or cancel.
        """

        title = "Grid search & Cross Validation"
        text = "You need to run Grid Search & Cross Validation before you predict"

        QApplication.restoreOverrideCursor()

        qmb = QMessageBox(QMessageBox.Question, title, text, parent=parent)
        ignoreBtn = qmb.addButton(qmb.Ignore)
        cancelBtn = qmb.addButton(qmb.Cancel)
        runBtn = qmb.addButton(
            "Run Grid Search", qmb.AcceptRole)
        qmb.exec_()

        QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))

        if qmb.clickedButton() == runBtn:
            # parent sets some flag
            parent.validateClassifier()
            return True
        elif qmb.clickedButton() == ignoreBtn:
            return True
        elif qmb.clickedButton() == cancelBtn:
            return False

        raise RuntimeError()

    def train(self, features, labels):
        self.setupPreProcessor(features)
        self._clf.fit(self._pp(features), labels)

    def predict(self, features, dummy=None):

        if self._clf is None:
            return super(Svc, self).predict(features)
        else:
            features = self._pp(features)
            proba = self._clf.predict_proba(features)

            # turn indices into class labels, asumeing ascending order
            predictions = [self._classes.keys()[i]
                           for i in  np.argmax(proba, axis=1)]

            classes = [self.classes[pred].clone() for pred in predictions]

            for c, p in zip(classes, proba):
                c.score = dict(
                    ((k, v) for k, v in zip(self.classes.keys(), p)))

        return classes

    def saveToHdf(self, name, file_, feature_selection, description,
                  overwrite=False, labels=None, sample_info=None):

        if self._cvwidget is None:
            raise HdfError(("You need to validate the classifier first\n"
                            "Open the Cross validation dialog"))

        writer = SvcWriter(name, file_, description, overwrite)
        writer.saveTrainingSet(self._pp.data, feature_selection.values())
        writer.saveAnnotations(labels)
        writer.saveClassDef(self.classes, self._clf.get_params())
        writer.saveNormalization(self._pp)
        writer.saveConfusionMatrix(self._cvwidget.confusion_matrix)
        writer.saveSampleInfo(sample_info)
        writer.flush()
Example #4
0
File: svc.py Project: rhoef/afw
    def validationDialog(self, parent):
        """Return the classifier specific (cross-)validation widget."""

        if self._cvwidget is None:
            self._cvwidget = CrossValidationDialog(parent, self)
        return self._cvwidget
Example #5
0
class Svc(Classifier):

    KERNEL = "rbf"
    name = "Support Vector Classifier"

    def __init__(self, *args, **kw):
        super(Svc, self).__init__(*args, **kw)
        self._pp = None
        self._cvwidget = None
        self._pwidget = None
        self._clf = sklearn.svm.SVC(C=1.0, kernel=self.KERNEL, gamma=0.0,
                                    probability=True)

    def parameterWidget(self, parent):
        """Returns the classifier specific parameter widget."""
        if self._pwidget is None:
            self._pwidget = SvcParameterWidget(parent)
        return self._pwidget

    def validationDialog(self, parent):
        """Return the classifier specific (cross-)validation widget."""

        if self._cvwidget is None:
            self._cvwidget = CrossValidationDialog(parent, self)
        return self._cvwidget

    def description(self):
        if self._cvwidget is None:
            return ""
        else:
            return self._cvwidget.text()

    def train(self, features, labels):
        self.setupPreProcessor(features)
        self._clf.fit(self._pp(features), labels)

    def predict(self, features):

        if self._clf is None:
            return super(Svc, self).predict(features)
        else:
            features = self._pp(features)
            proba = self._clf.predict_proba(features)

            # turn indices into class labels, asumeing ascending order
            predictions = [self._classes.keys()[i]
                           for i in  np.argmax(proba, axis=1)]

            classes = [self.classes[pred].clone() for pred in predictions]

            for c, p in zip(classes, proba):
                c.score = dict(
                    ((k, v) for k, v in zip(self.classes.keys(), p)))

        return classes

    def saveToHdf(self, name, file_, feature_selection, description,
                  overwrite=False, labels=None, sample_info=None):

        if self._cvwidget is None:
            raise HdfError(("You need to validate the classifier first\n"
                            "Open the Cross validation dialog"))

        writer = SvcWriter(name, file_, description, overwrite)
        writer.saveTrainingSet(self._pp.data, feature_selection.values())
        writer.saveAnnotations(labels)
        writer.saveClassDef(self.classes, self._clf.get_params())
        writer.saveNormalization(self._pp)
        writer.saveConfusionMatrix(self._cvwidget.confusion_matrix)
        writer.saveSampleInfo(sample_info)
        writer.flush()