Пользовательские зависимости в фреймворке scikit-learn Google Cloud ML Engine

Я искал возможность добавить определяемые пользователем функции и настраиваемые преобразователи в свой проект машинного обучения, но я нашел только примеры того, как это сделать в среде Tensor-Flow.

Я создал собственный пакет, который можно установить с помощью pip, но я не знаю, как должен выглядеть файл setup.py в среде scikit-learn.

Буду рад, если вы мне подскажете.

Пайплайн, который я пытаюсь развернуть, приведен ниже:

from custscaler import StdScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import Pipeline   

knn_pipe = Pipeline([
    ('my_std', StdScaler(5) ),
    ('my_knn',KNeighborsClassifier(n_neighbors=7)) 
    ])

model = knn_pipe.fit(X_train, Y_train)

Пользовательский преобразователь:
/custscaler/__init__.py

from .fct1 import StdScaler

/custscaler/fct1.py

from sklearn import base


class StdScaler(base.BaseEstimator, base.TransformerMixin):

    def __init__(self, scaling_factor):
        self.scaling_factor = scaling_factor

    def fit(self, X, y=None):
        return self

    def transform(self, X):
        data = [ [el*self.scaling_factor for el in row] for row in X ]
        return data

person ImScientist    schedule 24.04.2018    source источник
comment
Не работает ли простое размещение файлов новых (пользовательских функций) в том же каталоге или модуле, что и фактический код?   -  person Vivek Kumar    schedule 24.04.2018
comment
(примечание: вы можете использовать sklearn.preprocessing.FunctionTransformer вместо производного от TransformerMixin)   -  person rhaertel80    schedule 24.04.2018


Ответы (1)


Упаковка зависимостей действительно одинакова, независимо от фреймворка. Хотя setup.py является общей конструкцией, некоторые советы даются на странице CloudML Engine (ссылка)

В частности, эта цифра должна быть полезной:

Рекомендуемая структура проекта

В вашем случае фрагмент кода, который выполняет knn_pipe.fit, будет внутри trainer, а custscaler будет "other_subpackage" на рисунке.

«Волшебный бит» в setup.py - это строка:

packages=find_packages()

который будет включать trainer и custscaler (при условии, что у них есть __init__.py).

person rhaertel80    schedule 24.04.2018
comment
Эта структура проекта решает проблему настраиваемого преобразователя с помощью задания обучения, но развертывание версии модели все равно не удастся из-за отсутствия other_subpackage. - person pipo; 31.07.2018
comment
@pipo У нас есть такая же функция, доступная для развертывания модели на раннем этапе тестирования. Если вам интересно, напишите нам по адресу [email protected]. - person rhaertel80; 31.07.2018