2016-12-15 14 views
2

Я довольно новыми для Algorithmia, но я использовал scikit учиться немного, и я знаю, как сохранить свою модель обучения машины после того, как я тренировался с его joblib:Algorithmia Модель Постоянство с Sklearn

from sklearn.externals joblib 

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

Теперь я хочу разместить мою модель ML и называть ее сервисом с использованием алгоритма, но я не могу понять, как читать модель. Я создал коллекцию в 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 линии, не давая «Нет такого файла или каталога (любой путь, который я положил в) "

Вот все дорожки/URLs я пытался в вызывающем joblib.load:

Как загрузить модель в от файл с использованием joblib? Неужели я ошибаюсь?

+2

Я думаю, вам просто нужно заменить 'f.url' на' f.name' Путь и url должны быть закрытыми полями внутри объекта DataFile ... но это python, поэтому ничего не является частным – jamesatha

ответ

4

Существует несколько способов доступа к данным DataAPI.

Вот 4 различные методы доступа к файлам с помощью клиента Python:.

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).

According to the Official Python2.7 Documentation, если объект файла создан иначе, чем функция 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" 

Но according to the Official Sklearn Model Persistence Documentation, вы должны также иметь возможность просто передать файл, как объекты вместо имен файлов.

Таким образом, мы можем просто пропустить ту часть, где мы пытаемся получить имя файла, а просто передать 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" 

Edit: Here's also an article in the Offical Algorithmia Developer Center talking about Model Persistence in Scikit-Learn.

Полное описание: Я работаю инженером-алгоритмом по адресу Algorithmia.

+0

Это потрясающе , Спасибо! – Nick