Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
assert _names(clf, feature_names=['a', 'b']) == {'a', 'b', ''}
assert _names(clf, feature_names=['a', 'b'],
bias_name='bias') == {'a', 'b', 'bias'}
assert _names(clf, feature_names=np.array(['a', 'b'])) == {'a', 'b', ''}
assert _names(clf, feature_names=FeatureNames(['a', 'b'])) == {'a', 'b', ''}
assert _names(clf, feature_names=FeatureNames(
n_features=2, unkn_template='F%d')) == {'F0', 'F1', ''}
with pytest.raises(ValueError):
get_feature_names(clf, feature_names=['a'])
with pytest.raises(ValueError):
get_feature_names(clf, feature_names=['a', 'b', 'c'])
with pytest.raises(ValueError):
get_feature_names(clf, feature_names=FeatureNames(['a', 'b', 'c']))
clf2 = LogisticRegression(fit_intercept=False)
clf2.fit(X, y)
assert _names(clf2, vec) == {'hello', 'world'}
assert _names(clf2, feature_names=['hello', 'world']) == {'hello', 'world'}
# type: (bool, bool) -> FeatureNames
self.recalculate_attributes()
# lists of names with signs of known features
column_ids, term_names, term_signs = self._get_collision_info()
feature_names = {}
for col_id, names, signs in zip(column_ids, term_names, term_signs):
if always_positive:
feature_names[col_id] = [{'name': name, 'sign': 1}
for name in names]
else:
if not always_signed and _invert_signs(signs):
signs = [-sign for sign in signs]
feature_names[col_id] = [{'name': name, 'sign': sign}
for name, sign in zip(names, signs)]
return FeatureNames(
feature_names,
n_features=self.n_features,
unkn_template=self.unkn_template)
if feature_names.n_features != num_features:
raise ValueError("feature_names has a wrong n_features: "
"expected=%d, got=%d" % (num_features,
feature_names.n_features))
# Make a shallow copy setting proper bias_name
return FeatureNames(
feature_names.feature_names,
n_features=num_features,
bias_name=bias_name,
unkn_template=feature_names.unkn_template)
else:
if len(feature_names) != num_features:
raise ValueError("feature_names has a wrong length: "
"expected=%d, got=%d" % (num_features,
len(feature_names)))
return FeatureNames(feature_names, bias_name=bias_name)
targets=None,
feature_re=None,
feature_filter=None):
""" Explain sklearn_crfsuite.CRF weights.
See :func:`eli5.explain_weights` for description of
``top``, ``target_names``, ``targets``,
``feature_re`` and ``feature_filter`` parameters.
"""
feature_names = np.array(crf.attributes_)
state_coef = crf_state_coef(crf).todense().A
transition_coef = crf_transition_coef(crf)
if feature_filter is not None or feature_re is not None:
state_feature_names, flt_indices = (
FeatureNames(feature_names).handle_filter(feature_filter, feature_re))
state_feature_names = np.array(state_feature_names.feature_names)
state_coef = state_coef[:, flt_indices]
else:
state_feature_names = feature_names
def _features(label_id):
return get_top_features(state_feature_names, state_coef[label_id], top)
if targets is None:
targets = sorted_for_ner(crf.classes_)
display_names = get_target_display_names(crf.classes_, target_names,
targets)
indices, names = zip(*display_names)
transition_coef = filter_transition_coefs(transition_coef, indices)
"""
if not has_intercept(clf):
bias_name = None
if feature_names is None:
if vec and hasattr(vec, 'get_feature_names'):
return FeatureNames(vec.get_feature_names(), bias_name=bias_name)
else:
if estimator_feature_names is None:
num_features = num_features or get_num_features(clf)
return FeatureNames(
n_features=num_features,
unkn_template='x%d',
bias_name=bias_name
)
return FeatureNames(estimator_feature_names, bias_name=bias_name)
num_features = num_features or get_num_features(clf)
if isinstance(feature_names, FeatureNames):
if feature_names.n_features != num_features:
raise ValueError("feature_names has a wrong n_features: "
"expected=%d, got=%d" % (num_features,
feature_names.n_features))
# Make a shallow copy setting proper bias_name
return FeatureNames(
feature_names.feature_names,
n_features=num_features,
bias_name=bias_name,
unkn_template=feature_names.unkn_template)
else:
if len(feature_names) != num_features:
raise ValueError("feature_names has a wrong length: "
flt = lambda nm, i: feature_filter(nm, x[i]) # type: ignore
else:
flt = lambda nm, i: feature_filter(nm)
for idx, name in indexed_names:
if any(flt(nm, idx) for nm in _all_feature_names(name)):
indices.append(idx)
filtered_feature_names.append(name)
if self.has_bias and flt(self.bias_name, self.bias_idx):
assert self.bias_idx is not None # for mypy
bias_name = self.bias_name
indices.append(self.bias_idx)
else:
bias_name = None
return (
FeatureNames(
filtered_feature_names,
bias_name=bias_name,
unkn_template=self.unkn_template,
),
indices)
num_features = num_features or get_num_features(clf)
return FeatureNames(
n_features=num_features,
unkn_template='x%d',
bias_name=bias_name
)
return FeatureNames(estimator_feature_names, bias_name=bias_name)
num_features = num_features or get_num_features(clf)
if isinstance(feature_names, FeatureNames):
if feature_names.n_features != num_features:
raise ValueError("feature_names has a wrong n_features: "
"expected=%d, got=%d" % (num_features,
feature_names.n_features))
# Make a shallow copy setting proper bias_name
return FeatureNames(
feature_names.feature_names,
n_features=num_features,
bias_name=bias_name,
unkn_template=feature_names.unkn_template)
else:
if len(feature_names) != num_features:
raise ValueError("feature_names has a wrong length: "
"expected=%d, got=%d" % (num_features,
len(feature_names)))
return FeatureNames(feature_names, bias_name=bias_name)