日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

再访PMML

發(fā)布時(shí)間:2023/12/3 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 再访PMML 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

嗨伙計(jì)! 從今年年初開始,就有了重新設(shè)計(jì)Drools PMML模塊的計(jì)劃。

在這篇文章中,我將描述我們將如何處理它,目前的狀態(tài),未來發(fā)展的想法等,等等……敬請期待!

背景

PMML是一個(gè)標(biāo)準(zhǔn),旨在“ 為分析應(yīng)用提供一種描述和交換由數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)算法生成的預(yù)測模型的方法。 PMML標(biāo)準(zhǔn)定義了一系列受管理的模型,我們將它們稱為“模型”。

換句話說,可能(不是那么明顯)的結(jié)果是,PMML可能被認(rèn)為是不同預(yù)測模型的協(xié)調(diào)器 ,每個(gè)預(yù)測模型都有不同的要求。 Drools有其自己的PMML實(shí)現(xiàn)。 它的原始設(shè)計(jì)是基于100%流口水引擎的,但是從長遠(yuǎn)來看,這對所有模型都不令人滿意,因此決定采用不同的方法來實(shí)施新版本。 現(xiàn)在,這里的故事開始了……

要求

簡而言之,PMML實(shí)現(xiàn)應(yīng)允許:

  • 加載PMML文件(xml格式)
  • 提交輸入數(shù)據(jù)
  • 返回預(yù)測值
  • 聽起來很簡單,不是嗎?

    方法

    擬議的體系結(jié)構(gòu)旨在遵循“清潔體系結(jié)構(gòu)”原則,以模塊化方式滿足要求。

    為了實(shí)現(xiàn)這一點(diǎn),定義了清晰的邊界和可見性的組件。 總體思路是,存在與核心功能嚴(yán)格相關(guān)的特定任務(wù),而其他“外部”功能則應(yīng)保持不可知。 任何想深入研究此問題的人都可以閱讀RC Martin撰寫的“ Clean Architecture”一書,但從本質(zhì)上講,將good-ol的設(shè)計(jì)原則應(yīng)用于整個(gè)體系結(jié)構(gòu)只是一個(gè)問題。 明確定義此目標(biāo)后,實(shí)現(xiàn)該目標(biāo)所需的步驟為:

  • 識(shí)別核心邏輯和實(shí)施細(xì)節(jié)(特定于模型)
  • 在“獨(dú)立”模塊中實(shí)現(xiàn)核心邏輯
  • 為特定于模型的模塊編寫代碼
  • 我們選擇實(shí)現(xiàn)插件模式以將核心邏輯綁定到特定于模型的實(shí)現(xiàn),主要有兩個(gè)原因:

  • 增量開發(fā)和整體代碼管理:核心模塊本身不依賴于任何特定于模型的實(shí)現(xiàn),因此可以增量地提供/更新/替換后者,而不會(huì)對核心產(chǎn)生任何影響
  • 可以用自定義的實(shí)現(xiàn)替換提供的實(shí)現(xiàn)
  • 我們還預(yù)見到了可能會(huì)根據(jù)原始PMML結(jié)構(gòu)在運(yùn)行時(shí)選擇實(shí)現(xiàn)的可能性(例如,根據(jù)給定PMML的大小使用不同的實(shí)現(xiàn)可能是有意義的)
  • (我作弊:那是三個(gè))

  • 這是原始PMML模型的Kie表示形式的定義。
  • 對于每個(gè)實(shí)際模型,都有特定的實(shí)現(xiàn),并且可以是任何類型的對象(java映射,drools規(guī)則等)。
  • 我們可以避免嗎? 也許。 我們可以使用由規(guī)范的xsd直接生成的模型。 但這是為了描述所有預(yù)測模型而設(shè)計(jì)的,盡管它們中的任何一個(gè)都可能以不同的方式和不同的約定使用它。 因此,此內(nèi)部視圖將準(zhǔn)確表示每個(gè)特定模型所需的內(nèi)容。

    組件

    我們確定了以下主要功能組件:

  • 編譯器
  • 組裝工
  • 執(zhí)行者
  • 編譯器

    該組件讀取原始PMML文件并將其翻譯為我們的內(nèi)部格式。

    它的核心方面只是將xml數(shù)據(jù)解組到Java對象中。 然后,它使用java SPI檢索特定于給定PMML模型的模型編譯器(如果找不到模型編譯器,則將PMML忽略)。

    最后,檢索到的模型編譯器會(huì)將原始PMML模型“轉(zhuǎn)換”為我們特定于模型的表示形式( KiePMMLModels )。

    該組件的核心部分不直接依賴于任何特定的Model Compiler實(shí)現(xiàn) ,甚至不依賴于任何Drools / Kie –因此,它基本上是一個(gè)輕量級(jí)/獨(dú)立的庫。 如果該組件的執(zhí)行不是很費(fèi)時(shí),則可以在運(yùn)行時(shí) (即,在客戶項(xiàng)目的執(zhí)行期間)或在kjar的編譯期間(例如,對于流口水實(shí)現(xiàn)的模型)調(diào)用該組件。

    組裝工

    由編譯器內(nèi)KIE知識(shí)庫創(chuàng)建該組件存儲(chǔ)KiePMMLModels。 其他組件都不應(yīng)該對此組件有任何依賴性/知識(shí)。

    反過來,它必須對實(shí)際沒有任何依賴關(guān)系/知識(shí)/引用 模型編譯器實(shí)現(xiàn)。

    該組件負(fù)責(zé)PMML模型的實(shí)際執(zhí)行。 它接收PMML輸入數(shù)據(jù),檢索特定于輸入數(shù)據(jù)的KiePMMLModel并計(jì)算輸出。

    對于每個(gè)模型,都有一個(gè)特定的“執(zhí)行器”,以根據(jù)模型類型允許不同類型的執(zhí)行實(shí)現(xiàn)(drool,外部庫等)。 它的核心端僅接收輸入數(shù)據(jù)并檢索特定于給定PMML模型的模型執(zhí)行器(如果找不到,則將忽略PMML)。 最后,檢索到的模型執(zhí)行器將根據(jù)輸入數(shù)據(jù)評(píng)估預(yù)測。 該組件的核心部分不直接依賴于任何特定的Model Executor實(shí)現(xiàn),但是當(dāng)然嚴(yán)格依賴于Drool運(yùn)行時(shí)。

    整體架構(gòu)

    模型實(shí)施

    基于Drools的模型

    一些模型將委托給drools引擎,以在重載下實(shí)現(xiàn)最佳性能。 以下是有關(guān)此類實(shí)現(xiàn)的一般方案的一些詳細(xì)信息。

  • 在kjar生成時(shí)(或在運(yùn)行時(shí)熱加載PMML文件時(shí))調(diào)用編譯器
  • 編譯器讀取PMML文件并將其轉(zhuǎn)換為“ descr”對象(請參見BaseDescr , DescrFactory , DescrBuilderTest )
  • 不管如何調(diào)用模型編譯 器,都必須在調(diào)用drools編譯器后立即對其進(jìn)行調(diào)用,以使基于descr對象生成Java類
  • 匯編器將生成的類放在kie base中
  • 執(zhí)行程序加載生成的“ drools模型”,并使用輸入?yún)?shù)調(diào)用它
  • DRL詳細(xì)信息

    • 對于DataDictionary中的每個(gè)字段,必須定義一個(gè)特定的DataType
    • 對于樹的每個(gè)分支/葉子,必須生成全路徑規(guī)則(即具有到達(dá)路徑的規(guī)則-例如“ sunny”,“ sunny_temperature”,“ sunny_temperature_humidity”)
    • 創(chuàng)建了一個(gè)“狀態(tài)持有者”對象,該對象包含已觸發(fā)規(guī)則的值–更改該值將觸發(fā)與之匹配的子分支/葉規(guī)則(例如,規(guī)則“ sunny”將觸發(fā)“ sunny_temperature”,而后者又將觸發(fā)) “ sunny_temperature_humidity”)
    • 此類“狀態(tài)持有人” 可能包含評(píng)估的信息/部分結(jié)果,最終將在需要結(jié)果組合的地方使用
    • 價(jià)值缺失策略可以在身份持有者內(nèi)部實(shí)施, 也可以作為分解規(guī)則實(shí)施

    測試中

    對于每個(gè)模型,將有一組標(biāo)準(zhǔn)的單元測試,主要用于驗(yàn)證各個(gè)代碼單元。 除此之外,在特定于模型的模塊(是的,它是繞口令)中,將有一個(gè)集成測試子模塊。 后者將驗(yàn)證不同或多或少復(fù)雜的PMML文件的整體正確執(zhí)行,以盡可能模擬實(shí)際情況。

    回歸

    回歸模型是第一個(gè)實(shí)現(xiàn)的模型。 由于其固有的簡單性,我們選擇為其提供純基于Java的實(shí)現(xiàn)。 目前,它仍處于PR之下,并且正在添加新的完整測試。

    在評(píng)估了所有優(yōu)點(diǎn)/缺點(diǎn)之后,我們認(rèn)為該模型可以作為采用基于流口水的方法來實(shí)施的很好的候選者。 作為一個(gè)易于遵循的簡單模型,我們選擇將其用作流口水方法的第一個(gè)測試。

    待辦事項(xiàng)

    這是缺少的功能列表,這些功能尚未實(shí)現(xiàn),并且與特定模型沒有嚴(yán)格關(guān)聯(lián)。 在開發(fā)過程中將對其進(jìn)行更新:

    • 設(shè)置基準(zhǔn)框架項(xiàng)目(請參閱Drools基準(zhǔn) )
    • 管理擴(kuò)展標(biāo)簽(請參閱xsdElement_Extension )
    • 管理SimpleSetPredicate標(biāo)記(請參閱SimpleSetPredicate )
    • 在細(xì)分中實(shí)現(xiàn)VariableWeight (動(dòng)態(tài)替代靜態(tài)“權(quán)重”值)

    不用說,任何評(píng)論(特別是好評(píng)論)和建議都會(huì)受到贊賞。

    接下來的幾天再回來看看下一步!

    再見!

    翻譯自: https://www.javacodegeeks.com/2020/02/pmml-revisited.html

    總結(jié)

    以上是生活随笔為你收集整理的再访PMML的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。