def __init__(self, sensitivity_analyzer, split_by_labels, select_common_features=True, probability_label=None, probability_combiner=None, selector=FractionTailSelector(0.05), **kwargs): ''' Parameters ---------- sensitivity_analyzer: FeaturewiseMeasure Sensitivity analyzer to come up with sensitivity. split_by_labels: str or list of str Sample labels on which input datasets are split before data is selected. select_common_features: bool True means that the same features are selected after the split. probablity_label: None or str If None, then the output dataset ds from the sensitivity_analyzer is taken to select the samples. If not None it takes ds.sa['probablity_label']. For example if sensitivity_analyzer=OneWayAnova then probablity_label='fprob' is a sensible value. probability_combiner: function If select_common_features is True, then this function is applied to the feature scores across splits. If None, it uses lambda x:np.sum(-np.log(x)) which is sensible if the scores are probability values selector: Selector function that returns the indices to keep. ''' SliceMapper.__init__(self, None, **kwargs) if probability_combiner is None: def f(x): y = -np.log(x.ravel()) # address potential NaNs # set to max value in y m = np.isnan(y) if np.all(m): return 0 # p=1 y[m] = np.max(y[np.logical_not(m)]) return np.sum(y) probability_combiner = f # avoid lambda as h5py doesn't like it self._sensitivity_analyzer = sensitivity_analyzer self._split_by_labels = split_by_labels self._select_common_features = select_common_features self._probability_label = probability_label self._probability_combiner = probability_combiner self._selector = selector
def __init__(self, filler=0, **kwargs): """ Parameters ---------- filler : optional Value to fill empty entries upon reverse operation """ # init slicearg with None SliceMapper.__init__(self, None, **kwargs) self._dshape = None self._oshape = None self.filler = filler