Openscoring в реальном времени Плохой запрос для модели линейной регрессии
Используя линейную регрессию, я пытался предсказать мощность, генерируемую на основе значений температуры, вакуума, давления и влажности, которая основана на " http://datascience-enthusiast.com/", и применил модель к данным в режиме реального времени из темы Кафки. Правильно сгенерированный маринованный файл.pkl.z и конвертируется в PMML с использованием JPMML, как предложено https://github.com/jpmml/jpmml-sklearn.
Kafka Producer, Python-программа (kafka_producer.py) случайным образом генерирует данные в некоторых диапазонах в виде числа с плавающей запятой и преобразует строку и отправляет в тему Kafka байты.
Kafka Consumer, программа на python (kafka_consumer.py), которая действует как клиент Python для Openscoring, считывает данные из темы Kafka, преобразует строку байтов в строку и, наконец, в словарь, который формирует аргументы, такие как arguments = {"AT": 9.2, "V": 39,82, "AP": 1013,19, "RH": 91,25} для оператора result = os.evaluate("CCPP", arguments).
Он хорошо работает и прогнозирует мощность, но после правильного отображения результата для 4-10 записей сервер Openscoring выбрасывает
SEVERE: INFO:
Received EvaluationRequest{id=null, arguments={AT=12.12, V=41.35, AP=1031.67, RH=66.32}}
Nov 20, 2017 6:39:16 AM org.openscoring.service.ModelResource evaluate
INFO: Returned EvaluationResponse{id=null, result={PE=472.152110955029}}
Nov 20, 2017 6:39:17 AM org.openscoring.service.ModelResource evaluate
INFO: Received EvaluationRequest{id=null, arguments={AT=34.06, V=51.53, AP=1016.22, RH=91.7}}
Nov 20, 2017 6:39:17 AM org.openscoring.service.ModelResource evaluate
INFO: Returned EvaluationResponse{id=null, result={PE=444.9147880324237}}
Nov 20, 2017 6:39:18 AM org.openscoring.service.ModelResource evaluate
INFO: Received EvaluationRequest{id=null, arguments={AT=20.41, V=50.33, AP=1018.19, RH=100.18}}
Nov 20, 2017 6:39:18 AM org.openscoring.service.ModelResource doEvaluate
**SEVERE: Failed to evaluate**
org.jpmml.evaluator.InvalidResultException (at or around line 130)
at org.jpmml.evaluator.FieldValueUtil.performInvalidValueTreatment(FieldValueUtil.java:178) at org.jpmml.evaluator.FieldValueUtil.prepareInputValue(FieldValueUtil.java:90)
at org.jpmml.evaluator.InputField.prepare(InputField.java:64)
Kafka Consumer останавливается и показывает: поднять Exception (self.message)Exception: Bad Request
kafka_producer.py
import random
import time
from kafka import KafkaProducer
from kafka.errors import KafkaError
producer = KafkaProducer(bootstrap_servers='localhost:9092')
topic = "power"
for i in range(1000):
AT = "19.651231"
V = "54.305804"
AP = "1013.259078"
RH = "73.308978"
def getAT():
return str(round(random.uniform(2.0, 38.0),2))
def getV():
return str(round(random.uniform(26.0, 81.5),2))
def getAP():
return str(round(random.uniform(993.0, 1033.0),2))
def getRH():
return str(round(random.uniform(26.0, 101.0),2))
# arguments = {"AT" :9.2, "V" : 39.82, "AP" : 1013.19, "RH" : 91.25}
message = "{"AT" : " + getAT() + "," + ""V" : " +getV() + "," + ""AP" : " +getAP() + "," + ""RH" : " + getRH() + "}"
producer.send(topic, key=str.encode('key_{}'.format(i)), value=(message.encode('utf-8')))
time.sleep(1)
producer.close()
kafka_consumer.py
import ast
from kafka import KafkaConsumer
import openscoring
import os
os = openscoring.Openscoring("http://localhost:8080/openscoring")
kwargs = {"auth" : ("admin", "adminadmin")}
os.deploy("CCPP", "/home/gopinathankm/jpmml-sklearn-master/ccpp.pmml", **kwargs)
consumer = KafkaConsumer('power', bootstrap_servers='localhost:9092')
for message in consumer:
arguments =message.value
argsdict = arguments.decode("utf-8")
dict = ast.literal_eval(argsdict)
print(dict)
result = os.evaluate("CCPP", dict)
print(result)
Для некоторых сгенерированных данных это не работает, я действительно не знаю, как генерируется плохой запрос. Любая помощь будет высоко оценена. С уважением Гопинатан К.М.
1 ответ
Получите помощь и решение от Villu Ruusmann, как показано ниже, чтобы другие могли получить выгоду:
https://github.com/jpmml/jpmml-evaluator/issues/84
"Тип исключения InvalidResultException означает, что оценка модели не может быть успешно завершена, поскольку одно или несколько значений входного поля находятся за пределами заявленного диапазона. Диапазоны значений документа PMML и сценария Python не совпадают. Либо удалите значение документа PMML диапазоны (чтобы все входные значения считались действительными), или сокращайте диапазоны значений скрипта Python." как предложено Виллу Руусманном.