python - 如何让 SK Learn 分类器接受二维数组作为预测的输入?
问题描述
因此,我制作了一个混合数据类型的模型,并使用 SK Learn Docs 中的推荐示例,使用列转换器构建分类器。
由于输入来自 csv,并被转换为 Pandas 数据帧,因此看起来 X_test、X_train、y_test、y_train 也是数据帧。将 y_test 传递给 clf.predict() 函数工作正常,我收到了预测。
但是我想托管这个模型谷歌云机器学习引擎,它在预测请求 API 中接受一个 2D 实例数组。如何让我的分类器适应并接受输入数组而不是数据框?我意识到这可能相当微不足道,但很难找到解决方案。
解决方案
要使您的分类器与 Google Cloud Machine Learning Engine (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)
.
推荐阅读
- javascript - 检查json键是否是复杂对象javascript
- angular - 错误类型错误:无法读取未定义的属性“getUsers”
- sql - 如何在存储过程中声明一行不存在?
- c++ - 尝试增加数组大小时无法读取内存
- android - Android LiveData
- > 投射到 LiveData
- >
- python - 从 C 代码构建 Python 模块失败
- javascript - 在选择下拉列表中显示默认选择 - Angular
- java - 销毁一个类的所有会话范围的bean
- python - 根据每组的频率填充数据帧
- model-view-controller - 如何在 MVC 数据优先方法中保留数据注释