谷歌云ML引擎中Scikit-learn框架的自定义依赖项

3

我正在寻找在我的机器学习项目中添加自定义函数和自定义转换器的可能性,但我只找到了在Tensor-Flow框架中如何实现这一点的示例。

我创建了一个可以使用pip安装的自定义包,但我不知道在scikit-learn框架中setup.py文件应该是怎样的。

如果您能给我一些提示,我会很高兴的。

我想要部署的流程如下:

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

把新的(自定义函数)文件简单地放在与实际代码相同的目录或模块中,这样不起作用吗? - Vivek Kumar
(附注:你可以使用sklearn.preprocessing.FunctionTransformer而不是从TransformerMixin派生) - rhaertel80
1个回答

3
打包依赖项的方法基本相同,不管使用哪个框架。虽然 setup.py 是通用结构,但云ML引擎页面给出了一些建议(链接)。
特别是这张图应该会很有帮助: Recommended Project Structure 在您的情况下,执行 knn_pipe.fit 的代码片段将位于 trainer 中,而 custscaler 将是图中的 "other_subpackage"。 setup.py 中的 "神奇部分" 是以下行:
packages=find_packages()

这将包括trainercustscaler(假设它们有__init__.py文件)。


这个项目结构解决了训练作业中的自定义转换器问题,但由于缺少“other_subpackage”,部署模型版本仍将失败。 - pipo
1
@pipo 我们在早期测试中提供了与您所说模型部署相同的功能。如果您感兴趣,请联系cloudml-feedback@google.com - rhaertel80

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接