簡體   English   中英

Sklearn的Algorithmia模型持久性

[英]Algorithmia Model Persistence with Sklearn

我對Algorithmia還是很陌生,但是我已經使用了scikit-learn,在用joblib訓練它之后,我知道如何保持機器學習模型:

from sklearn.externals joblib

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

現在,我想托管我的ML模型並使用Algorithmia將其稱為服務,但是我不知道如何回讀模型。 我在Algorithmia中創建了一個名為“ testcollection”的集合,其中包含一個名為“ model.pkl”的文件,該文件是joblib.dump調用的結果。 根據文檔,這意味着我的文件應該位於

數據://(用戶名)/testcollection/model.pkl

我想使用joblib.load從文件中讀取該模型。 這是我當前在Algorithmia中的算法:

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"

這是輸出:

(username)/testcollection/model.pkl
/v1/data/(username)/testcollection/model.pkl
model.pkl

而且它在joblib.load行出錯,給出“沒有這樣的文件或目錄(無論我輸入的路徑如何)”

這是我在調用joblib.load時嘗試過的所有路徑/ URL:

如何使用Joblib從文件中加載模型? 我會以錯誤的方式處理嗎?

有幾種方法可以訪問DataAPI上的數據。

以下是通過Python客戶端訪問文件的4種不同方法:

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需要模型文件的路徑,因此最簡單的獲取方法是通過文件對象(也稱為dataFile)。

根據Python2.7官方文檔 ,如果創建的文件對象不是open()函數,則對象屬性name通常對應於文件的路徑。

在這種情況下,您將需要編寫如下內容:

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 Model Persistence文檔 ,您還應該能夠只傳遞類似文件的對象而不是文件名。

因此,我們可以跳過嘗試獲取文件名的部分,而只需傳遞modelFile對象:

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"

編輯: 這也是Offical Algorithmia開發人員中心中的一篇文章,談論Scikit-Learn中的模型持久性

全部披露:我作為一個算法工程師在工作Algorithmia

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM