지난번에 "자전거 렌털 데이터" 를 가지고 회귀분석(Regression)을 하는 실습을 해봤습니다.
이번에는 그때 사용했던 똑같은 방법, 똑같은 알고리즘(Random Forest)을 이용해서 Classification 을 하는 실습을 해보겠습니다.
이번에 사용할 데이터는 R 에서 ML할때 많이 사용되는 샘플인 IRIS (분꽃) 데이터를 사용해 보겠습니다.
아래에 테스트에 사용할 "IRIS (분꽃) 데이터"를 첨부합니다.
SQL*Developer 에서 아래 파일을 똑같은 이름(IRIS)의 테이블로 Import 합니다.
SQL*Developer 에서 파일을 Import 하는 방법은 여길 참조하세요.
==> >>SQL*Developer 에서 테이블 Import/Export 하는 방법<<
IRIS 데이터는 R에서는 굉장히 유명한 데이터인데, 150건의 분꽃 정보를 담고 있습니다.
분꽃이 setosa, versicolor, virginica 의 3가지 종류가 있다고 합니다. 꽃의 sepal(꽃받침) 과 petal(꽃잎) 의 길이, 넓이를 가지고 분꽃의 종류를 구분하는 것입니다.
Random Forest 알고리즘으로 머신러닝을 해서 얼마나 잘 맞추는 지 확인해보겠습니다.
1) 세팅 테이블 준비
첫번째 단계는 세팅 테이블을 준비하는 것입니다. 어떤 알고리즘을 쓸 것인지, 알고리즘에 사용될 변수들은 어떻게 세팅할 것인지를 지정합니다.
-- 테이블 생성
create table SETTING_RF (
setting_name varchar2(30),
setting_value varchar2(4000)
);
-- 테이블에 데이터 입력
BEGIN
INSERT INTO SETTING_RF (setting_name, setting_value) VALUES
(dbms_data_mining.algo_name, dbms_data_mining.algo_random_forest);
INSERT INTO SETTING_RF (setting_name, setting_value) VALUES
(dbms_data_mining.prep_auto, dbms_data_mining.prep_auto_on);
END;
/
알고리즘별로 세팅해주는 변수값들이 다 다르고 복잡합니다. 이건 알고리즘에 대한 기본지식이 있어야 설정이 가능합니다. 잘 모르는 경우는 디폴트로 자동으로 세팅하는 방법이 있습니다. 그게 바로 prep_auto_on 입니다.
이게 있어서 Random Forest 알고리즘에 대한 지식없이도 누구나 쉽게 머신러닝이 가능합니다.^^
Random Forest 알고리즘에 대한 지식이 있고, 값을 변경하고자 하는 경우 Oracle Data Mining 매뉴얼에 다양한 설정 변수들이 있습니다. 매뉴얼을 참조해서 설정을 변경해주면 되겠습니다.
2) 모델 생성 (학습)
DBMS_DATA_MINING 패키지의 Create_Model() 함수를 호출하는 것으로 모델 생성(학습) 작업이 끝납니다.
begin
dbms_data_mining.create_model(
model_name => 'RF_MODEL_IRIS',
mining_function => dbms_data_mining.classification,
data_table_name => 'IRIS',
case_id_column_name => 'NO',
target_column_name => 'SPECIES',
settings_table_name => 'SETTING_RF'
);
end;
/
model_name : 적절한 이름으로 작명하면 됩니다.
mining_function : classification 으로 씁니다.
data_table_name : 데이터는 위에서 Import 한 테이블 IRIS 입니다.
case_id_column_name : 머신러닝을 할때 테스트 데이터 한건한건을 구분하는 컬럼을 case_id 라고 합니다.
오라클 테이블 개념에서는 PK 에 해당하는 컬럼입니다.
target_column_name : 머신러닝의 목표(대상)에 해당하는 컬럼입니다. 여기서는 SPECIES 컬럼.
settings_table_name : 앞에서 생성한 세팅 테이블
3) 테스트 (예측)
위에서 Create_Model() 함수를 호출함으로써 내부적으로 학습(Learning)이 끝났습니다.
이제, 테스트(예측)만 하면 됩니다.
보통 머신러닝을 할때 데이터를 Train 데이터와 Test 데이터로 나눠서 하는데, 저는 이해를 돕기 위해 IRIS 데이터 150건 전체를 가지고 학습을 했습니다.
테스트도 이 150건 똑같은 데이터를 가지고 해보려고 합니다.
이런식으로 학습한 데이터를 가지고 예측을 하게되면, 얘가(기계가) 얼마나 똘똘하게 맞추는지 측정하기가 쉽다는 장점이 생깁니다. 우리는 정확한 답을 이미 알고 있기 때문이죠~~ ㅋㅋ
오라클에서 머신러닝 학습한 모델로 예측(Predict) 하는 것은 매우 쉽습니다.
아래처럼 predition() 함수를 호출해주면 끝~
-- 예측 데이터 조회
select no, species,
prediction(RF_MODEL_IRIS using *) predicted_value,
prediction_probability(RF_MODEL_IRIS using *) probility
from IRIS;
위 prediction(RF_MODEL_IRIS using *) 의 의미는 RF_MODEL_IRIS 모델을 사용해서 predict 하라는 의미입니다. 이때 using * 는 모델에서 학습할때 사용한 속성(컬럼)들을 모두 사용하라는 의미 되겠습니다.
여기서는 from 절에서 학습한 테이블과 같은 테이블인 IRIS 를 다시 썼는데, 새로운 데이터를 테스트(학습)해 보려면 새로운 테이블로 바꿔주기만 하면 됩니다. 단, 결과값인 species 를 제외한 학습할때 사용한 속성컬럼들이 다 있어야 겠죠~ (NO, SEPAL_LENGTH, ... PETAL_WIDTH)
거의 정확하게 맞춘 것 같은데, 실제로는 얼마나 맞췄는지 아래 SQL문으로 확인해겠습니다.
-- 전체 테스트 데이터중 맞춘 건수, 확률 조회
select total, correct, round(correct / total * 100, 2) as percent
from (
select count(*) as total,
sum(decode(species, predicted_value, 1, 0)) as correct
from (
select no, species,
prediction(RF_MODEL_IRIS using *) predicted_value,
prediction_probability(RF_MODEL_IRIS using *) probility
from IRIS
)
);
음, 96% 가 나왔네요. 150개중에 144개를 맞췄습니다.
Oracle 에서 제공하는 Classification 알고리즘은 Random Forest 외에도 Naive Bayes, SVM, Neural Network 등 많이 있습니다. 다른 알고리즘으로는 몇 %나 나오는지 한번씩 테스트를 해봐야 겠네요.
참조) >> 오라클 DBMS 내에서 무료로 제공하는 머신러닝 알고리즘 <<
참조) >> 오라클 머신러닝 - SQL*Plus 에서 수치 예측(Regression, 회귀분석) 실습 예제 <<
참조) >> 오라클 머신러닝 - SQL*Plus 에서 클러스터링(Clustering) 실습 예제 <<
참조) >> 오라클 머신러닝 - SQL*Developer (Data Miner) 에서 클러스터링(Clustering) 실습 예제 <<
참조) >> 오라클 머신러닝 - SQL*Plus 에서 수치 예측(Classification, 분류) 실습 예제 - Neural Network 알고리즘 <<
'IT관련' 카테고리의 다른 글
VirtualBox 오류 - 가상 머신의 세션을 열 수 없습니다. E_ACCESSDENIED (0x80070005) (0) | 2020.06.09 |
---|---|
오라클 머신러닝 - SQL*Plus 에서 수치 예측(Classification, 분류) 실습 예제 - Neural Network 알고리즘 (0) | 2020.06.05 |
오라클 OADesktop에서 날짜 데이터 유형변경, 날짜컬럼으로 차트 그리기 실습 (0) | 2020.06.05 |
오라클 OADesktop(구 DVDesktop)으로 DB접속, 테이블 가져와서 차트 그리기 실습 (0) | 2020.06.05 |
오라클 머신러닝 - SQL*Plus 에서 수치 예측(Regression, 회귀분석) 실습 예제 (0) | 2020.06.05 |