示例#1
0
 def test_predict_table(self):
     forest = RandomForestLearner()
     c = forest(self.iris)
     c(self.iris)
     vals, probs = c(self.iris, c.ValueProbs)
示例#2
0
 def test_predict_numpy(self):
     forest = RandomForestLearner()
     c = forest(self.iris)
     c(self.iris.X)
     vals, probs = c(self.iris.X, c.ValueProbs)
示例#3
0
 def test_RandomForest(self):
     forest = RandomForestLearner()
     results = CrossValidation(self.iris, [forest], k=10)
     ca = CA(results)
     self.assertGreater(ca, 0.9)
     self.assertLess(ca, 0.99)
示例#4
0
 def test_predict_single_instance(self):
     forest = RandomForestLearner()
     c = forest(self.iris)
     for ins in self.iris:
         c(ins)
         val, prob = c(ins, c.ValueProbs)
示例#5
0
 def test_unique_output_domain(self):
     data = possible_duplicate_table('random forest')
     self.send_signal(self.widget.Inputs.train_data, data)
     self.send_signal(self.widget.Inputs.learner, RandomForestLearner(), 0)
     output = self.get_output(self.widget.Outputs.predictions)
     self.assertEqual(output.domain.metas[0].name, 'random forest (1)')
        self.Outputs.scores.send(scores)

    def send_report(self):
        if not self.data or not self.background_data or not self.model:
            return
        items = {"Target class": "None"}
        if self.model.domain.has_discrete_class:
            class_var = self.model.domain.class_var
            items["Target class"] = class_var.values[self.target_index]
        self.report_items(items)
        self.report_plot()

    def set_visual_settings(self, key: Tuple[str, str, str], value: Any):
        self.visual_settings[key] = value
        self.graph.parameter_setter.set_parameter(key, value)


if __name__ == "__main__":
    from Orange.classification import RandomForestLearner
    from Orange.regression import RandomForestRegressionLearner

    table = Table("housing")
    kwargs = {"n_estimators": 10, "random_state": 0}
    if table.domain.has_continuous_class:
        model_ = RandomForestRegressionLearner(**kwargs)(table)
    else:
        model_ = RandomForestLearner(**kwargs)(table)
    WidgetPreview(OWExplainPredictions).run(
        set_background_data=table, set_data=table[:50], set_model=model_
    )
示例#7
0
 def test_predict_numpy(self):
     table = Table('iris')
     forest = RandomForestLearner()
     c = forest(table)
     c(table.X)
     vals, probs = c(table.X, c.ValueProbs)
示例#8
0
                headerState = headerState[0]

            if isinstance(headerState, bytes):
                hview = QHeaderView(Qt.Horizontal)
                hview.restoreState(headerState)
                column, order = hview.sortIndicatorSection() - 1, hview.sortIndicatorOrder()
            settings["sorting"] = (column, order)

    @classmethod
    def migrate_context(cls, context, version):
        if version is None or version < 3:
            # Selections were stored as indices, so these contexts matched
            # any domain. The only safe thing to do is to remove them.
            raise IncompatibleContext


if __name__ == "__main__":  # pragma: no cover
    from Orange.classification import RandomForestLearner
    previewer = WidgetPreview(OWRank)
    previewer.run(Table("heart_disease.tab"), no_exit=True)
    previewer.send_signals(
        set_learner=(RandomForestLearner(), (3, 'Learner', None)))
    previewer.run()

    # pylint: disable=pointless-string-statement
    """
    WidgetPreview(OWRank).run(
        set_learner=(RandomForestLearner(), (3, 'Learner', None)),
        set_data=Table("heart_disease.tab"))
    """
示例#9
0
 def test_check_model_cls_true(self):
     data = self.heart
     model = RandomForestLearner(random_state=0)(data)
     self.assertTrue(_check_model(model, data))
示例#10
0
 def test_check_model_cls_false(self):
     data = self.iris
     model = RandomForestLearner(random_state=0)(data)
     self.assertFalse(_check_model(model, data))
示例#11
0
 def test_inadequate_model(self):
     model = RandomForestLearner()(self.iris)
     args = model, self.housing, self.n_repeats
     self.assertRaises(ValueError, permutation_feature_importance, *args)
示例#12
0
 def test_inadequate_data(self):
     model = RandomForestLearner()(self.iris)
     args = model, self.titanic, self.n_repeats
     self.assertRaises(DomainTransformationError,
                       permutation_feature_importance, *args)
示例#13
0
 def test_auc_missing_values(self):
     data = self.heart
     model = RandomForestLearner(random_state=0)(data)
     res = permutation_feature_importance(model, data, AUC(),
                                          self.n_repeats)
     self.assertAlmostEqual(res[0].mean(), 0.013, 3)
示例#14
0
from Orange.data import Domain, Table
from Orange.classification import LogisticRegressionLearner
from Orange.classification import NaiveBayesLearner
from Orange.classification import TreeLearner
from Orange.classification import RandomForestLearner
from Orange.classification import KNNLearner
from Orange.classification import SVMLearner

### create models ###

models = [
    LogisticRegressionLearner(),
    NaiveBayesLearner(),
    TreeLearner(),
    RandomForestLearner(),
    KNNLearner(),
    SVMLearner(),
]

### read train data ###

train = Table.from_file('train.csv')
# move `sex` from X to Y (from attributes/features to class_var/target)
domain = Domain(train.domain.attributes[1:], train.domain.attributes[0])
train = train.transform(domain)

print('\n=== train.X ===')
print(train.X)
print('\n=== train.Y ===')
print(train.Y)
        self.shutdown()
        super().onDeleteWidget()

    def sizeHint(self) -> QSizeF:
        sh = self.controlArea.sizeHint()
        return sh.expandedTo(QSize(700, 700))

    def send_report(self):
        if not self.data or not self.background_data or not self.model:
            return
        items = {"Target class": "None"}
        if self.model.domain.has_discrete_class:
            class_var = self.model.domain.class_var
            items["Target class"] = class_var.values[self.target_index]
        self.report_items(items)
        self.report_plot()


if __name__ == "__main__":  # pragma: no cover
    from Orange.classification import RandomForestLearner
    from Orange.regression import RandomForestRegressionLearner

    table = Table("heart_disease")
    if table.domain.has_continuous_class:
        rf_model = RandomForestRegressionLearner(random_state=42)(table)
    else:
        rf_model = RandomForestLearner(random_state=42)(table)
    WidgetPreview(OWExplainPrediction).run(set_background_data=table,
                                           set_data=table[:1],
                                           set_model=rf_model)
    def test_init_learner(self):
        """
        Test init
        """
        w = self.widget

        learner = TreeLearner()

        # check if empty
        self.assertTrue(isinstance(w.learner, LogisticRegressionLearner))
        self.assertTrue(isinstance(w.learner, w.LEARNER))
        self.assertTrue(
            reduce(lambda x, y: x or isinstance(y, w.default_preprocessor),
                   w.learner.preprocessors, False))

        self.send_signal(w.Inputs.learner, learner)

        # check if learners set correctly
        self.assertEqual(type(w.learner), type(learner))

        # after learner is removed there should be LEARNER used
        self.send_signal(w.Inputs.learner, None)
        self.assertTrue(isinstance(w.learner, LogisticRegressionLearner))
        self.assertTrue(isinstance(w.learner, w.LEARNER))
        self.assertTrue(
            reduce(lambda x, y: x or isinstance(y, w.default_preprocessor),
                   w.learner.preprocessors, False))

        # set it again just in case something goes wrong
        learner = RandomForestLearner()
        self.send_signal(w.Inputs.learner, learner)

        self.assertEqual(type(w.learner), type(learner))
        self.assertTrue(
            reduce(lambda x, y: x or isinstance(y, w.default_preprocessor),
                   w.learner.preprocessors, False))

        # change learner this time not from None
        learner = TreeLearner()
        self.send_signal(w.Inputs.learner, learner)

        self.assertEqual(type(w.learner), type(learner))
        self.assertTrue(
            reduce(lambda x, y: x or isinstance(y, w.default_preprocessor),
                   w.learner.preprocessors, False))

        # set other preprocessor
        preprocessor = Discretize
        # selected this preprocessor because know that not exist in LogReg
        self.send_signal(w.Inputs.preprocessor, preprocessor())

        self.assertEqual(type(w.learner), type(learner))
        self.assertTrue(
            reduce(lambda x, y: x or isinstance(y, w.default_preprocessor),
                   w.learner.preprocessors, False))
        self.assertTrue(
            reduce(lambda x, y: x or isinstance(y, preprocessor),
                   w.learner.preprocessors, False))

        # remove preprocessor
        self.send_signal(w.Inputs.preprocessor, None)
        self.assertEqual(type(w.learner), type(learner))
        self.assertTrue(
            reduce(lambda x, y: x or isinstance(y, w.default_preprocessor),
                   w.learner.preprocessors, False))

        self.assertFalse(
            reduce(lambda x, y: x or isinstance(y, preprocessor),
                   w.learner.preprocessors, False))
示例#17
0
            if isinstance(headerState, bytes):
                hview = QHeaderView(Qt.Horizontal)
                hview.restoreState(headerState)
                column, order = (
                    hview.sortIndicatorSection() - 1,
                    hview.sortIndicatorOrder(),
                )
            settings["sorting"] = (column, order)

    @classmethod
    def migrate_context(cls, context, version):
        if version is None or version < 2:
            # Old selection was saved as sorted indices. New selection is original indices.
            # Since we can't devise the latter without first computing the ranks,
            # just reset the selection to avoid confusion.
            context.values["selected_rows"] = []


if __name__ == "__main__":
    from AnyQt.QtWidgets import QApplication
    from Orange.classification import RandomForestLearner

    a = QApplication([])
    ow = OWRank()
    ow.set_learner(RandomForestLearner(), (3, "Learner", None))
    ow.setData(Table("heart_disease.tab"))
    ow.show()
    a.exec_()
    ow.saveSettings()
示例#18
0
def init_learner(learner: Type[Learner], table: Table) -> Learner:
    if learner in (CalibratedLearner, ThresholdLearner):
        return CalibratedLearner(RandomForestLearner())
    return init_reg_learner(learner, table)
示例#19
0
    return (np.arange(shap_values.shape[0]), pos_data, neg_data, pos_labels,
            neg_labels)


if __name__ == "__main__":
    import matplotlib.pyplot as plt
    from Orange.classification import RandomForestLearner
    from Orange.regression import RandomForestRegressionLearner

    table = Table("housing")
    if table.domain.has_continuous_class:
        model_ = RandomForestRegressionLearner(n_estimators=10,
                                               random_state=0)(table)
    else:
        model_ = RandomForestLearner(n_estimators=10, random_state=0)(table)

    shap_values_, transformed_, _, base_value_ = \
        compute_shap_values(model_, table[:50], table)

    idxs = get_instance_ordering(shap_values_[0], None, transformed_,
                                 SIMILARITY_ORDER)

    x_data_, pos_data_, neg_data_, pos_labels_, neg_labels_ = \
        prepare_force_plot_data_multi_inst(
            shap_values_[0][idxs], base_value_[0], transformed_.domain
        )

    for y1, y2 in pos_data_:
        color = tuple(np.array(RGB_HIGH) / 255)
        light_color = tuple(
示例#20
0
            if isinstance(headerState, bytes):
                hview = QHeaderView(Qt.Horizontal)
                hview.restoreState(headerState)
                column, order = hview.sortIndicatorSection(
                ) - 1, hview.sortIndicatorOrder()
            settings["sorting"] = (column, order)

    @classmethod
    def migrate_context(cls, context, version):
        if version is None or version < 3:
            # Selections were stored as indices, so these contexts matched
            # any domain. The only safe thing to do is to remove them.
            raise IncompatibleContext


if __name__ == "__main__":  # pragma: no cover
    from Orange.classification import RandomForestLearner
    previewer = WidgetPreview(OWRank)
    previewer.run(Table("heart_disease.tab"), no_exit=True)
    previewer.send_signals(set_learner=(RandomForestLearner(), (3, 'Learner',
                                                                None)))
    previewer.run()

    # pylint: disable=pointless-string-statement
    """
    WidgetPreview(OWRank).run(
        set_learner=(RandomForestLearner(), (3, 'Learner', None)),
        set_data=Table("heart_disease.tab"))
"""
示例#21
0
 def test_predict_table(self):
     table = Orange.data.Table('iris')
     forest = RandomForestLearner()
     c = forest(table)
     c(table)
     vals, probs = c(table, c.ValueProbs)