首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带Sklearn的算法模型持久性

带Sklearn的算法模型持久性
EN

Stack Overflow用户
提问于 2016-12-15 22:04:34
回答 1查看 279关注 0票数 3

我对算法非常陌生,但我使用了scikit--学习一点,并且我知道如何坚持我的机器学习模型,在我用joblib进行了训练之后:

代码语言:javascript
复制
from sklearn.externals joblib

model = RandomForestRegressor()
# Train the model, etc
joblib.dump(model, "prediction/model/model.pkl")

现在,我想托管我的ML模型,并使用算法将它作为一个服务调用,但是我不知道如何将模型读取回来。我用算法创建了一个名为"testcollection“的集合,其中包含一个名为"model.pkl”的文件,该文件是joblib.dump调用的结果。根据文档,这意味着我的文件应该位于

数据://(用户名)/testcollection/model.pkl.data

我想使用joblib.load从文件中读取该模型。下面是我目前在算法中的算法:

代码语言:javascript
复制
import Algorithmia

def apply(input):
    client = Algorithmia.client()
    f = client.file("data://(username)/testcollection/model.pkl")
    print(f.path)
    print(f.url)
    print(f.getName())
    model = joblib.load(f.url) # Or f.path, both don't work
    return "empty"

这是输出:

代码语言:javascript
复制
(username)/testcollection/model.pkl
/v1/data/(username)/testcollection/model.pkl
model.pkl

它在joblib.load行中出错,给出了“没有这样的文件或目录(不管我输入什么路径)”。

下面是我在调用joblib.load时尝试过的所有路径/ urls:

如何使用joblib从文件中加载模型?我是不是走错路了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-15 23:12:56

有几种方法可以访问DataAPI上的数据。

下面是通过Python客户机访问文件的4种不同方法:

代码语言:javascript
复制
import Algorithmia

client = Algorithmia.client("<YOUR_API_KEY>")

dataFile = client.file("data://<USER_NAME>/<COLLECTION_NAME>/<FILE_NAME>").getFile()

dataText = client.file("data://<USER_NAME>/<COLLECTION_NAME>/<FILE_NAME>").getString()

dataJSON = client.file("data://<USER_NAME>/<COLLECTION_NAME>/<FILE_NAME>").getJson()

dataBytes = client.file("data://<USER_NAME>/<COLLECTION_NAME>/<FILE_NAME>").getBytes()

因为Sklearn期望获得模型文件的路径,所以获得该路径的最简单方法是通过一个file对象(也就是文件对象)。dataFile)。

根据正式的Python2.7文件,如果创建的文件对象不是open()函数,则对象属性name通常对应于文件的路径。

在这种情况下,您需要编写如下内容:

代码语言:javascript
复制
import Algorithmia

def apply(input):

    # You don't need to write your API key if you're editing in the web editor
    client = Algorithmia.client()

    modelFile = client.file("data://(username)/testcollection/model.pkl").getFile()

    modelFilePath = modelFile.name

    model = joblib.load(modelFilePath)

    return "empty"

但是根据官方Sklearn模型持久化文档,您也应该能够传递类似文件的对象,而不是文件名。

因此,我们可以跳过尝试获取文件名的部分,只需传递modelFile对象:

代码语言:javascript
复制
import Algorithmia

def apply(input):

    # You don't need to write your API key if you're editing in the web editor
    client = Algorithmia.client()

    modelFile = client.file("data://(username)/testcollection/model.pkl").getFile()

    model = joblib.load(modelFile)

    return "empty"

编辑:这里还有一篇官方算法开发中心的文章,讨论了Scikit-Learn中的模型持久性.

完全披露者:我在算法做算法工程师。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41174066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档