W ramach dzisiejszych zajęć poznamy popularną w ostatnich latach metodę eksploracji danych Support Vector Machines. Przy okazji obejrzymy jeszcze raz krzywą lift oraz krzywą ROC (ang. Receiver Operating Characteristic).
SVM
. Zapoznaj się z opisem zbioru danych. Wczytaj dane za pomocą operatora Read CSV
i prześlij je do operatora Nominal to Numerical
, zamieniając atrybuty nominalne na numeryczne zgodnie z metodą unique integers. Wewnątrz operatora Split Validation
umieść operator SVM
i wykorzystaj początkowo kernel dot (możesz też poeksperymentować z innymi rodzajami kerneli). Obejrzyj uzyskany model. Zwiększ wartość parametru C
zezwalając na pewną elastyczność granicy decyzyjnej. Możesz manipulować modelem także za pomocą parametrów L pos
i L neg
, które działają analogicznie do funkcji kosztu.Sample (Stratified)
do wylosowania 10% danych. Prześlij je do operatora Split Validation
, wewnątrz którego umieść operator Polynomial by Binominal Classification
wykorzystujący we wnętrzu operator SVM
. Sprawdź, która z metod (1-against-all, 1-against-1, ECOC) daje najlepsze rezultaty.Generate Direct Mailing Data
w celu wygenerowania 1000 syntetycznych rekordów. Prześlij wygenerowany zbiór uczący do operatora Split Validation
. Wewnątrz operatora Split Validation
wykorzystaj w fazie uczenia operator Naive Bayes
, natomiast w fazie testowania umieść kolejno: operator Create Lift Chart
, operator Apply Model
oraz operator Performance (Classification)
. Dodatkowo, port lift
operatora Create Lift Chart
prześlij do operatora Remember
i zapisz w repozytorium pod dowolną nazwą (jako wartość io object
wybierz LiftParetoChart). W procesie nadrzędnym dodaj operator Recall
i odczytaj obiekt zapisany w trakcie walidacji modelu, wysyłając go jako końcowy wynik przepływu. Jeśli chcesz, możesz też wyświetlić zbiór uczący (port tra
operatora Validation
). Aby upewnić się, że operatory są wykonywane we właściwej kolejności, wybierz z menu opcję Proces - Operation Execution Order - Order Execution
i w razie konieczności popraw przepływ: walidacja klasyfikatora musi się odbyć przed operatorem Recall
.
Sonar
i wyślij go do operatora Split Validation
. Wewnątrz operatora do walidacji w fazie uczenia wykorzystaj operator Support Vector Machine (LibSVM)
, a w fazie testowania użyj kolejno: operatora Apply Model
, operatora Find Threshold
, operatora Apply Threshold
, a w końcu operatora Performance
.
Sonar
, a następnie dodaj operator Add Noise
. Nie dodawaj nowych atrybutów, ale wprowadź 5% szum we wszystkich atrybutach. Tak zmodyfikowany zbiór uczący wyślij do operatora Compare ROCs
. Wewnątrz tego operatora umieść operatory Naive Bayes
, Decision Tree
oraz Support Vector Machines
. Port roc
operatora Compare ROCs
wyślij jako wynik przepływu. Obejrzyj i porównaj krzywe ROC klasyfikatorów.DESCRIBE education_spending SELECT * FROM education_spending;
DROP TABLE normalization;
DROP VIEW v_prepared;
RESIDENTS
, INCOME
, UNDER18
, i EXPENDITURE
.BEGIN -- utworzenie tabeli do przechowywania parametrow normalizacji DBMS_DATA_MINING_TRANSFORM.CREATE_NORM_LIN ( norm_table_name => 'normalization'); -- normalizacja za pomoca metody min-max DBMS_DATA_MINING_TRANSFORM.INSERT_NORM_LIN_MINMAX ( norm_table_name => 'normalization', data_table_name => 'education_spending', exclude_list => DBMS_DATA_MINING_TRANSFORM.COLUMN_LIST('ID','STATE','REGION')); -- utworzenie perspektywy pokazujacej znormalizowane dane DBMS_DATA_MINING_TRANSFORM.XFORM_NORM_LIN ( norm_table_name => 'normalization', data_table_name => 'education_spending', xform_view_name => 'v_prepared'); END;
DROP TABLE settings;
ALTER SESSION SET NLS_LANGUAGE = english; ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ".,";
CREATE TABLE settings ( setting_name VARCHAR2(30), setting_value VARCHAR2(30));
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); INSERT INTO settings (setting_name, setting_value) VALUES (dbms_data_mining.svms_conv_tolerance, 0.002); INSERT INTO settings (setting_name, setting_value) VALUES (dbms_data_mining.svms_outlier_rate, 0.1); COMMIT; END;
BEGIN DBMS_DATA_MINING.DROP_MODEL('SVM_Outlier'); EXCEPTION WHEN OTHERS THEN NULL; END;
v_prepared
. Zauważ, że parametr target_column_name
przyjmuje wartość NULL
, co oznacza uruchomienie wersji one-class algorytmu SVM.BEGIN DBMS_DATA_MINING.CREATE_MODEL( model_name => 'SVM_Outlier', mining_function => dbms_data_mining.classification, data_table_name => 'v_prepared', case_id_column_name => 'id', target_column_name => NULL, settings_table_name => 'settings'); END;
SELECT setting_name, setting_value FROM TABLE(DBMS_DATA_MINING.GET_MODEL_SETTINGS('SVM_Outlier')) ORDER BY setting_name; SELECT attribute_name, attribute_type FROM TABLE(DBMS_DATA_MINING.GET_MODEL_SIGNATURE('SVM_Outlier')) ORDER BY attribute_name;
SELECT id, state, region, income, residents, under18, expenditure, prediction_probability(SVM_Outlier, 0 using *) AS outlier_pred FROM v_prepared ORDER BY prediction_probability(SVM_Outlier, 0 using *) DESC;
Użyj narzędzia Orange Data Mining do skonstruowania przepływu obrazującego wykorzystanie algorytmu SVM. W tym celu załaduj dostarczony wraz z narzędziem zbiór danych heart_disease.tab
i obejrzyj jego zawartość, a następnie przetestuj operator SVM
porównując go z operatorami Majority
, Decision Tree
oraz Naive Bayes
. Postaraj się zmodyfikować przepływ (parametry, dodatkowe operatory) tak, aby uzyskać dokładność większą niż najlepszy z tych algorytmów.
Początkowy przepływ powinien wyglądać tak: