2017-11-20 29 views
0

선형 회귀 분석을 사용하여 영감을받은 온도, 진공, 압력 및 습도의 값을 기반으로 생성 된 전력을 예측하고 "http://datascience-enthusiast.com"에서 적응하여 모델을 실시간 데이터에 적용 카프카 주제 pickle 된 .pkl.z 파일을 올바르게 생성하고 JPMML을 사용하여 PMML로 변환합니다 (제안 된 내용은 https://github.com/jpmml/jpmml-sklearn).실시간 회귀 선형 모델에 대한 실시간 요청 열기

카프카 프로듀서 (Python program) (kafka_producer.py)는 임의 범위 내에서 float로 데이터를 임의로 생성하고 문자열을 변환하여 카프카 주제로 바이트로 전송합니다.

Openscoring Python 클라이언트로 작동하는 Python 프로그램 (kafka_consumer.py)은 Kafka 주제에서 데이터를 읽고 바이트 문자열을 문자열로 변환하고 마지막으로 arguments = { "AT" result = os.evaluate ("CCPP", arguments) 문에 대해 9.2, "V": 39.82, "AP": 1013.19, "RH": 91.25}

그것은 잘 작동하고 전원을 예측하지만, 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) 

카프카 소비자가 정지 던져 쇼 : 예외를 발생 (self.message) 예외 : 일부 데이터의 경우

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) 

가, 나는 정말 어떻게 생성되는지 잘못된 요청 모르는 작동하지 않습니다 생성 잘못된 요청. 도움이 될 것입니다. 감사 Gopinathan KM

다른 사람들이 혜택을 누릴 수 있도록 다음과 같이 Villu Ruusmann에서

답변

1

있어 지원 및 솔루션 :

https://github.com/jpmml/jpmml-evaluator/issues/84

모델의 평가가 성공적으로 완료 할 수 없었던 것을

"예외 형식의 InvalidResultException 의미, 하나 이상의 입력 필드 값이 선언 된 범위를 벗어 났기 때문에 PMML 문서와 Python 스크립트의 값 범위가 일치하지 않습니다. 모든 입력 값이 유효하도록 PMML 문서 값 범위를 삭제하거나 계약을 체결하십시오 파이썬 스크립트 값 범위. " Villu Ruusmann이 제안했다.