使用 Sklearn 的算法模型持久性
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 调用的结果。根据文档,这意味着我的文件应该位于
data://(用户名)/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 行出错,给出 "No such file or directory (whatever path I put in)"
这是我在调用 joblib.load 时尝试过的所有路径/网址:
- /v1/data/(用户名)/testcollection/model.pkl
- data://(用户名)/testcollection/model.pkl
- (用户名)/testcollection/model.pkl
- https://algorithmia.com/v1/data/(username)/testcollection/model.pkl
如何使用 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 需要模型文件的路径,因此最简单的方法是通过文件对象(又名数据文件)。
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"
完全披露者:我在 Algorithmia 担任算法工程师。
我是 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 调用的结果。根据文档,这意味着我的文件应该位于
data://(用户名)/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 行出错,给出 "No such file or directory (whatever path I put in)"
这是我在调用 joblib.load 时尝试过的所有路径/网址:
- /v1/data/(用户名)/testcollection/model.pkl
- data://(用户名)/testcollection/model.pkl
- (用户名)/testcollection/model.pkl
- https://algorithmia.com/v1/data/(username)/testcollection/model.pkl
如何使用 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 需要模型文件的路径,因此最简单的方法是通过文件对象(又名数据文件)。
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"
完全披露者:我在 Algorithmia 担任算法工程师。