所以我创建了一个混合数据类型的模型,并使用 SK Learn Docs 中的推荐示例使用列转换器来构建分类器。
https://scikit-learn.org/stable/auto_examples/compose/plot_column_transformer_mixed_types.html#sphx-glr-auto-examples-compose-plot-column-transformer-mixed-types-py
由于输入来自csv,并转换为Pandas数据帧,因此看起来X_test,X_train,y_test y_train都是数据帧。将y_test传递给 clf.predict() 函数工作正常,我收到了预测。
但是,我想托管此模型Google云ML引擎,该引擎在预测请求API中接受2D实例数组。如何使分类器适应并接受输入数组而不是数据帧?我意识到这可能是相当微不足道的,但很难找到解决方案。
要使分类器与 Google Cloud 机器学习引擎 (CMLE) 兼容,您需要将预处理器和 LogisticRegression 分类器与管道分离出来。您将需要执行预处理逻辑客户端,独立分类器将托管在 CMLE 上。
读取 csv 文件并定义数字和分类转换器后,需要修改训练代码,如下所示:
...
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
preprocessor = ColumnTransformer(
transformers=[
('num', numeric_transformer, numeric_features),
('cat', categorical_transformer, categorical_features)])
model = LogisticRegression(solver='lbfgs')
X_train_transformed = preprocessor.fit_transform(X_train)
model.fit(X_train_transformed, y_train)
print("model score: %.3f" % model.score(preprocessor.transform(X_test), y_test))
您可以导出模型(使用 pickle 或 joblib)并将其部署到 CMLE 上。在构造对 CMLE 的 json 请求以进行预测时,首先需要使用以下内容将数据帧预处理为 2D 数组: preprocessor.transform(X_test)
.