13 m4_include(`SQLCommon.m4
') --'
324 ------------------------------------------------------------------------
350 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
356 alpha DOUBLE PRECISION,
357 lambda_value DOUBLE PRECISION,
361 optimizer_params TEXT,
364 tolerance DOUBLE PRECISION
367 $$ LANGUAGE plpythonu;
369 ------------------------------------------------------------------------
370 -- Overloaded functions
371 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
377 alpha DOUBLE PRECISION,
378 lambda_value DOUBLE PRECISION,
379 standardization BOOLEAN,
380 grouping_columns TEXT,
382 optimizer_params TEXT,
387 PERFORM MADLIB_SCHEMA.elastic_net_train($1, $2, $3, $4, $5, $6, $7, $8,
388 $9, $10, $11, $12, $13, 1e-6);
390 $$ LANGUAGE plpgsql VOLATILE;
392 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
398 alpha DOUBLE PRECISION,
399 lambda_value DOUBLE PRECISION,
400 standardization BOOLEAN,
401 grouping_columns TEXT,
403 optimizer_params TEXT,
407 PERFORM MADLIB_SCHEMA.elastic_net_train($1, $2, $3, $4, $5, $6, $7, $8,
408 $9, $10, $11, $12, 10000);
410 $$ LANGUAGE plpgsql VOLATILE;
412 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
418 alpha DOUBLE PRECISION,
419 lambda_value DOUBLE PRECISION,
420 standardization BOOLEAN,
421 grouping_columns TEXT,
423 optimizer_params TEXT
426 PERFORM MADLIB_SCHEMA.elastic_net_train($1, $2, $3, $4, $5, $6, $7, $8,
429 $$ LANGUAGE plpgsql VOLATILE;
431 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
437 alpha DOUBLE PRECISION,
438 lambda_value DOUBLE PRECISION,
439 standardization BOOLEAN,
440 grouping_columns TEXT,
444 PERFORM MADLIB_SCHEMA.elastic_net_train($1, $2, $3, $4, $5, $6, $7, $8,
445 $9, $10, NULL::TEXT);
447 $$ LANGUAGE plpgsql VOLATILE;
449 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
455 alpha DOUBLE PRECISION,
456 lambda_value DOUBLE PRECISION,
457 standardization BOOLEAN,
458 grouping_columns TEXT
461 PERFORM MADLIB_SCHEMA.elastic_net_train($1, $2, $3, $4, $5, $6, $7, $8,
464 $$ LANGUAGE plpgsql VOLATILE;
466 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
472 alpha DOUBLE PRECISION,
473 lambda_value DOUBLE PRECISION,
474 standardization BOOLEAN
477 PERFORM MADLIB_SCHEMA.elastic_net_train($1, $2, $3, $4, $5, $6, $7, $8,
480 $$ LANGUAGE plpgsql VOLATILE;
482 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
488 alpha DOUBLE PRECISION,
489 lambda_value DOUBLE PRECISION
492 PERFORM MADLIB_SCHEMA.elastic_net_train($1, $2, $3, $4, $5, $6, $7, True);
494 $$ LANGUAGE plpgsql VOLATILE;
496 ------------------------------------------------------------------------
501 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train ()
503 PythonFunction(elastic_net, elastic_net, elastic_net_help)
504 $$ LANGUAGE plpythonu;
506 ------------------------------------------------------------------------
515 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
516 family_or_optimizer TEXT
518 PythonFunction(elastic_net, elastic_net, elastic_net_help)
519 $$ LANGUAGE plpythonu;
521 ------------------------------------------------------------------------
522 ------------------------------------------------------------------------
523 ------------------------------------------------------------------------
533 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_predict (
539 PythonFunction(elastic_net, elastic_net, elastic_net_predict_all)
540 $$ LANGUAGE plpythonu;
542 ------------------------------------------------------------------------
555 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_predict (
557 coefficients DOUBLE PRECISION[],
558 intercept DOUBLE PRECISION,
559 ind_var DOUBLE PRECISION[]
560 ) RETURNS DOUBLE PRECISION AS $$
563 binomial_result BOOLEAN;
565 family_name := lower(regress_family);
567 IF family_name =
'gaussian' OR family_name =
'linear' THEN
568 RETURN MADLIB_SCHEMA.elastic_net_gaussian_predict(coefficients, intercept, ind_var);
571 IF family_name =
'binomial' OR family_name =
'logistic' THEN
572 binomial_result := MADLIB_SCHEMA.elastic_net_binomial_predict(coefficients, intercept, ind_var);
573 IF binomial_result THEN
580 RAISE EXCEPTION
'This regression family is not supported!';
582 $$ LANGUAGE plpgsql IMMUTABLE STRICT;
584 ------------------------------------------------------------------------
595 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_gaussian_predict (
596 coefficients DOUBLE PRECISION[],
597 intercept DOUBLE PRECISION,
598 ind_var DOUBLE PRECISION[]
599 ) RETURNS DOUBLE PRECISION AS
600 'MODULE_PATHNAME',
'__elastic_net_gaussian_predict'
601 LANGUAGE C IMMUTABLE STRICT;
603 ------------------------------------------------------------------------
613 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_binomial_predict (
614 coefficients DOUBLE PRECISION[],
615 intercept DOUBLE PRECISION,
616 ind_var DOUBLE PRECISION[]
618 'MODULE_PATHNAME',
'__elastic_net_binomial_predict'
619 LANGUAGE C IMMUTABLE STRICT;
621 ------------------------------------------------------------------------
631 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_binomial_prob (
632 coefficients DOUBLE PRECISION[],
633 intercept DOUBLE PRECISION,
634 ind_var DOUBLE PRECISION[]
635 ) RETURNS DOUBLE PRECISION AS
636 'MODULE_PATHNAME',
'__elastic_net_binomial_prob'
637 LANGUAGE C IMMUTABLE STRICT;
639 ------------------------------------------------------------------------
641 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__elastic_net_binomial_loglikelihood (
642 coefficients DOUBLE PRECISION[],
643 intercept DOUBLE PRECISION,
645 ind_var DOUBLE PRECISION[]
646 ) RETURNS DOUBLE PRECISION AS
647 'MODULE_PATHNAME',
'__elastic_net_binomial_loglikelihood'
648 LANGUAGE C IMMUTABLE STRICT;
650 ------------------------------------------------------------------------
651 -- Compute the solution
for just one step ------------------------------
652 ------------------------------------------------------------------------
654 CREATE TYPE MADLIB_SCHEMA.__elastic_net_result AS (
655 intercept DOUBLE PRECISION,
656 coefficients DOUBLE PRECISION[],
657 lambda_value DOUBLE PRECISION
660 ------------------------------------------------------------------------
664 CREATE FUNCTION MADLIB_SCHEMA.__gaussian_igd_transition (
665 state DOUBLE PRECISION[],
666 ind_var DOUBLE PRECISION[],
667 dep_var DOUBLE PRECISION,
668 pre_state DOUBLE PRECISION[],
669 lambda DOUBLE PRECISION,
670 alpha DOUBLE PRECISION,
672 stepsize DOUBLE PRECISION,
674 xmean DOUBLE PRECISION[],
675 ymean DOUBLE PRECISION,
676 step_decay DOUBLE PRECISION
677 ) RETURNS DOUBLE PRECISION[]
678 AS
'MODULE_PATHNAME',
'gaussian_igd_transition'
679 LANGUAGE C IMMUTABLE;
683 CREATE FUNCTION MADLIB_SCHEMA.__gaussian_igd_merge (
684 state1 DOUBLE PRECISION[],
685 state2 DOUBLE PRECISION[]
686 ) RETURNS DOUBLE PRECISION[] AS
687 'MODULE_PATHNAME',
'gaussian_igd_merge'
688 LANGUAGE C IMMUTABLE STRICT;
692 CREATE FUNCTION MADLIB_SCHEMA.__gaussian_igd_final (
693 state DOUBLE PRECISION[]
694 ) RETURNS DOUBLE PRECISION[] AS
695 'MODULE_PATHNAME',
'gaussian_igd_final'
696 LANGUAGE C IMMUTABLE STRICT;
701 CREATE AGGREGATE MADLIB_SCHEMA.__gaussian_igd_step(
714 SType = DOUBLE PRECISION[],
715 SFunc = MADLIB_SCHEMA.__gaussian_igd_transition,
716 m4_ifdef(`GREENPLUM
', `prefunc = MADLIB_SCHEMA.__gaussian_igd_merge,')
717 FinalFunc = MADLIB_SCHEMA.__gaussian_igd_final,
718 InitCond = '{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
'
721 CREATE AGGREGATE MADLIB_SCHEMA.__gaussian_igd_step_single_seg (
722 /* ind_var */ DOUBLE PRECISION[],
723 /* dep_var */ DOUBLE PRECISION,
724 /* pre_state */ DOUBLE PRECISION[],
725 /* lambda */ DOUBLE PRECISION,
726 /* alpha */ DOUBLE PRECISION,
727 /* dimension */ INTEGER,
728 /* stepsize */ DOUBLE PRECISION,
729 /* total_rows */ INTEGER,
730 /* xmeans */ DOUBLE PRECISION[],
731 /* ymean */ DOUBLE PRECISION,
732 /* step_decay */ DOUBLE PRECISION
734 SType = DOUBLE PRECISION[],
735 SFunc = MADLIB_SCHEMA.__gaussian_igd_transition,
736 -- m4_ifdef(`GREENPLUM', `prefunc = MADLIB_SCHEMA.__gaussian_igd_merge,
')
737 FinalFunc = MADLIB_SCHEMA.__gaussian_igd_final,
738 InitCond = '{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
'
743 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__gaussian_igd_state_diff (
744 state1 DOUBLE PRECISION[],
745 state2 DOUBLE PRECISION[]
746 ) RETURNS DOUBLE PRECISION AS
747 'MODULE_PATHNAME
', '__gaussian_igd_state_diff
'
748 LANGUAGE C IMMUTABLE STRICT;
752 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__gaussian_igd_result (
753 in_state DOUBLE PRECISION[],
754 feature_sq DOUBLE PRECISION[],
755 threshold DOUBLE PRECISION,
756 tolerance DOUBLE PRECISION
757 ) RETURNS MADLIB_SCHEMA.__elastic_net_result AS
758 'MODULE_PATHNAME
', '__gaussian_igd_result
'
759 LANGUAGE C IMMUTABLE STRICT;
761 ------------------------------------------------------------------------
765 CREATE FUNCTION MADLIB_SCHEMA.__gaussian_fista_transition (
766 state DOUBLE PRECISION[],
767 ind_var DOUBLE PRECISION[],
768 dep_var DOUBLE PRECISION,
769 pre_state DOUBLE PRECISION[],
770 lambda DOUBLE PRECISION,
771 alpha DOUBLE PRECISION,
774 max_stepsize DOUBLE PRECISION,
775 eta DOUBLE PRECISION,
776 use_active_set INTEGER,
778 random_stepsize INTEGER
779 ) RETURNS DOUBLE PRECISION[]
780 AS 'MODULE_PATHNAME
', 'gaussian_fista_transition
'
781 LANGUAGE C IMMUTABLE;
785 CREATE FUNCTION MADLIB_SCHEMA.__gaussian_fista_merge (
786 state1 DOUBLE PRECISION[],
787 state2 DOUBLE PRECISION[]
788 ) RETURNS DOUBLE PRECISION[] AS
789 'MODULE_PATHNAME
', 'gaussian_fista_merge
'
790 LANGUAGE C IMMUTABLE STRICT;
794 CREATE FUNCTION MADLIB_SCHEMA.__gaussian_fista_final (
795 state DOUBLE PRECISION[]
796 ) RETURNS DOUBLE PRECISION[] AS
797 'MODULE_PATHNAME
', 'gaussian_fista_final
'
798 LANGUAGE C IMMUTABLE STRICT;
801 Perform one iteration step of FISTA for linear models
803 CREATE AGGREGATE MADLIB_SCHEMA.__gaussian_fista_step(
804 /* ind_var */ DOUBLE PRECISION[],
805 /* dep_var */ DOUBLE PRECISION,
806 /* pre_state */ DOUBLE PRECISION[],
807 /* lambda */ DOUBLE PRECISION,
808 /* alpha */ DOUBLE PRECISION,
809 /* dimension */ INTEGER,
810 /* total_rows */ INTEGER,
811 /* max_stepsize */ DOUBLE PRECISION,
812 /* eta */ DOUBLE PRECISION,
813 /* use_active_set */ INTEGER,
814 /* is_active */ INTEGER,
815 /* random_stepsize */ INTEGER
817 SType = DOUBLE PRECISION[],
818 SFunc = MADLIB_SCHEMA.__gaussian_fista_transition,
819 m4_ifdef(`GREENPLUM', `prefunc = MADLIB_SCHEMA.__gaussian_fista_merge,
')
820 FinalFunc = MADLIB_SCHEMA.__gaussian_fista_final,
821 InitCond = '{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
'
826 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__gaussian_fista_state_diff (
827 state1 DOUBLE PRECISION[],
828 state2 DOUBLE PRECISION[]
829 ) RETURNS DOUBLE PRECISION AS
830 'MODULE_PATHNAME
', '__gaussian_fista_state_diff
'
831 LANGUAGE C IMMUTABLE STRICT;
835 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__gaussian_fista_result (
836 in_state DOUBLE PRECISION[]
837 ) RETURNS MADLIB_SCHEMA.__elastic_net_result AS
838 'MODULE_PATHNAME
', '__gaussian_fista_result
'
839 LANGUAGE C IMMUTABLE STRICT;
841 ------------------------------------------------------------------------
842 ------------------------------------------------------------------------
843 ------------------------------------------------------------------------
847 CREATE FUNCTION MADLIB_SCHEMA.__binomial_igd_transition (
848 state DOUBLE PRECISION[],
849 ind_var DOUBLE PRECISION[],
851 pre_state DOUBLE PRECISION[],
852 lambda DOUBLE PRECISION,
853 alpha DOUBLE PRECISION,
855 stepsize DOUBLE PRECISION,
857 xmean DOUBLE PRECISION[],
858 ymean DOUBLE PRECISION,
859 step_decay DOUBLE PRECISION
860 ) RETURNS DOUBLE PRECISION[]
861 AS 'MODULE_PATHNAME
', 'binomial_igd_transition
'
862 LANGUAGE C IMMUTABLE;
866 CREATE FUNCTION MADLIB_SCHEMA.__binomial_igd_merge (
867 state1 DOUBLE PRECISION[],
868 state2 DOUBLE PRECISION[]
869 ) RETURNS DOUBLE PRECISION[] AS
870 'MODULE_PATHNAME
', 'binomial_igd_merge
'
871 LANGUAGE C IMMUTABLE STRICT;
875 CREATE FUNCTION MADLIB_SCHEMA.__binomial_igd_final (
876 state DOUBLE PRECISION[]
877 ) RETURNS DOUBLE PRECISION[] AS
878 'MODULE_PATHNAME
', 'binomial_igd_final
'
879 LANGUAGE C IMMUTABLE STRICT;
882 * Perform one iteration step of IGD for linear models
884 CREATE AGGREGATE MADLIB_SCHEMA.__binomial_igd_step(
885 /* ind_var */ DOUBLE PRECISION[],
886 /* dep_var */ BOOLEAN,
887 /* pre_state */ DOUBLE PRECISION[],
888 /* lambda */ DOUBLE PRECISION,
889 /* alpha */ DOUBLE PRECISION,
890 /* dimension */ INTEGER,
891 /* stepsize */ DOUBLE PRECISION,
892 /* total_rows */ INTEGER,
893 /* xmeans */ DOUBLE PRECISION[],
894 /* ymean */ DOUBLE PRECISION,
895 /* step_decay */ DOUBLE PRECISION
897 SType = DOUBLE PRECISION[],
898 SFunc = MADLIB_SCHEMA.__binomial_igd_transition,
899 m4_ifdef(`GREENPLUM', `prefunc = MADLIB_SCHEMA.__binomial_igd_merge,
')
900 FinalFunc = MADLIB_SCHEMA.__binomial_igd_final,
901 InitCond = '{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
'
904 CREATE AGGREGATE MADLIB_SCHEMA.__binomial_igd_step_single_seg (
905 /* ind_var */ DOUBLE PRECISION[],
906 /* dep_var */ BOOLEAN,
907 /* pre_state */ DOUBLE PRECISION[],
908 /* lambda */ DOUBLE PRECISION,
909 /* alpha */ DOUBLE PRECISION,
910 /* dimension */ INTEGER,
911 /* stepsize */ DOUBLE PRECISION,
912 /* total_rows */ INTEGER,
913 /* xmeans */ DOUBLE PRECISION[],
914 /* ymean */ DOUBLE PRECISION,
915 /* step_decay */ DOUBLE PRECISION
917 SType = DOUBLE PRECISION[],
918 SFunc = MADLIB_SCHEMA.__binomial_igd_transition,
919 -- m4_ifdef(`GREENPLUM', `prefunc = MADLIB_SCHEMA.__binomial_igd_merge,
')
920 FinalFunc = MADLIB_SCHEMA.__binomial_igd_final,
921 InitCond = '{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
'
926 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__binomial_igd_state_diff (
927 state1 DOUBLE PRECISION[],
928 state2 DOUBLE PRECISION[]
929 ) RETURNS DOUBLE PRECISION AS
930 'MODULE_PATHNAME
', '__binomial_igd_state_diff
'
931 LANGUAGE C IMMUTABLE STRICT;
935 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__binomial_igd_result (
936 in_state DOUBLE PRECISION[],
937 feature_sq DOUBLE PRECISION[],
938 threshold DOUBLE PRECISION,
939 tolerance DOUBLE PRECISION
940 ) RETURNS MADLIB_SCHEMA.__elastic_net_result AS
941 'MODULE_PATHNAME
', '__binomial_igd_result
'
942 LANGUAGE C IMMUTABLE STRICT;
944 ------------------------------------------------------------------------
948 CREATE FUNCTION MADLIB_SCHEMA.__binomial_fista_transition (
949 state DOUBLE PRECISION[],
950 ind_var DOUBLE PRECISION[],
952 pre_state DOUBLE PRECISION[],
953 lambda DOUBLE PRECISION,
954 alpha DOUBLE PRECISION,
957 max_stepsize DOUBLE PRECISION,
958 eta DOUBLE PRECISION,
959 use_active_set INTEGER,
961 random_stepsize INTEGER
962 ) RETURNS DOUBLE PRECISION[]
963 AS 'MODULE_PATHNAME
', 'binomial_fista_transition
'
964 LANGUAGE C IMMUTABLE;
968 CREATE FUNCTION MADLIB_SCHEMA.__binomial_fista_merge (
969 state1 DOUBLE PRECISION[],
970 state2 DOUBLE PRECISION[]
971 ) RETURNS DOUBLE PRECISION[] AS
972 'MODULE_PATHNAME
', 'binomial_fista_merge
'
973 LANGUAGE C IMMUTABLE STRICT;
977 CREATE FUNCTION MADLIB_SCHEMA.__binomial_fista_final (
978 state DOUBLE PRECISION[]
979 ) RETURNS DOUBLE PRECISION[] AS
980 'MODULE_PATHNAME
', 'binomial_fista_final
'
981 LANGUAGE C IMMUTABLE STRICT;
984 Perform one iteration step of FISTA for linear models
986 CREATE AGGREGATE MADLIB_SCHEMA.__binomial_fista_step(
987 /* ind_var */ DOUBLE PRECISION[],
988 /* dep_var */ BOOLEAN,
989 /* pre_state */ DOUBLE PRECISION[],
990 /* lambda */ DOUBLE PRECISION,
991 /* alpha */ DOUBLE PRECISION,
992 /* dimension */ INTEGER,
993 /* total_rows */ INTEGER,
994 /* max_stepsize */ DOUBLE PRECISION,
995 /* eta */ DOUBLE PRECISION,
996 /* use_active_set */ INTEGER,
997 /* is_active */ INTEGER,
998 /* random_stepsize */ INTEGER
1000 SType = DOUBLE PRECISION[],
1001 SFunc = MADLIB_SCHEMA.__binomial_fista_transition,
1002 m4_ifdef(`GREENPLUM', `prefunc = MADLIB_SCHEMA.__binomial_fista_merge,
')
1003 FinalFunc = MADLIB_SCHEMA.__binomial_fista_final,
1004 InitCond = '{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
'
1009 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__binomial_fista_state_diff (
1010 state1 DOUBLE PRECISION[],
1011 state2 DOUBLE PRECISION[]
1012 ) RETURNS DOUBLE PRECISION AS
1013 'MODULE_PATHNAME
', '__binomial_fista_state_diff
'
1014 LANGUAGE C IMMUTABLE STRICT;
1018 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__binomial_fista_result (
1019 in_state DOUBLE PRECISION[]
1020 ) RETURNS MADLIB_SCHEMA.__elastic_net_result AS
1021 'MODULE_PATHNAME
', '__binomial_fista_result
'
1022 LANGUAGE C IMMUTABLE STRICT;