88from Orange .data import Domain , Variable , DiscreteVariable , ContinuousVariable
99from Orange .data .filter import HasClass
1010from Orange .misc .wrapper_meta import WrapperMeta
11+ from Orange .preprocess .fss import RemoveNaNColumns
1112from Orange .preprocess .preprocess import Discretize , SklImpute
1213from Orange .preprocess .util import _RefuseDataInConstructor
1314from Orange .statistics import contingency , distribution
@@ -66,6 +67,7 @@ def __call__(self, data, feature=None):
6667 f = data .domain [feature ]
6768 data = data .transform (Domain ([f ], data .domain .class_vars ))
6869
70+ orig_domain = data .domain
6971 for pp in self .preprocessors :
7072 data = pp (data )
7173
@@ -76,7 +78,11 @@ def __call__(self, data, feature=None):
7678 .format (self .friendly_name ,
7779 self ._friendly_vartype_name (type (var ))))
7880
79- return self .score_data (data , feature )
81+ scores = np .full (len (orig_domain .attributes ), np .nan )
82+ names = [a .name for a in data .domain .attributes ]
83+ mask = np .array ([a .name in names for a in orig_domain .attributes ])
84+ scores [mask ] = self .score_data (data , feature )
85+ return scores
8086
8187 def score_data (self , data , feature ):
8288 raise NotImplementedError
@@ -340,6 +346,7 @@ class ReliefF(Scorer):
340346 class_type = DiscreteVariable
341347 supports_sparse_data = False
342348 friendly_name = "ReliefF"
349+ preprocessors = Scorer .preprocessors + [RemoveNaNColumns ()]
343350
344351 def __init__ (self , n_iterations = 50 , k_nearest = 10 , random_state = None ):
345352 self .n_iterations = n_iterations
@@ -374,6 +381,7 @@ class RReliefF(Scorer):
374381 class_type = ContinuousVariable
375382 supports_sparse_data = False
376383 friendly_name = "RReliefF"
384+ preprocessors = Scorer .preprocessors + [RemoveNaNColumns ()]
377385
378386 def __init__ (self , n_iterations = 50 , k_nearest = 50 , random_state = None ):
379387 self .n_iterations = n_iterations
0 commit comments