.. role:: raw-html-m2r(raw)
:format: html
RandomForest Classification
====================================================================================================
개요
----------------------------------------------------------------------------------------------------
RandomForest는 Classification / Regression에 모두 사용 할 수 있으며, 특정 값이 누락되어 있어도 사용 할 수 있습니다.
설명
----------------------------------------------------------------------------------------------------
여러개의 Decision Tree를 만들고 *앙상블 기법으로 결과를 결정합니다. 때문에, 오버피팅을 방지할 수 있습니다.
*앙상블 기법 : 여러개의 모델을 학습시켜 그 모델들의 예측결과들을 이용해 하나의 모델보다 더 나은 값을 예측하는 방법
Examples
----------------------------------------------------------------------------------------------------
꽃받침, 꽃잎의 종류에 따른 종의 종류에 대한 샘플데이터 입니다.
.. list-table::
:header-rows: 1
* - *sepal_length
- sepal_width
- *petal_length
- petal_width
- *species
* - 5.1
- 3.5
- 4
- 0.2
- Iris-setosa
* - 4.9
- 3
- 1.4
- 0.2
- Iris-setosa
* - 5.2
- 2.7
- 3.9
- 1.4
- Iris-versicolor
* - 5
- 2
- 3.5
- 1
- Iris-versicolor
* - 6.4
- 3.2
- 5.3
- 2.3
- Iris-virginica
* - 6.5
- 3
- 5.5
- 1.8
- Iris-virginica
* - ...
- ...
- ...
- ...
- ...
*sepal_length: 꽃받침 조각 길이
*petal_length : 꽃잎 길이
*species : 종
fit으로 RandomForestClassification 적용해 분류 하는 모델을 생성하는 명령어 예제입니다.
(앞의 indexer쿼리문은 라벨정보가 되는 ``species``\ 를 ``0, 1, 2``\ 로 바꿔주는 전처리를 수행합니다.)
.. code-block:: none
* | indexer species to s | fit RandomForestClassification FEATURES sepal_length,sepal_width,petal_length,petal_width LABEL s maxDepth=10 INTO modelD
.. list-table::
:header-rows: 1
* - features
- generalizeGini
- space
- numTrees
- numClasses
- space2
- accuracy
- precision
- f1
- recall
* - a
- 0.0532
- |
- 20
- 3
- |
- 0.9933
- 0.9935
- 0.9933
- 0.9933
* - b
- 0.0149
- |
- None
- None
- |
- None
- None
- None
- None
* - c
- 0.4425
- |
- None
- None
- |
- None
- None
- None
- None
* - d
- 0.4894
- |
- None
- None
- |
- None
- None
- None
- None
predict로 modelD에 샘플 데이터를 다시 넣어 예측하는 명령어 예제입니다.
.. code-block:: none
* | predict modelD sepal_length,sepal_width,petal_length,petal_width
.. list-table::
:header-rows: 1
* - sepal_length
- sepal_width
- petal_length
- petal_width
- species
- target
- prediction
* - 5.1
- 3.5
- 4
- 0.2
- Iris-setosa
- 0
- 0
* - 4.9
- 3
- 1.4
- 0.2
- Iris-setosa
- 0
- 0
* - 5.2
- 2.7
- 3.9
- 1.4
- Iris-versicolor
- 1
- 1
* - 5
- 2
- 3.5
- 1
- Iris-versicolor
- 1
- 1
* - 6.4
- 3.2
- 5.3
- 2.3
- Iris-virginica
- 2
- 2
* - 6.5
- 3
- 5.5
- 1.8
- Iris-virginica
- 2
- 2
* - ...
- ...
- ...
- ...
- ...
- ...
- ...
fit_predict로 RandomForestClassification을 적용해 분류 모델링 후 예측하는 명령어 예제입니다.
.. code-block:: none
* | indexer species to s | fit_predict RandomForestClassification FEATURES sepal_length,sepal_width,petal_length,petal_width LABEL s maxDepth=10 INTO modelD
Parameters
----------------------------------------------------------------------------------------------------
.. code-block:: none
algorithm_command : FEATURES f_fields LABEL l_field params INTO model
.. list-table::
:header-rows: 1
* - 이름
- 설명
- 필수/옵션
* - FEATURES f_fields
- 학습에 사용될 특징 column을 입력 받습니다.
- 필수
* - LABEL l_field
- 학습에 사용될 라벨 column을 입력 받습니다.
- 필수
* - params
- *알고리즘 옵션을 지정해줍니다.
- 필수
* - INTO model
- 모델을 저장해주는 예약어 입니다. :raw-html-m2r:`
`\ 경로 (\ **/B-IRIS/USERS/dani/ML/**\ )에 모델, 모델 메타 데이터가 저장됩니다.\ :raw-html-m2r:`
`\ 예 : into modelA
- 옵션
*알고리즘 옵션
.. list-table::
:header-rows: 1
* - 이름
- 설명
- 기본값
* - maxDepth
- tree의 깊이를 설정합니다.\ :raw-html-m2r:`
`\ 예 : maxDepth=10
- 5
* - maxBins
- bin의 최댓값을 설정합니다.
- 32
* - minInstancesPerNode
- split 이후에 반드시 가져야하는 child의 instance 수를 설정합니다.
- 1
* - numTrees
- 만들 tree의 수를 설정합니다.
- 20
* - minInfoGain
- tree의 split을 위한 얻을 수 있는 최소 정보입니다.
- 0.0
* - maxMemoryInMB
- 최대 메모리를 설정합니다.
- 256
* - cacheNodeIds
- 각 트리의 instance 마다 cache node id를 사용할지 안할지 여부 결정합니다.
- False
* - subsamplingRate
- 각각의 decisiontree에서 learning에 사용할 training data의 비율을 설정합니다.
- 1.0
* - impurity
- 계산 결과에서 얻을 수 잇는 정보의 표준을 결정합니다. (gini, entorpy)
- gini
* - checkpointInterval
- cache 하는 checkpoint의 반복 주기를 설정합니다.
- 10
* - featureSubsetStrategy
- 특징의 수를 고려하여 각각의 tree를 얼마나 펼칠지 결정합니다. :raw-html-m2r:`
`\ (auto, all, onethird, sqrt, log2, (0.0-1.0], [1-n])
- auto
Parameters BNF
----------------------------------------------------------------------------------------------------
.. code-block:: none
SparkRandomForestClassification_command : FEATURES fields LABEL l_field params INTO_model
fields : field
| fields COMMA field
field : WORD
| TIMES
| MINUS WORD
l_field : WORD
params : param
| params param
|
param : WORD EQUALS WORD
| WORD EQUALS DOUBLE
| WORD EQUALS LBRACKET words RBRACKET
| WORD EQUALS LBRACKET doubles RBRACKET
words : WORD
| words COMMA WORD
doubles : DOUBLE
| doubles COMMA DOUBLE
INTO_model : INTO WORD
|
WORD = \w+
COMMA = \,
FEATURES = FEATURES | features
LABEL = LABEL | label
INTO = INTO
EQUALS = \=
TIMES = \*
MINUS = -
LBRACKET = \[
RBRACKET = \]
DOUBLE = [-+]?[0-9]+(\.([0-9]+)?([eE][-+]?[0-9]+)?|[eE][-+]?[0-9]+)