def main(): import sys import Orange argv = sys.argv if len(argv) > 1: filename = argv[1] else: filename = 'iris' app = QtGui.QApplication(argv) ow = OWPythagorasTree() data = Orange.data.Table(filename) if data.domain.has_discrete_class: from Orange.classification.tree import TreeLearner else: from Orange.regression.tree import TreeLearner model = TreeLearner(max_depth=1000)(data) model.instances = data ow.set_tree(model) ow.show() ow.raise_() ow.handleNewSignals() app.exec_() sys.exit(0)
def main(argv=sys.argv): from AnyQt.QtWidgets import QApplication import Orange app = QApplication(list(argv)) argv = app.arguments() if len(argv) > 1: filename = argv[1] else: filename = 'iris' ow = OWPythagorasTree() data = Orange.data.Table(filename) if data.domain.has_discrete_class: from Orange.classification.tree import TreeLearner else: from Orange.regression.tree import TreeLearner model = TreeLearner(max_depth=1000)(data) model.instances = data ow.set_tree(model) ow.show() ow.raise_() ow.handleNewSignals() app.exec_() sys.exit(0)
def main(): import sys import Orange argv = sys.argv if len(argv) > 1: filename = argv[1] else: filename = 'iris' app = QtGui.QApplication(argv) ow = OWPythagorasTree() data = Orange.data.Table(filename) if data.domain.has_discrete_class: from Orange.classification.tree import TreeLearner model = TreeLearner(max_depth=1000)(data) else: from Orange.regression.tree import TreeRegressionLearner model = TreeRegressionLearner(max_depth=1000)(data) model.instances = data ow.set_tree(model) ow.show() ow.raise_() ow.handleNewSignals() app.exec_() sys.exit(0)
def test_report_widgets_classify(self): rep = OWReport.get_instance() data = Table("titanic") widgets = self.clas_widgets w = self.create_widget(OWTreeGraph) clf = TreeLearner(max_depth=3)(data) clf.instances = data w.ctree(clf) w.create_report_html() rep.make_report(w) self._create_report(widgets, rep, data)
def test_report_widgets_model(self): rep = OWReport.get_instance() data = Table("titanic") widgets = self.model_widgets w = self.create_widget(OWTreeGraph) clf = TreeLearner(max_depth=3)(data) clf.instances = data w.ctree(clf) w.create_report_html() rep.make_report(w) self._create_report(widgets, rep, data)
def test_report_widgets_classify(self): rep = OWReport.get_instance() data = Table("zoo") widgets = self.clas_widgets w = OWClassificationTreeGraph() clf = TreeLearner(max_depth=3)(data) clf.instances = data w.ctree(clf) w.create_report_html() rep.make_report(w) self.assertEqual(len(widgets) + 1, 8) self._create_report(widgets, rep, data)
def set_learner(self): self.learner = TreeLearner( criterion=self.scores[self.attribute_score][1], max_depth=self.max_depth, min_samples_split=self.min_internal, min_samples_leaf=self.min_leaf, preprocessors=self.preprocessors) self.learner.name = self.model_name self.classifier = None if self.data is not None: self.error(1) if not self.learner.check_learner_adequacy(self.data.domain): self.error(1, self.learner.learner_adequacy_err_msg) else: self.classifier = self.learner(self.data) self.classifier.name = self.model_name self.classifier.instances = self.data self.send("Learner", self.learner) self.send("Classification Tree", self.classifier)
def main(): from AnyQt.QtWidgets import QApplication import sys app = QApplication(sys.argv) ow = OWPythagorasTree() data = Table(sys.argv[1] if len(sys.argv) > 1 else 'iris') if data.domain.has_discrete_class: from Orange.classification.tree import SklTreeLearner as TreeLearner else: from Orange.regression.tree import SklTreeRegressionLearner as TreeLearner model = TreeLearner(max_depth=1000)(data) model.instances = data ow.set_tree(model) ow.show() ow.raise_() ow.handleNewSignals() app.exec_()
def set_learner(self): self.learner = TreeLearner( criterion=self.scores[self.attribute_score][1], max_depth=self.max_depth, min_samples_split=self.min_internal, min_samples_leaf=self.min_leaf, preprocessors=self.preprocessors ) self.learner.name = self.model_name self.classifier = None if self.data is not None: self.error(1) if not self.learner.check_learner_adequacy(self.data.domain): self.error(1, self.learner.learner_adequacy_err_msg) else: self.classifier = self.learner(self.data) self.classifier.name = self.model_name self.classifier.instances = self.data self.send("Learner", self.learner) self.send("Classification Tree", self.classifier)
def main(): import sys import Orange from Orange.classification.tree import TreeLearner argv = sys.argv if len(argv) > 1: filename = argv[1] else: filename = 'iris' app = QtGui.QApplication(argv) ow = OWPythagorasTree() data = Orange.data.Table(filename) clf = TreeLearner(max_depth=1000)(data) ow.set_tree(clf) ow.show() ow.raise_() ow.handleNewSignals() app.exec_() sys.exit(0)
def toggle_node_color(self): colors = self.scene.colors for node in self.scene.nodes(): distr = node.get_distribution() total = numpy.sum(distr) if self.target_class_index: p = distr[self.target_class_index - 1] / total color = colors[self.target_class_index - 1].light(200 - 100 * p) else: modus = node.majority() p = distr[modus] / (total or 1) color = colors[int(modus)].light(400 - 300 * p) node.backgroundBrush = QBrush(color) self.scene.update() if __name__ == "__main__": from Orange.classification.tree import TreeLearner a = QApplication(sys.argv) ow = OWClassificationTreeGraph() data = Table("iris") clf = TreeLearner(max_depth=3)(data) clf.instances = data ow.ctree(clf) ow.show() ow.raise_() a.exec_() ow.saveSettings()
class OWClassificationTree(widget.OWWidget): name = "Classification Tree" icon = "icons/ClassificationTree.svg" description = "Classification tree algorithm with forward pruning." priority = 30 inputs = [("Data", Table, "set_data"), ("Preprocessor", Preprocess, "set_preprocessor")] outputs = [ ("Learner", TreeLearner), ("Classification Tree", TreeClassifier) ] want_main_area = False resizing_enabled = False model_name = Setting("Classification Tree") attribute_score = Setting(0) limit_min_leaf = Setting(True) min_leaf = Setting(2) limit_min_internal = Setting(True) min_internal = Setting(5) limit_depth = Setting(True) max_depth = Setting(100) scores = (("Entropy", "entropy"), ("Gini Index", "gini")) def __init__(self): super().__init__() self.data = None self.learner = None self.preprocessors = None self.classifier = None gui.lineEdit(self.controlArea, self, 'model_name', box='Name', tooltip='The name will identify this model in other ' 'widgets') gui.comboBox(self.controlArea, self, "attribute_score", box='Feature selection', items=[name for name, _ in self.scores]) box = gui.widgetBox(self.controlArea, 'Pruning') gui.spin(box, self, "min_leaf", 1, 1000, label="Min. instances in leaves ", checked="limit_min_leaf") gui.spin(box, self, "min_internal", 1, 1000, label="Stop splitting nodes with less instances than ", checked="limit_min_internal") gui.spin(box, self, "max_depth", 1, 1000, label="Limit the depth to ", checked="limit_depth") self.btn_apply = gui.button(self.controlArea, self, "&Apply", callback=self.set_learner, disabled=0, default=True) self.set_learner() def sendReport(self): self.reportSettings( "Model parameters", [("Attribute selection", self.scores[self.attribute_score][0]), ("Pruning", ", ".join(s for s, c in ( ("%i instances in leaves" % self.min_leaf, self.limit_min_leaf), ("%i instance in internal node" % self.min_internal, self.limit_min_internal), ("maximum depth %i" % self.max_depth, self.limit_depth)) if c) or ": None")]) self.reportData(self.data) def set_learner(self): self.learner = TreeLearner( criterion=self.scores[self.attribute_score][1], max_depth=self.max_depth, min_samples_split=self.min_internal, min_samples_leaf=self.min_leaf, preprocessors=self.preprocessors ) self.learner.name = self.model_name self.classifier = None if self.data is not None: self.error(1) if not self.learner.check_learner_adequacy(self.data.domain): self.error(1, self.learner.learner_adequacy_err_msg) else: self.classifier = self.learner(self.data) self.classifier.name = self.model_name self.classifier.instances = self.data self.send("Learner", self.learner) self.send("Classification Tree", self.classifier) @check_sql_input def set_data(self, data): self.error(0) self.data = data if data is not None and data.domain.class_var is None: self.error(0, "Data has no target variable") self.data = None self.set_learner() def set_preprocessor(self, preproc): if preproc is None: self.preprocessors = None else: self.preprocessors = (preproc,) self.set_learner()
class OWClassificationTree(widget.OWWidget): name = "Classification Tree" icon = "icons/ClassificationTree.svg" description = "Classification tree algorithm with forward pruning." priority = 30 inputs = [("Data", Table, "set_data"), ("Preprocessor", Preprocess, "set_preprocessor")] outputs = [("Learner", TreeLearner), ("Classification Tree", TreeClassifier)] want_main_area = False resizing_enabled = False model_name = Setting("Classification Tree") attribute_score = Setting(0) limit_min_leaf = Setting(True) min_leaf = Setting(2) limit_min_internal = Setting(True) min_internal = Setting(5) limit_depth = Setting(True) max_depth = Setting(100) scores = (("Entropy", "entropy"), ("Gini Index", "gini")) def __init__(self): super().__init__() self.data = None self.learner = None self.preprocessors = None self.classifier = None gui.lineEdit(self.controlArea, self, 'model_name', box='Name', tooltip='The name will identify this model in other ' 'widgets') gui.comboBox(self.controlArea, self, "attribute_score", box='Feature selection', items=[name for name, _ in self.scores]) box = gui.widgetBox(self.controlArea, 'Pruning') gui.spin(box, self, "min_leaf", 1, 1000, label="Min. instances in leaves ", checked="limit_min_leaf") gui.spin(box, self, "min_internal", 1, 1000, label="Stop splitting nodes with less instances than ", checked="limit_min_internal") gui.spin(box, self, "max_depth", 1, 1000, label="Limit the depth to ", checked="limit_depth") self.btn_apply = gui.button(self.controlArea, self, "&Apply", callback=self.set_learner, disabled=0, default=True) self.set_learner() def sendReport(self): self.reportSettings( "Model parameters", [("Attribute selection", self.scores[self.attribute_score][0]), ("Pruning", ", ".join(s for s, c in ( ("%i instances in leaves" % self.min_leaf, self.limit_min_leaf), ("%i instance in internal node" % self.min_internal, self.limit_min_internal), ("maximum depth %i" % self.max_depth, self.limit_depth)) if c) or ": None")]) self.reportData(self.data) def set_learner(self): self.learner = TreeLearner( criterion=self.scores[self.attribute_score][1], max_depth=self.max_depth, min_samples_split=self.min_internal, min_samples_leaf=self.min_leaf, preprocessors=self.preprocessors) self.learner.name = self.model_name self.classifier = None if self.data is not None: self.error(1) if not self.learner.check_learner_adequacy(self.data.domain): self.error(1, self.learner.learner_adequacy_err_msg) else: self.classifier = self.learner(self.data) self.classifier.name = self.model_name self.classifier.instances = self.data self.send("Learner", self.learner) self.send("Classification Tree", self.classifier) @check_sql_input def set_data(self, data): self.error(0) self.data = data if data is not None and data.domain.class_var is None: self.error(0, "Data has no target variable") self.data = None self.set_learner() def set_preprocessor(self, preproc): if preproc is None: self.preprocessors = None else: self.preprocessors = (preproc, ) self.set_learner()
def paint(self, painter, option, widget=None): rect = self.rect() if self.isSelected(): option.state ^= QStyle.State_Selected painter.setFont(self.document().defaultFont()) draw_text = str(self.split_condition()) painter.drawText(QPointF(4, -self.line_descent - 1), draw_text) painter.save() painter.setBrush(self.backgroundBrush) if self.isSelected(): painter.setPen(QPen(QBrush(Qt.black), 2)) else: painter.setPen(QPen(Qt.gray)) if self.is_leaf(): painter.drawRect(rect.adjusted(-3, 0, 0, 0)) else: painter.drawRoundedRect(rect.adjusted(-3, 0, 0, 0), 4, 4) painter.restore() painter.setClipRect(rect) return QGraphicsTextItem.paint(self, painter, option, widget) if __name__ == "__main__": from Orange.classification.tree import TreeLearner a = QApplication(sys.argv) ow = OWClassificationTreeGraph() ow.ctree(TreeLearner(max_depth=3)(Table('iris'))) ow.show() a.exec_() ow.saveSettings()