Skip to content

Commit 722b3a6

Browse files
committed
Quick fix (namespace, nanmax, vspace).
1 parent b1ffa28 commit 722b3a6

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

Orange/classification/rules.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import numpy as np
77
from scipy.stats import chisqprob
8+
import bottlechest as bn
89
import Orange
910
from Orange.classification import Learner, Model
1011

@@ -48,7 +49,8 @@ def argmaxrnd(a, random_seed=None):
4849
random = (np.random if random_seed is None
4950
else np.random.RandomState(random_seed))
5051

51-
def f(x): return random.choice((x == np.nanmax(x)).nonzero()[0])
52+
def f(x): return random.choice((x == bn.nanmax(x)).nonzero()[0])
53+
5254
return f(a) if a.ndim == 1 else np.apply_along_axis(f, axis=1, arr=a)
5355

5456

@@ -727,21 +729,24 @@ def __init__(self, preprocessors=None, base_rules=None):
727729

728730
@abstractmethod
729731
def fit(self, X, Y, W=None):
732+
row_defined = ~np.isnan(X).any(axis=1)
733+
X = X[row_defined]
734+
Y = Y[row_defined]
730735
rule_list = self.find_rules(X, Y, None, self.base_rules, self.domain)
731736
return RuleClassifier(domain=self.domain, rule_list=rule_list)
732737

733738
def find_rules(self, X, Y, target_class, base_rules, domain):
734739
rule_list = []
735740
while not self.data_stopping(X, Y, target_class):
736741
new_rule = self.rule_finder(X, Y, target_class, base_rules, domain)
737-
if self.rule_stopping(X, Y, new_rule):
742+
if self.rule_stopping(new_rule):
738743
break
739744
X, Y = self.cover_and_remove(X, Y, new_rule)
740745
rule_list.append(new_rule)
741746
return rule_list
742747

743748
@staticmethod
744-
def rule_stopping(X, Y, new_rule):
749+
def rule_stopping(new_rule, alpha=1.0):
745750
return False
746751

747752
@staticmethod
@@ -793,6 +798,7 @@ class CN2Learner(RuleLearner):
793798
.. [1] "The CN2 Induction Algorithm", Peter Clark and Tim Niblett,
794799
Machine Learning Journal, 3 (4), pp261-283, (1989)
795800
"""
801+
name = 'CN2 inducer'
796802

797803
def __init__(self, preprocessors=None, base_rules=None):
798804
super().__init__(preprocessors, base_rules)
@@ -849,6 +855,8 @@ class CN2UnorderedLearner(RuleLearner):
849855
Clark and Robin Boswell, Machine Learning - Proceedings of
850856
the 5th European Conference (EWSL-91), pp151-163, 1991
851857
"""
858+
name = 'CN2 Unordered inducer'
859+
852860
def __init__(self, preprocessors=None, base_rules=None):
853861
super().__init__(preprocessors, base_rules)
854862
self.rule_finder.search_algorithm.beam_width = 10
@@ -924,13 +932,14 @@ def main():
924932
classifier = learner(data)
925933
for rule in classifier.rule_list:
926934
print(rule.curr_class_dist.tolist(), rule)
935+
print(len(classifier.rule_list))
927936

928937
print()
929938

930-
learner = CN2UnorderedLearner()
931-
classifier = learner(data)
932-
for rule in classifier.rule_list:
933-
print(rule, rule.curr_class_dist.tolist())
939+
# learner = CN2UnorderedLearner()
940+
# classifier = learner(data)
941+
# for rule in classifier.rule_list:
942+
# print(rule, rule.curr_class_dist.tolist())
934943

935944
if __name__ == "__main__":
936945
main()

0 commit comments

Comments
 (0)