2016-12-15 2 views
2

Je suis assez nouveau pour Algorithmia mais je l'ai utilisé scikit-learn un peu et je sais comment persister mon modèle d'apprentissage de la machine après que je me suis entraîné avec JOBLIB:Algorithmia Modèle avec persistance Sklearn

from sklearn.externals joblib 

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

Maintenant, je veux héberger mon modèle ML et l'appeler comme un service en utilisant Algorithmia, mais je n'arrive pas à comprendre comment lire le modèle en arrière. J'ai créé une collection dans Algorithmia appelée "testcollection" avec un fichier appelé "model.pkl" qui est le résultat de l'appel joblib.dump. Selon les documents, cela signifie que mon dossier doit être situé à

données: // (nom d'utilisateur) /testcollection/model.pkl

Je veux lire dans ce modèle à partir du fichier en utilisant joblib.load. Voici mon algorithme actuel 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" 

Voici le résultat:

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

Et il des erreurs à la ligne joblib.load, donnant le « Aucun fichier ou répertoire (quelque soit le chemin que je mets) "

est ici tous les chemins/urls que j'ai essayé d'appeler joblib.load:

Comment charger un modèle de un fichier utilisant joblib? Est-ce que je vais à ce sujet dans le mauvais sens?

+2

Je pense que vous avez juste besoin de remplacer 'f.url' par' f.name' Le chemin et l'URL sont censés être des champs privés dans l'objet DataFile ... mais c'est python donc rien n'est privé – jamesatha

Répondre

4

Il existe plusieurs façons d'accéder aux données sur DataAPI.

Voici 4 méthodes différentes pour accéder aux fichiers via le client 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() 

Depuis Sklearn attend le chemin du fichier modèle, la meilleure façon d'obtenir ce serait par un objet fichier (alias DATAFILE).

According to the Official Python2.7 Documentation, si un objet de fichier est créé autre que la fonction open(), l'attribut d'objet name correspond généralement à la trajectoire du fichier.

Dans ce cas, vous avez besoin d'écrire quelque chose comme ceci:

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" 

Mais according to the Official Sklearn Model Persistence Documentation, vous devez également être en mesure de passer simplement des objets de fichiers comme au lieu des noms de fichiers.

Par conséquent, nous pouvons simplement sauter la partie où nous essayons d'obtenir le nom de fichier, et il suffit de passer l'objet 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.

Révélateur complet: Je travaille en tant qu'ingénieur algorithmique au Algorithmia.

+0

C'est génial , Je vous remercie! – Nick