RandomForest Classification¶
개요¶
RandomForest는 Classification / Regression에 모두 사용 할 수 있으며, 특정 값이 누락되어 있어도 사용 할 수 있습니다.
설명¶
여러개의 Decision Tree를 만들고 *앙상블 기법으로 결과를 결정합니다. 때문에, 오버피팅을 방지할 수 있습니다.
*앙상블 기법 : 여러개의 모델을 학습시켜 그 모델들의 예측결과들을 이용해 하나의 모델보다 더 나은 값을 예측하는 방법
Examples¶
꽃받침, 꽃잎의 종류에 따른 종의 종류에 대한 샘플데이터 입니다.
*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
로 바꿔주는 전처리를 수행합니다.)
* | indexer species to s | fit RandomForestClassification FEATURES sepal_length,sepal_width,petal_length,petal_width LABEL s maxDepth=10 INTO modelD
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에 샘플 데이터를 다시 넣어 예측하는 명령어 예제입니다.
* | predict modelD sepal_length,sepal_width,petal_length,petal_width
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을 적용해 분류 모델링 후 예측하는 명령어 예제입니다.
* | indexer species to s | fit_predict RandomForestClassification FEATURES sepal_length,sepal_width,petal_length,petal_width LABEL s maxDepth=10 INTO modelD
Parameters¶
algorithm_command : FEATURES f_fields LABEL l_field params INTO model
이름 | 설명 | 필수/옵션 |
---|---|---|
FEATURES f_fields | 학습에 사용될 특징 column을 입력 받습니다. | 필수 |
LABEL l_field | 학습에 사용될 라벨 column을 입력 받습니다. | 필수 |
params | *알고리즘 옵션을 지정해줍니다. | 필수 |
INTO model | 모델을 저장해주는 예약어 입니다. 경로 (/B-IRIS/USERS/dani/ML/)에 모델, 모델 메타 데이터가 저장됩니다. 예 : into modelA |
옵션 |
*알고리즘 옵션
이름 | 설명 | 기본값 |
---|---|---|
maxDepth | tree의 깊이를 설정합니다. 예 : 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를 얼마나 펼칠지 결정합니다. (auto, all, onethird, sqrt, log2, (0.0-1.0], [1-n]) |
auto |
Parameters BNF¶
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]+)