Can't convert OneHotEncoder with non-categorical features
- Dominant language
- Python
- Stars
- 5.4k
- Forks
- 850
- Avg merge
- 4d 5h
- Merged PRs (30d)
- 10
Description
I can convert an sklearn OneHotEncoder in which every feature is categorical. Example of OneHotEncoder with all categorical features:
```
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
```
However, I cannot seem to convert a OneHotEncoder which has non-categorical features. For example, this conversion fails:
```
# Train simple OneHotEncoder with one categorical and one non-categorical feature
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(sparse=False, categorical_features=[False, True])
enc.fit([[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [2, 4]])
# Verify that it works
print('Transform of [10, 0]: {}'.format(enc.transform([[10, 0]])))
# Try to convert to CoreML
import coremltools
author_ohe_coreml = coremltools.converters.sklearn.convert(enc)
```
Here is the output:
```
Transform of [10, 0]: [[ 1. 0. 0. 0. 0. 10.]]
Traceback (most recent call last):
File "coreml_onehot_bad.py", line 11, in
author_ohe_coreml = coremltools.converters.sklearn.convert(enc)
File "/Users/caleb.madrigal/.pyenv/versions/3.6.0/lib/python3.6/site-packages/coremltools/converters/sklearn/_converter.py", line 146, in convert
sk_obj, input_features, output_feature_names, class_labels = None)
File "/Users/caleb.madrigal/.pyenv/versions/3.6.0/lib/python3.6/site-packages/coremltools/converters/sklearn/_converter_internal.py", line 214, in _convert_sklearn_model
features = _fm.process_or_validate_features(input_features, num_dimensions)
File "/Users/caleb.madrigal/.pyenv/versions/3.6.0/lib/python3.6/site-packages/coremltools/models/_feature_management.py", line 215, in process_or_validate_features
raise_type_error("If a single feature name is given, then "
File "/Users/caleb.madrigal/.pyenv/versions/3.6.0/lib/python3.6/site-packages/coremltools/models/_feature_management.py", line 192, in raise_type_error
% (additional_msg, str(original_features)))
TypeError: Error processing feature list: If a single feature name is given, then num_dimensions must be provided.
features = input
```
Contributor guide
Assessment
This issue has not been assessed yet.