This is an automated email from the ASF dual-hosted git repository. nkak pushed a commit to branch madlib2-master in repository https://gitbox.apache.org/repos/asf/madlib.git
commit c9987434d4bef4dc468ac9bbead456e5103b4693 Author: Nikhil Kak <[email protected]> AuthorDate: Tue Feb 20 11:11:36 2024 -0800 PMML: Improve multinom dev-check tests JIRA: MADLIB-1517 This commit adds a few more multinom pmml tests including grouping and no intercept --- .../modules/pmml/test/pmml_multinom.sql_in | 107 ++++++++++++++++++--- 1 file changed, 91 insertions(+), 16 deletions(-) diff --git a/src/ports/postgres/modules/pmml/test/pmml_multinom.sql_in b/src/ports/postgres/modules/pmml/test/pmml_multinom.sql_in index 576d96ac..07f8e0a9 100644 --- a/src/ports/postgres/modules/pmml/test/pmml_multinom.sql_in +++ b/src/ports/postgres/modules/pmml/test/pmml_multinom.sql_in @@ -216,27 +216,82 @@ INSERT INTO multinom_test(feat1, feat2, cat, g) VALUES (2,62,2,'B'); ALTER TABLE multinom_test ADD COLUMN id SERIAL; -DROP TABLE IF EXISTS mglm_out, mglm_out_summary; +-- '0' as ref category +DROP TABLE IF EXISTS multinom_model, multinom_model_summary; SELECT multinom( 'multinom_test', - 'mglm_out', + 'multinom_model', 'cat', 'ARRAY[1, feat1, feat2]', '0', 'logit'); -DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('mglm_out','multinom_test', 'multinom_predict_out', 'probability',FALSE,'id'); -SELECT test_pmml_output('multinom_test', 'mglm_out', 'multinom_predict_out', 'id', '0', 'probability_0'); -SELECT test_pmml_output('multinom_test', 'mglm_out', 'multinom_predict_out', 'id', '1', 'probability_1'); -SELECT test_pmml_output('multinom_test', 'mglm_out', 'multinom_predict_out', 'id', '2', 'probability_2'); +DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('multinom_model','multinom_test', 'multinom_predict_out', 'probability',FALSE,'id'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', '0', 'probability_0'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', '1', 'probability_1'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', '2', 'probability_2'); + +DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('multinom_model','multinom_test', 'multinom_predict_out', 'response',FALSE,'id'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', 'category', 'predicted_cat_pmml_prediction'); + +-- '2' as ref category +DROP TABLE IF EXISTS multinom_model, multinom_model_summary; +SELECT multinom( + 'multinom_test', + 'multinom_model', + 'cat', + 'ARRAY[1, feat1, feat2]', + '2', + 'logit', NULL, + 'max_iter=100,optimizer=irls,tolerance=1e-6'); +DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('multinom_model','multinom_test', 'multinom_predict_out', 'probability',FALSE,'id'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', '0', 'probability_0'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', '1', 'probability_1'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', '2', 'probability_2'); + +DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('multinom_model','multinom_test', 'multinom_predict_out', 'response',FALSE,'id'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', 'category', 'predicted_cat_pmml_prediction'); + +------------------------------------ without intercept ------------------------------------------------------------------- +-- '0' as ref category +DROP TABLE IF EXISTS multinom_model, multinom_model_summary; +SELECT multinom( + 'multinom_test', + 'multinom_model', + 'cat', + 'ARRAY[feat1, feat2]', + '0', + 'logit'); +DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('multinom_model','multinom_test', 'multinom_predict_out', 'probability',FALSE,'id'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', '0', 'probability_0'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', '1', 'probability_1'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', '2', 'probability_2'); + +DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('multinom_model','multinom_test', 'multinom_predict_out', 'response',FALSE,'id'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', 'category', 'predicted_cat_pmml_prediction'); + +-- '2' as ref category +DROP TABLE IF EXISTS multinom_model, multinom_model_summary; +SELECT multinom( + 'multinom_test', + 'multinom_model', + 'cat', + 'ARRAY[feat1, feat2]', + '2', + 'logit'); +DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('multinom_model','multinom_test', 'multinom_predict_out', 'probability',FALSE,'id'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', '0', 'probability_0'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', '1', 'probability_1'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', '2', 'probability_2'); + +DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('multinom_model','multinom_test', 'multinom_predict_out', 'response',FALSE,'id'); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_out', 'id', 'category', 'predicted_cat_pmml_prediction'); -DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('mglm_out','multinom_test', 'multinom_predict_out', 'response',FALSE,'id'); -SELECT test_pmml_output('multinom_test', 'mglm_out', 'multinom_predict_out', 'id', 'category', 'predicted_cat_pmml_prediction'); ------------------------------------ with grouping ------------------------------------------------------------------- --- DROP TABLE IF EXISTS mglm_grp_out, mglm_grp_out_summary; +DROP TABLE IF EXISTS multinom_model, multinom_model_summary; SELECT multinom( 'multinom_test', - 'mglm_grp_out', + 'multinom_model', 'cat', 'ARRAY[1, feat1, feat2]', '0', @@ -244,10 +299,30 @@ SELECT multinom( 'g'); -- PMML export -SELECT pmml('mglm_grp_out'); -DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('mglm_grp_out','multinom_test', 'multinom_predict_out', 'probability',FALSE,'id'); -CREATE TABLE multinom_predict_grp_out as (SELECT a.id, a.g, b."0", b."1", b."2", a.feat1, a.feat2 FROM multinom_test AS a LEFT JOIN multinom_predict_out AS b on a.id =b.id); -SELECT test_pmml_output('multinom_test', 'mglm_grp_out', 'multinom_predict_grp_out', 'id', '0', 'probability_0','g'); +DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('multinom_model','multinom_test', 'multinom_predict_out', 'probability',FALSE,'id'); +DROP TABLE IF EXISTS multinom_predict_grp_out; CREATE TABLE multinom_predict_grp_out as (SELECT a.id, a.g, b."0", b."1", b."2", a.feat1, a.feat2 FROM multinom_test AS a LEFT JOIN multinom_predict_out AS b on a.id =b.id); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_grp_out', 'id', '0', 'probability_0','g'); + +DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('multinom_model','multinom_test', 'multinom_predict_out', 'response',FALSE,'id'); +DROP TABLE IF EXISTS multinom_predict_grp_out; CREATE TABLE multinom_predict_grp_out as (SELECT a.id, a.g, b.category FROM multinom_test AS a LEFT JOIN multinom_predict_out AS b on a.id =b.id); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_grp_out', 'id', 'category', 'predicted_cat_pmml_prediction', 'g'); + +---- without intercept ----- +DROP TABLE IF EXISTS multinom_model, multinom_model_summary; +SELECT multinom( + 'multinom_test', + 'multinom_model', + 'cat', + 'ARRAY[feat1, feat2]', + '0', + 'logit', + 'g'); + +-- PMML export +DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('multinom_model','multinom_test', 'multinom_predict_out', 'probability',FALSE,'id'); +DROP TABLE IF EXISTS multinom_predict_grp_out; CREATE TABLE multinom_predict_grp_out as (SELECT a.id, a.g, b."0", b."1", b."2", a.feat1, a.feat2 FROM multinom_test AS a LEFT JOIN multinom_predict_out AS b on a.id =b.id); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_grp_out', 'id', '0', 'probability_0','g'); -DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('mglm_grp_out','multinom_test', 'multinom_predict_out', 'response',FALSE,'id'); -SELECT test_pmml_output('multinom_test', 'mglm_grp_out', 'multinom_predict_out', 'id', 'category', 'predicted_cat_pmml_prediction'); +DROP TABLE IF EXISTS multinom_predict_out; SELECT multinom_predict('multinom_model','multinom_test', 'multinom_predict_out', 'response',FALSE,'id'); +DROP TABLE IF EXISTS multinom_predict_grp_out; CREATE TABLE multinom_predict_grp_out as (SELECT a.id, a.g, b.category FROM multinom_test AS a LEFT JOIN multinom_predict_out AS b on a.id =b.id); +SELECT test_pmml_output('multinom_test', 'multinom_model', 'multinom_predict_grp_out', 'id', 'category', 'predicted_cat_pmml_prediction', 'g');
