Exemplo n.º 1
0
def test_transform_feature_names_iris(transformer, expected, iris_train):
    X, y, _, _ = iris_train
    transformer.fit(X, y)
    # Test in_names being provided
    res = transform_feature_names(transformer,
                                  ['<NAME0>', '<NAME1>', '<NAME2>', '<NAME3>'])
    assert res == expected
    # Test in_names being None
    expected_default_names = [
        re.sub('<NAME([0-9]+)>', r'x\1', name) for name in expected
    ]
    assert transform_feature_names(transformer, None) == expected_default_names
Exemplo n.º 2
0
def _col_tfm_names(transformer, in_names=None):
    if in_names is None:
        from eli5.sklearn.utils import get_feature_names
        # generate default feature names
        in_names = get_feature_names(transformer,
                                     num_features=transformer._n_features)
    # return a list of strings derived from in_names
    feature_names = []
    for name, trans, column, _ in transformer._iter(fitted=True):
        if hasattr(transformer, '_df_columns'):
            if ((not isinstance(column, slice))
                    and all(isinstance(col, str) for col in column)):
                names = column
            else:
                names = transformer._df_columns[column]
        else:
            indices = np.arange(transformer._n_features)
            names = ['x%d' % i for i in indices[column]]
        # erm, want to be able to override with in_names maybe???

        if trans == 'drop' or (hasattr(column, '__len__') and not len(column)):
            continue
        if trans == 'passthrough':
            feature_names.extend(names)
            continue
        feature_names.extend([
            name + "__" + f
            for f in transform_feature_names(trans, in_names=names)
        ])
    return feature_names