2015-11-10 32 views
1

在過去幾週中,我花了很多時間處理語法或邏輯錯誤較差的PMML文件。我目前的過程包括查看PMML文件並逐步通過JPMML代碼,直到我能夠找出錯誤。是否存在可幫助查找PMML語法和/或邏輯錯誤的PMML調試器?

我發現

常見問題,

  • 在PMML變量沒有定義任何地方
  • DerivedField if-else語句落空缺少一個變量,並且不使用missingValueReplacement
  • 試圖串的乘積值
  • invalidValueTreatment在DataString中未枚舉的分類變量的MiningSchema中定義的,這意味着將不會使用invalidValueTreatment。

什麼調試工具可用於PMML?

任何幫助進行語法或邏輯調試的工具都會有所幫助。

回答

1

可能還沒有這樣的工具。我的邏輯是調試器將建立在評估器之上。由於JPMML-Evaluator庫是最先進的評估程序,並且它不提供專用的調試工具,因此很難看到其他工具如何在這個區域中擊敗它。

調試PMML時,可能有兩種類型的問題。首先,存在與PMML文檔的結構有關的「靜態錯誤」,例如缺失,無效或錯位的XML元素和屬性。可以通過對PMML XSD文件執行XML驗證或使用JPMML-Model Visitor API來發現它們。其次,存在與某些數據記錄的評估路徑相關的「動態錯誤」。例如,正如您剛剛指出的那樣,可能會發生這樣的情況:爲分類字段分配了沒有處理程序的值。

JPMML-Evaluator庫在檢測到錯誤條件時應該會引發異常。如果您啓用了SAX定位器信息,則異常消息將提供違規PMML內容的行號。當然,如果JPMML-Evaluator庫做了正確的日誌記錄,那麼調試工作就會容易得多。

您也可以嘗試分析您的PMML生產者應用程序的源代碼。爲什麼首先這樣做?

+0

我正在使用SAS生成的PMML,這很麻煩。一個塊正在由統計員手動編碼,以實現SAS顯然還不支持的更多轉換。你有鏈接討論啓用SAX定位器信息嗎?我沒有使用這個,但它聽起來很有用,因爲我目前的所有JPMML例外都沒有用。 – 0111001101110000

+1

爲了讓SAX定位器信息可用,您需要用獨立的「覆蓋」JDK的內置JAXB庫。基本上,它歸結爲向Apache Maven構建文件添加另一個依賴項。目前,我會推薦Glassfish Metro實現:'org.glassfish.jaxb:jaxb-runtime:2.2.11'。請參閱以下提交的解決方案:https://github.com/jpmml/openscoring/commit/2163ca05b902ce74e0b78a477b64bf65f3e2599e – user1808924