Я пытаюсь запустить простое прогнозирование XGBoost на основе Google Cloud, используя этот простой пример https://cloud.google.com/ml-engine/docs/scikit/getting-predictions-xgboost#get_online_predictions
Модель строится нормально, но когда я пытаюсь запустить прогноз с примером ввода JSON происходит сбой с ошибкой «Не удалось инициализировать DMatrix из входов: не удалось преобразовать строку в число с плавающей запятой :», как показано на экране ниже. Я понимаю, что это происходит потому, что в тестовом вводе есть строки, я надеялся, что модель машинного обучения Google должна иметь информацию для преобразования категориальных значений в числа с плавающей точкой. Я не могу ожидать, что мой пользователь отправит запрос онлайн-прогнозирования со значениями с плавающей запятой.
На основе данного учебника он должен работать без преобразования категориальных значений в значения с плавающей запятой. Пожалуйста, сообщите, я приложил GIF с более подробной информацией. Спасибо
import json
import numpy as np
import os
import pandas as pd
import pickle
import xgboost as xgb
from sklearn.preprocessing import LabelEncoder
# these are the column labels from the census data files
COLUMNS = (
'age',
'workclass',
'fnlwgt',
'education',
'education-num',
'marital-status',
'occupation',
'relationship',
'race',
'sex',
'capital-gain',
'capital-loss',
'hours-per-week',
'native-country',
'income-level'
)
# categorical columns contain data that need to be turned into numerical
# values before being used by XGBoost
CATEGORICAL_COLUMNS = (
'workclass',
'education',
'marital-status',
'occupation',
'relationship',
'race',
'sex',
'native-country'
)
# load training set
with open('./census_data/adult.data', 'r') as train_data:
raw_training_data = pd.read_csv(train_data, header=None, names=COLUMNS)
# remove column we are trying to predict ('income-level') from features list
train_features = raw_training_data.drop('income-level', axis=1)
# create training labels list
train_labels = (raw_training_data['income-level'] == ' >50K')
# load test set
with open('./census_data/adult.test', 'r') as test_data:
raw_testing_data = pd.read_csv(test_data, names=COLUMNS, skiprows=1)
# remove column we are trying to predict ('income-level') from features list
test_features = raw_testing_data.drop('income-level', axis=1)
# create training labels list
test_labels = (raw_testing_data['income-level'] == ' >50K.')
# convert data in categorical columns to numerical values
encoders = {col:LabelEncoder() for col in CATEGORICAL_COLUMNS}
for col in CATEGORICAL_COLUMNS:
train_features[col] = encoders[col].fit_transform(train_features[col])
for col in CATEGORICAL_COLUMNS:
test_features[col] = encoders[col].fit_transform(test_features[col])
# load data into DMatrix object
dtrain = xgb.DMatrix(train_features, train_labels)
dtest = xgb.DMatrix(test_features)
# train XGBoost model
bst = xgb.train({}, dtrain, 20)
bst.save_model('./model.bst')