def validationDialog(self, parent): """Return the classifier specific (cross-)validation widget.""" if self._cvwidget is None: self._cvwidget = CrossValidationDialog(parent, self) return self._cvwidget
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()
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()
def validationDialog(self, parent): """Return the classifier specific (cross-)validation widget.""" if self._cvwidget is None: self._cvwidget = CrossValidationDialog(parent, self) return self._cvwidget
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()