kranov: (Default)
Подключаемся dmsys/dmsys

Таблица для настроек модели.
create table CRED_SETTINGS (
  SETTING_NAME  VARCHAR2(30),
  SETTING_VALUE VARCHAR2(128));

Заполняем настройки, попробуем алгоритм algo_naive_bayes
begin
DELETE FROM CRED_SETTINGS;
INSERT INTO CRED_SETTINGS (setting_name, setting_value)
  VALUES (dbms_data_mining.algo_name, dbms_data_mining.algo_naive_bayes);
INSERT INTO CRED_SETTINGS (setting_name, setting_value)
  VALUES (dbms_data_mining.nabs_singleton_threshold , TO_CHAR(0.01));
INSERT INTO CRED_SETTINGS (setting_name, setting_value)
  VALUES (dbms_data_mining.nabs_pairwise_threshold, TO_CHAR(0.01));
COMMIT;
end;

Таблица с тренировочными данными.
create table CRED_TRAINING(
  id number,             -- уникальный id
  age float,             -- возраст нормализованный (0..1)
  sex varchar2(1),       -- пол 
  num_child float,       -- кол-во детей (0..1)
  accepted varchar2(1)); -- цель (даем/не даем кредит)

Заполняем тренировочными данными (0,9 -- стареньким кредит не даем).
insert into CRED_TRAINING values (0, '0,1', 'm', '0,5', 'y');
insert into CRED_TRAINING values (1, '0,9', 'f', '1', 'n');
insert into CRED_TRAINING values (2, '0,9', 'm', '0,5', 'n');
insert into CRED_TRAINING values (3, '0,9', 'm', '0,5', 'n');
insert into CRED_TRAINING values (4, '0,4', 'm', '0,5', 'y');
insert into CRED_TRAINING values (5, '0,3', 'm', '0', 'y');
insert into CRED_TRAINING values (6, '0,4', 'm', '0,5', 'y');
insert into CRED_TRAINING values (7, '0,2', 'm', '0,5', 'y');
insert into CRED_TRAINING values (8, '0,4', 'm', '0,5', 'y');
insert into CRED_TRAINING values (9, '0,3', 'm', '0,5', 'y');
commit;

Тренируем, модель называем CRED, используем classification т.к. цель y/n
begin 
dbms_data_mining.create_model('CRED', dbms_data_mining.classification, 
                      'cred_training', 'id','accepted', 'cred_settings');
commit;
end;

Проверяем модель на исходных данных, результат попадет в CRED_RESULT
(создается автоматически).
begin 
--execute immediate 'drop table CRED_RESULT';
dbms_data_mining.apply('cred', 'cred_training', 'ID', 'CRED_RESULT');
commit;
end;

В результирующей таблице, получаем вероятность для каждого класса.
select t.id, t.accepted, r.prediction, round(r.probability,2)
from cred_training t, cred_result r
where t.id = r.id and  r.probability >0.3

IDACCEPTEDPREDICTIONROUND(R.PROBABILITY,2)
1nn1
5yy1
6yy1
7yy1
8yy1
9yy1
2nn1
3nn1
4yy1
0yy1

Все совпадает с вероятностью 1.

Проверяем на "дедушках"
create table CRED_QUERY as 
select id, age, sex, num_child from CRED_TRAINING where 1=0;
insert into CRED_QUERY values (0, '0,9', 'f', '0');
insert into CRED_QUERY values (1, '0,9', 'm', '1');
insert into CRED_QUERY values (2, '0,9', 'f', '0,5');
insert into CRED_QUERY values (3, '0,9', 'm', '0');
insert into CRED_QUERY values (4, '0,9', 'm', '0,5');
commit;

begin
execute immediate 'drop table CRED_RESULT';
dbms_data_mining.apply('cred', 'CRED_QUERY', 'ID', 'CRED_RESULT');
commit;
end;

select t.*,r.prediction, round(r.probability,2) 
from CRED_QUERY t, cred_result r
where t.id = r.id and  r.probability >0.2

IDAGESEXNUM_CHILDPREDICTIONROUND(R.PROBABILITY,2)
00,9f0n1
10,9m1n1
20,9f0,5n1
30,9m0n0,67
30,9m0y0,33
40,9m0,5n1

Одному из дедушек с полом m и без детей повезло больше, вероятность положительного ответа 0,33.
kranov: (Default)
В оракле две взаимоисключающих опции Data Mining и Data Mining Scoring Engine.
Я по ошибке поставил Scoring Engine, его надо снести инсталлятором и в виндоусе остановки через shutdown недостаточно, надо останавливать службу, чтобы загрузилась библиотека Data Mining. Также Data Mining-у нужна java, а я обычно ее не ставлю т.к. не пользуюсь.

Короче выглядеть оно должно так:

SELECT * FROM V$OPTION WHERE PARAMETER like '%Mining%'
PARAMETERVALUE
Data MiningTRUE
Data Mining Scoring EngineFALSE


select d.comp_name, d.version, d.status from dba_registry d
COMP_NAMEVERSIONSTATUS
Oracle Expression Filter10.2.0.4.0VALID
Oracle Data Mining10.2.0.4.0VALID
Oracle Database Catalog Views10.2.0.4.0VALID
Oracle Database Packages and Types10.2.0.4.0VALID
JServer JAVA Virtual Machine10.2.0.4.0VALID
Oracle XDK10.2.0.4.0VALID
Oracle Database Java Packages10.2.0.4.0VALID

Profile

kranov: (Default)
kranov

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 21st, 2017 05:41 pm
Powered by Dreamwidth Studios