Svm.clas.plsql
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
SET serveroutput ON SET trimspool ON SET pages 10000 SET echo ON ----------------------------------------------------------------------- -- Budowa modelu ----------------------------------------------------------------------- -- usuniecie starej tabeli, utworzenie nowej tabeli i wypelnienie jej wartosciami BEGIN EXECUTE IMMEDIATE 'DROP TABLE svm_build'; EXCEPTION WHEN OTHERS THEN NULL; END; / CREATE TABLE svm_build ( id NUMBER PRIMARY KEY, x NUMBER NOT NULL, y NUMBER NOT NULL, c NUMBER NOT NULL CHECK (c IN (-1,1)) ); BEGIN INSERT INTO svm_build VALUES (1,1,1,-1); INSERT INTO svm_build VALUES (2,1,3,-1); INSERT INTO svm_build VALUES (3,2,1,-1); INSERT INTO svm_build VALUES (4,3,2,-1); INSERT INTO svm_build VALUES (5,5,1,-1); INSERT INTO svm_build VALUES (6,5,3,1); INSERT INTO svm_build VALUES (7,1,4,1); INSERT INTO svm_build VALUES (8,2,4,1); INSERT INTO svm_build VALUES (9,7,1,1); INSERT INTO svm_build VALUES (10,8,4,1); COMMIT; END; / -- usuniecie starej tabeli z ustawieniami algorytmu BEGIN EXECUTE IMMEDIATE 'DROP TABLE settings'; EXCEPTION WHEN OTHERS THEN NULL; END; / -- utworzenie i wypelnienie tabeli z ustawieniami algorytmu CREATE TABLE settings ( setting_name VARCHAR2(30), setting_value VARCHAR2(30)); set echo on BEGIN INSERT INTO settings (setting_name, setting_value) VALUES (dbms_data_mining.algo_name, dbms_data_mining.algo_support_vector_machines); INSERT INTO settings (setting_name, setting_value) VALUES (dbms_data_mining.svms_kernel_function, dbms_data_mining.svms_linear); COMMIT; END; / -- usuniecie starego modelu z repozytorium BEGIN DBMS_DATA_MINING.DROP_MODEL('SVMC_Model'); EXCEPTION WHEN OTHERS THEN NULL; END; / -- stworzenie nowego modelu BEGIN DBMS_DATA_MINING.CREATE_MODEL( model_name => 'SVMC_Model', mining_function => dbms_data_mining.classification, data_table_name => 'svm_build', case_id_column_name => 'id', target_column_name => 'c', settings_table_name => 'settings'); END; / -- -- wyswietlenie ustawien modelu -- column setting_name format a30 column setting_value format a30 SELECT setting_name, setting_value FROM TABLE(DBMS_DATA_MINING.GET_MODEL_SETTINGS('SVMC_Model')) ORDER BY setting_name; -- -- wyswietlenie sygnatury modelu -- column attribute_name format a40 column attribute_type format a20 SELECT attribute_name, attribute_type FROM TABLE(DBMS_DATA_MINING.GET_MODEL_SIGNATURE('SVMC_Model')) ORDER BY attribute_name; -- -- wyswietlenie szczegolowych informacji o modelu SET line 120 column class format a10 column aname format a25 column aval format a25 column coeff format 9.99 WITH mod_dtls AS ( SELECT * FROM TABLE(DBMS_DATA_MINING.GET_MODEL_DETAILS_SVM('SVMC_Model')) ), model_details AS ( SELECT D.class, A.attribute_name, A.attribute_value, A.coefficient FROM mod_dtls D, TABLE(D.attribute_set) A ORDER BY D.class, ABS(A.coefficient) DESC ) SELECT class, attribute_name aname, attribute_value aval, coefficient coeff FROM model_details WHERE ROWNUM < 11; ----------------------------------------------------------------------- -- Testowanie modelu ----------------------------------------------------------------------- -- usuniecie starej tabeli testowej, utworzenie nowej tabeli i -- wypelnienie jej wartosciami BEGIN EXECUTE IMMEDIATE 'DROP TABLE svm_test'; EXCEPTION WHEN OTHERS THEN NULL; END; / CREATE TABLE svm_test ( id NUMBER PRIMARY KEY, x NUMBER NOT NULL, y NUMBER NOT NULL, c NUMBER NOT NULL CHECK (c IN (-1,1)) ); BEGIN INSERT INTO svm_test VALUES (1,2,2,-1); INSERT INTO svm_test VALUES (2,6,1,-1); INSERT INTO svm_test VALUES (3,7,0,-1); INSERT INTO svm_test VALUES (4,3,3,1); INSERT INTO svm_test VALUES (5,5,2,1); INSERT INTO svm_test VALUES (6,8,1,1); COMMIT; END; / -- -- wyliczenie macierzy pomylek -- SELECT c AS actual_target_value, PREDICTION(SVMC_Model USING *) AS predicted_target_value, COUNT(*) AS value FROM svm_test GROUP BY c, PREDICTION(SVMC_Model USING *) ORDER BY 1, 2; -- -- wyliczenie dokladnosci modelu -- column accuracy format 9.9999 SELECT SUM(correct)/COUNT(*) AS accuracy FROM (SELECT DECODE(c, PREDICTION(SVMC_Model USING *), 1, 0) AS correct FROM svm_test);