能否将自定义Sklearn模型上传至Google Cloud ML Engine?
解决GCP ML Engine部署Scikit-learn GaussianMixture模型时输出概率而非类别预测的问题
我最近在跟着GCloud教程把Scikit-learn模型部署到ML Engine时,碰到了一个需求:默认的GaussianMixture估计器调用predict方法会返回类别预测,但我需要的是样本的概率得分(也就是score_samples方法输出的结果)。为了满足这个需求,我给GaussianMixture写了一个包装类,重写了predict方法,直接返回概率得分。
包装类实现代码
创建一个名为GMMWrapper.py的文件,内容如下:
from sklearn.mixture import GaussianMixture class GMMWrapper(GaussianMixture): def predict(self, X): # 重写predict方法,替换为返回score_samples的概率结果 return self.score_samples(X)
创建并保存部署用的管道
接下来就可以按照标准流程构建包含这个包装类的机器学习管道,并保存用于ML Engine部署:
from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler import joblib # 初始化包装后的GMM模型 gmm = GMMWrapper() # 构建包含预处理和模型的管道(这里以标准化为例,你可以根据需求调整) pipegmm = Pipeline([ ('feature_scaling', StandardScaler()), ('gmm_model', gmm) ]) # 用训练数据拟合管道(假设X_train是你的训练特征数据) pipegmm.fit(X_train) # 保存模型文件,用于上传到GCP ML Engine joblib.dump(pipegmm, 'gmm_model.joblib')
这样部署到ML Engine之后,调用预测接口时就会返回每个输入样本的概率得分,而不是默认的类别预测结果了。
内容的提问来源于stack exchange,提问作者NickDGreg
相关产品推荐
相关产品推荐

