Nnmf.plsql
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
SET serveroutput ON SET pages 10000 SET linesize 100 SET echo ON ----------------------------------------------------------------------- -- Budowa modelu ----------------------------------------------------------------------- -- usuniecie obiektow pozostalych po poprzednich uruchomieniach BEGIN EXECUTE IMMEDIATE 'DROP TABLE normalization'; EXCEPTION WHEN OTHERS THEN NULL; END; / BEGIN EXECUTE IMMEDIATE 'DROP VIEW v_normalized'; EXCEPTION WHEN OTHERS THEN NULL; END; / -- -- normalizacja atrybutu numerycznego AGE -- BEGIN -- utworzenie tabeli do przechowywania ustawien normalizacji DBMS_DATA_MINING_TRANSFORM.CREATE_NORM_LIN( norm_table_name => 'normalization'); -- wyliczenie parametrow normalizacji DBMS_DATA_MINING_TRANSFORM.INSERT_NORM_LIN_MINMAX ( norm_table_name => 'normalization', data_table_name => 'mining_data_build_v', exclude_list => dbms_data_mining_transform.column_list ( 'yrs_residence', 'affinity_card', 'bulk_pack_diskettes', 'flat_panel_monitor', 'home_theater_package', 'bookkeeping_application', 'printer_supplies', 'y_box_games', 'os_doc_set_kanji', 'cust_id') ); -- utworzenie perspektywy przedstawiajacej znormalizowane dane DBMS_DATA_MINING_TRANSFORM.XFORM_NORM_LIN ( norm_table_name => 'normalization', data_table_name => 'mining_data_build_v', xform_view_name => 'v_normalized'); END; / -- usuniecie starej tabeli przechowujacej ustawienia BEGIN EXECUTE IMMEDIATE 'DROP TABLE settings'; EXCEPTION WHEN OTHERS THEN NULL; END; / -- utworzenie tabeli z ustawieniami i wypelnienie jej parametrami algorytmu CREATE TABLE settings ( setting_name VARCHAR2(30), setting_value VARCHAR2(30)); BEGIN INSERT INTO settings (setting_name, setting_value) VALUES (dbms_data_mining.feat_num_features, 10); INSERT INTO settings (setting_name, setting_value) VALUES (dbms_data_mining.nmfs_conv_tolerance,0.1); INSERT INTO settings (setting_name, setting_value) VALUES (dbms_data_mining.nmfs_num_iterations,50); INSERT INTO settings (setting_name, setting_value) VALUES (dbms_data_mining.nmfs_random_seed,-1); COMMIT; END; / -- usuniecie poprzednio wygenerowanego modelu BEGIN DBMS_DATA_MINING.DROP_MODEL('NNMF_Model'); EXCEPTION WHEN OTHERS THEN NULL; END; / -- zbudowanie modelu BEGIN DBMS_DATA_MINING.CREATE_MODEL( model_name => 'NNMF_Model', mining_function => dbms_data_mining.feature_extraction, data_table_name => 'v_normalized', case_id_column_name => 'cust_id'); 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('NNMF_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('NNMF_Model')) ORDER BY attribute_name; -- wyswietlenie szczegolowych danych o modelu column attribute_name format a40; column attribute_value format a20; SELECT F.feature_id, A.attribute_name, A.attribute_value, A.coefficient FROM TABLE(DBMS_DATA_MINING.GET_MODEL_DETAILS_NMF('NNMF_Model')) F, TABLE(F.attribute_set) A ORDER BY feature_id,attribute_name,attribute_value; ----------------------------------------------------------------------- -- Zastosowanie modelu ----------------------------------------------------------------------- -- usuniecie starych struktur z bazy danych BEGIN EXECUTE IMMEDIATE 'DROP VIEW v_prepared'; EXCEPTION WHEN OTHERS THEN NULL; END; / BEGIN EXECUTE IMMEDIATE 'DROP TYPE Featattrs'; EXCEPTION WHEN OTHERS THEN NULL; END; / BEGIN EXECUTE IMMEDIATE 'DROP TYPE Featattr'; EXCEPTION WHEN OTHERS THEN NULL; END; / -- utworzenie perspektywy z danymi do zastosowania BEGIN DBMS_DATA_MINING_TRANSFORM.XFORM_NORM_LIN ( norm_table_name => 'normalization', data_table_name => 'mining_data_apply_v', xform_view_name => 'v_prepared'); END; / -- -- wykorzystanie funkcji SQL do uzycia modelu i wyswietlenia szukanych cech -- -- -- wyswietl cechy odpowiadajace klientom w podanym zbiorze danych -- SELECT FEATURE_ID(NNMF_Model USING *) AS feat, COUNT(*) AS cnt FROM v_prepared GROUP BY FEATURE_ID(NNMF_Model USING *) ORDER BY cnt DESC; -- -- wyswietl 10 klientow odpowiadajacych cesze nr.3 w kolejnosci dokladnosci dopasowania -- SELECT * FROM (SELECT cust_id, FEATURE_VALUE(NNMF_Model, 3 USING *) match_quality FROM v_prepared ORDER BY match_quality DESC) WHERE ROWNUM < 11; column value format 99.9999 column fid format 999 column attr format a25 column val format a20 column coeff format 9.9999 -- -- wyswietl 10 najwazniejszych cech opisujacych wybranego klienta (cust_id = 100002) -- i zidentyfikuj najistotniejsze atrybuty (coefficient > 0.25) dla kazdej cechy -- CREATE TYPE Featattr AS OBJECT ( attr VARCHAR2(30), val VARCHAR2(30), coeff NUMBER) / CREATE TYPE Featattrs AS TABLE OF Featattr / column val format a50 WITH feat_tab AS ( SELECT F.feature_id fid, A.attribute_name attr, TO_CHAR(A.attribute_value) val, A.coefficient coeff FROM TABLE(DBMS_DATA_MINING.GET_MODEL_DETAILS_NMF('NNMF_Model')) F, TABLE(F.attribute_set) A WHERE A.coefficient > 0.25 ), feat AS ( SELECT fid, CAST(COLLECT(Featattr(attr, val, coeff)) AS Featattrs) f_attrs FROM feat_tab GROUP BY fid ), cust_10_features AS ( SELECT T.cust_id, S.feature_id, S.value FROM (SELECT cust_id, FEATURE_SET(NNMF_Model, 10 USING *) pset FROM v_prepared WHERE cust_id = 100002) T, TABLE(T.pset) S ) SELECT A.value, A.feature_id fid, B.attr, B.val, B.coeff FROM cust_10_features A, (SELECT T.fid, F.* FROM feat T, TABLE(T.f_attrs) F) B WHERE A.feature_id = B.fid ORDER BY A.value DESC, A.feature_id ASC, coeff DESC, attr ASC, val ASC;