我对算法非常陌生,但我使用了scikit--学习一点,并且我知道如何坚持我的机器学习模型,在我用joblib进行了训练之后:
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从文件中读取该模型。下面是我目前在算法中的算法:
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时尝试过的所有路径/ urls:
如何使用joblib从文件中加载模型?我是不是走错路了?
发布于 2016-12-15 23:12:56
有几种方法可以访问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期望获得模型文件的路径,所以获得该路径的最简单方法是通过一个file对象(也就是文件对象)。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模型持久化文档,您也应该能够传递类似文件的对象,而不是文件名。
因此,我们可以跳过尝试获取文件名的部分,只需传递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"编辑:这里还有一篇官方算法开发中心的文章,讨论了Scikit-Learn中的模型持久性.
完全披露者:我在算法做算法工程师。
https://stackoverflow.com/questions/41174066
复制相似问题