2017-11-20 26 views
0

線形回帰を使用して、温度、真空、圧力、湿度の値に基づいて生成された電力を予測し、「http://datascience-enthusiast.com」から適応させ、モデルをリアルタイムデータに適用します。カフカの話題。ピクルされた.pkl.zファイルを適切に生成し、JPMMLを使用してPMMLに変換します(https://github.com/jpmml/jpmml-sklearn)。リアルタイム回帰線形回帰モデルの不正な要求

Kafka Producerでは、Pythonプログラム(kafka_producer.py)はfloat形式でデータをランダムに生成し、文字列を変換してKafkaトピックにバイトとして送信します。

Openscoring Pythonクライアントとして動作するPythonプログラム(kafka_consumer.py)は、カフカトピックからデータを読み込み、バイト文字列を文字列に変換し、最後に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) 

カフカ消費者が停止し、ショー例外:Exception(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) 

は、それが動作していない生成された、私は本当に要求が発生したどのように悪いかわかりません。 ご協力いただければ幸いです。以下のようにVillu Ruusmannから よろしく Gopinathan KM

答えて

1

ガット案内、溶液他の人が利益を得ることができるように:

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

を「例外タイプInvalidResultExceptionは、モデルの評価が正常に完了できなかったことを意味 PMMLドキュメントとPythonスクリプトの値の範囲が一致しないPMMLドキュメントの値の範囲を削除して(すべての入力値が有効とみなされるように)、または契約しているPythonスクリプトの値の範囲。 Villu Ruusmannによって提案されたように。