Random Uniform Forests: an overview part 3

Saïp Ciss∗
September 22, 2014


5.3 Incremental learning, big data and/or streaming data

요즘은, 빅 데이터와 그리고 그것을 더 나은 예측을 위해 그것을 어떻게 사용하는지에 대해 말하지 않는 것은 힘들다.
우리의 관점에서, 빅 데이터는 합리적인 시간 내에 단일 워크스테이션에서 처리할 수 없는 모든 데이터이다.
빅 데이터는 2개의 주요 작업을 수반한다: 설명 통계량을 만들고 그리고 예측 모델을 만든다. 기계 학습은 두번째에 포함된다.
빅 데이터를 가지고 예측 모델을 생성할 때, 주요 문제는 정밀도의 (너무 많은) 손실 없이 모든 정보를 집계하는 방법이다, 결코 한번에 모든 데이터를 처리할 수 없음. 일반적인 해결책은 블록으로 데이터를 나눈다 그리고 입력 데이터를 가지고 그들 자신을 갱신하기 위한 모델에 능력을 주어야 한다. 데이터의 각 덩어리(chunk)는 (임의 접근) 메모리(RAM)에 존재해야 할 것이다.
빅데이터에 적용된 기계 학습은, 적어도, 어떤 심각한 복잡성을 가져올 수 있는 2가지 문제에 직면한다:
  • 분포의 변화, 통계적 학습을 가지기 위해 현재는 이론이 적립되지 않았다,
  • 모델 파시모니(model parsimony, 모델 빈약), 무한 학습의 필요성 질문을 요구. 다른 말로, 빅 데이터는 끝이 없기 때문에, 모델은 데이터가 입력됨에 따라 연속적인 학습이 필요한가?
사실, 통계적 학습에서, 문제는 실제로 크기가 아니라 i.i.d. 가정이 하나의 블록으로 만들 때 일치하는지 아닌지이다. 일치한다면, 크기 문제는 없다, 모델은 예측 오류에서 한계를 보일 것이다. 만약 일치하지 않는다면, 그러면 예측 오류는 아마도 흔들릴(oscillation) 것이며 그리고 한계가 놓일 위치를 알지 못한 상태에서 모델은 진동을 블록 수로 감소하게 만들어야 한다.
기계 학습의 주요 목적은 그것의 기억 또는 학습 절차를 호출하여 그들의 현재 지식을 (잘) 일반화할 수 있는 알고리즘을 만들어야 한다. Random Uniform Forest는, 다른 데이터에서 많은 다른 모델을 결합할 수 있고 그리고 이후에 메모리에 존재할 수도 있는 모든 데이터에서 가장 최고를 얻기 위해 노력하는, 이런 모델을 만들려고 시도 한다. 모든 데이터는 하드 디스크나 SSD에 있을 수 있지만, 그러나 너무 느려 합리적인 시간 내에 계산할 수 없다.
아래의 방법으로 생성되는 인공 데이터로 실제 경우를 고려하자:
  1. 3개의 데이터 셋을 가진다고 가정. 첫번째 두개는 서로 연속해서 입력되고 그리고 검증 집합 세번째는 마지막으로 입력된다,
  2. 2개의 첫번째 데이터 셋은 짝 (X, Y)로 같은 결합 본포를 가질 필요가 없다고 가정,
  3. 세번째 데이터셋의 (결합) 분포는 첫번째와 두번째에서 하나 그리고 그 자신에서 하나의 분포에 의존한다고 가정,
  4. 하드웨어가 제한되므로, 알고리즘이 같은 시간에 계산할 수 있는 최대 크기는 첫번째 데이터셋의 크기이다,
  5. 우리는 첫번째와 두번째 데이터 셋을 합칠 수없다. 데이터의 100 또는 더 많은 덩어리를 가진다고 가정할 수 있다. 표본(Sampling) 그리고 합병(merging)은 분포가 변경되는 문제가 될 수 있다.
분포가 변경되면, 특징 5는 크거나 연속적인 데이터가 도착하는 실제 사례이다. 계산을 쉽게하기 위해, 우리는 작은 데이터 셋을 고려한다 그러나 전체 데이터의 하나의 덩어리는 같은 시간에서 계산 될 수 있어도 문제는 변경되지 않는다. 그러면, 표본 데이터 또는 변수를 갱신하는 대신에, 요점은 모델을 갱신해야 한다. 예로, 우리는 2개의 훈련 집합을 사용하므로, 목적은 점진적 학습(incremental learning)이 기본적으로 수행되는 방법을 보여 주어야 한다.
재생산을 위해 전체 R 스크립트를 제공하고 그리고 Random Uniform Forest가 문제에서 동작하는 방법을 보여준다.

Protocol

  1. 첫번째 훈련 표본을 생성하고 그리고 검증 표본의 첫번째 부분을 생성하기 위해 그것의 일부를 취한다,
  2. 두번째 데이터셋을 생성하고 그리고 검증 표본의 두번째 부분을 생성하기 위해 그것의 일부를 취한다. 분포의 (무작위) 매개 변수는 아마도 변경된다.
  3. 검증 표본의 마지막 부분을 생성하고 그리고 1과 2에서 만들어진 다른 일부와 그것을 병합한다. 분포의 매개 변수는 2개의 훈련 표본의 그것들과 더 이상 같지 않다.
위의 주요 요지는 i.i.d 가정은 그 자신의 매개 변수로 무작위로 생성되었기 때문에, 표본은 아마도 더 이상 유효하지 않다. 제약으로 남아있는 유일한 것은, 어떤 임의 매개 변수를 가지고 규칙과 일치하게 만든, 관측(observation)과 표기(label) 간에 관계이다. 알고리즘은 제약 또는 학습을 위한 일정-시간을 가지는 검증 표기(label)에 일치하는 그 자신의 경로를 찾아야 한다.

Data model

먼저 데이터를 생성하는 모델을 작성하자. 무작위 변수의 짝 (X, Y)를 가정, X는 d-차원(d-dimensional) 가우시안 벡터, X ∈ ℜd, d > 6, 그리고 그것의 요소는 독립변수 Y ∈ {0, 1}로 가정하는 경우. 우리는 아래의 절차에 따라 (X, Y) 표본을 생성한다:
각 j ∈ [1, d]에서, Z(j) 고려, Z(j) ~ U[-10, 10].
각 j ∈ [1, d]에서, X(j) 생성,
인 경우, Zj는 무작의 변수 Z(j)의 하나의 실제 값을 가짐.
그러면, Y를 위한 규칙 정의, 표기
이고,
를 가짐.

Script to generate data: Example 1

전체 스크립트를 R command line 인터페이스에 간단히 붙여 넣을 수 있다.
library(randomUniformForest)
set.seed(2014)
n = 1000; p = 50 # one may reduce or increase number of observations or variables

# call the script that generates a p-dimensional randomized Gaussian vector;
# for each variable mean and standard deviation are equal and randomly picked
# between -10 and 10, using the continuous Uniform distribution

X = simulationData(n, p)
X = fillVariablesNames(X)

# generate the rule to define labels

epsilon1 = runif(n,-1,1)
epsilon2 = runif(n,-1,1)
rule = 2*(X[,1]*X[,2] + X[,3]*X[,4]) + epsilon1*X[,5] + epsilon2*X[,6]
Y = as.factor(ifelse(rule > mean(rule), 1,0))

# retain some data (30%) to generate first part of the test sample

randomIdx = sample(n, floor(0.30*n))
X.test1 = X[randomIdx,]

# and generate the first training sample

X.train1 = X[-randomIdx,]
Y.train1 = Y[-randomIdx]

# Then, generate the second training sample :

set.seed(1992)
X = simulationData(n, p)
X = fillVariablesNames(X)
epsilon1 = runif(n,-1,1)
epsilon2 = runif(n,-1,1)
rule = 2*(X[,1]*X[,2] + X[,3]*X[,4]) + epsilon1*X[,5] + epsilon2*X[,6]
Y = as.factor(ifelse(rule > mean(rule), 1, 0))

# retain some data (30%) to generate second part of the test sample
# and generate the second training sample

randomIdx = sample(n, floor(0.3*n))
X.test2 = X[randomIdx,]
X.train2 = X[-randomIdx,]
Y.train2 = Y[-randomIdx]

# generate the test set :
# one third of the data coming from its own distribution

set.seed(1968)
X.test3 = simulationData(floor(0.3*n), p)
X.test3 = fillVariablesNames(X.test3)

# and merge it with other parts generated

X.test = rbind(X.test1, X.test2, X.test3)

# test labels have the same rule than training labels,
# using the observations of the test set

epsilon1 = runif(nrow(X.test),-1,1)
epsilon2 = runif(nrow(X.test),-1,1)
rule = 2*(X.test[,1]*X.test[,2] + X.test[,3]*X.test[,4]) +
epsilon1*X.test[,5] + epsilon2*X.test[,6]
Y.test = as.factor(ifelse(rule > mean(rule), 1, 0))

# Finally, we have two train samples ’X.train1’ and ’X.train2’ with each
# 700 observations and 50 variables, their labels ’Y.train1’ and ’Y.train1’,
# and a test set ’X.test’ with 900 observations and 50 variables
# and its labels ’Y.test’.
Random Uniform Forest는 점증적 학습(incremental learning)을 달성했다. 이것은 (덩어리로) 입력되는 데이터를 모델로 생성하고, 모델을 갱신하고 그리고 일정-시간 학습 과정을 사용한다. 그러므로 이전 데이터는 새로운 데이터가 입력되었을 때 다시 진행될 필요가 없다. Random Uniform Forests에서, 학습 과정은, 오래 있을 수 있는 시간이 지나면, 기억 과정이 된다, 학습은 모델이 성장함에 따라 점점 더 필요 없게 되는 경향이 있다. randomForest 패키지 그리고 gbm을 제외하고(그러나 덜 직접적인) R 패키지 내에서 온라인 또는 점증적 학습 알고리즘을 찾지 못했다. 그러므로 우리는 비교로 randomForest를 사용한다. 학습 작업은 3개의 핵심 과정이 요구된다:
  1. 각 덩어리(chunk)에 대한 모델을 계산하고, 스케일링과 같은 전처리 단계를 추가한다.
  2. 모델 결합,
  3. 결국, 선택 메커니즘을 적용하기 위한 후-처리.
모든 작업은 단순하다 그러나 알고리즘을 요구하고 그리고 모델을 정제한다. 일반적으로 예측 오류는 어디에서 어떻게 노력해야하는지에 대한 통찰력을 제공하는 계량이다. 우리는 2 단계로 진행한다:
A - 첫번째 하나는 purely random forest를 호출한다; 데이터에 의존하지 않는(혹은 매우 약하게 의존)하는 분류기의 random forest 모델이다. 각 노드에서, 각 후보 변수와 분할-점은 무작위로 선택된다. randomForest 알고리즘과 달리 Random Uniform Forests는 무작위성이 알고리즘의 모든 부분에서 균일한 순수한 uniformly random forest를 허용한다. 최선의 경우에, purely uniformly random forests는 수렴할 것이다 그리고 주요 요지는, 여기서, 데이터에 독립적이여야 한고 그리고 모델의 (거의) 모든 변수를 잡아내야 한다. 따라서 후자는 만약 수렴이 데이터에 독립적으로 발생하면, 그러면 제공된 OOB 오류는 i.i.d가 더 이상 유지되지 않으므로 검증 집합을 향해 갔을 때, 최선은 우리가 기대할 수 있는 하나가 될 것임을 나타낸다. 어쨌든, 경험적으로, 후자의 분포는 훈련 집합에서 그것들과 어떤 관계를 가지거나 또는 적어도 관측과 표기(label) 간에 관계의 구조는 진행하는 어떤 데이터에서 변경되지 않음을 기대할 수 있다. 다른 말로, 분포는 변경될 수 있다, 그러나 관측과 표기(label) 간의 관계는 적어도 우리 예제에서는 유지된다. 그러면 purely uniformly random forest를 산정할 수 있다.

Learning models

# we use nodesize = 5 and ntree = 500 for stabilization

pURF.model1 = randomUniformForest(X.train1, Y = as.factor(Y.train1),
                                  ntree = 500, nodesize = 5, mtry = 1 )
pURF.model2 = randomUniformForest(X.train2, Y = as.factor(Y.train2),
                                  ntree =500, nodesize = 5, mtry = 1)
                                  
# combine
pURF.combineModels = rUniformForest.combine(pURF.model1, pURF.model2)

# and look for OOB evaluation
pURF.combineModels

# it displays
# ...
Out-of-bag (OOB) evaluation
OOB estimate of error rate: 44.93%
OOB error rate bound (with 1% deviation): 48.15%

OOB confusion matrix:
    0   1 class.error
0 398 308      0.4363
1 321 373      0.4625

OOB estimate of AUC: 0.5506
OOB estimate of AUPR: 0.5369
OOB estimate of F1-score: 0.5425
OOB (adjusted) geometric mean: 0.5506

Breiman’s bounds
Prediction error (expected to be lower than): 14.17%
Upper bound of prediction error: 16.06%
Average correlation between trees: 0.0095
Strength (margin): 0.2701
Standard deviation of strength: 0.1012
분포는 아마도 변경될 것이기 때문에, 또한 AUC와 Breiman 경계에 관심이 있다. 후자는 트리의 매우 낮은 상관관계가 유일한 희망이 있음을 나타낸다. 놀랍게도 그것은 너무 낮아서 경계는 너무 많이 최적화된 것으로 보인다. 그것은 트리의 상관관계가 분포를 무시한다는 것에 주목할 수 있다. 더 분명하게, 만약 트리가 매우 약하게 의존하면, 예측 오류는 분포가 변하여 강도를 해치게 될 때 조차(Breiman 경계의 두번째 부분) 감소될 수 있다. 그러나, 좋은 예측 오류를 기대할 수 없다고 나타내는 OOB 분류기에 의존하는 것이 더 안전하다. 결과적으로, AUC에 대한 OOB 추정도 좋지 않다. 모든 방법을 통해, 그것은 넘을 수 없거나 또는 모든 데이터를 한꺼번에 처리하면서 i.i.d 경우로 도달 할 수 없다. 게다가, i.i.d가 아닌 경우, 예측 오류는 어디에서나 발생할 수 있다. 그러므로, 만약 수렴이 발생하면, 우리가 얻은 추정은 우리가 기대하는 최고의 결과이다. 문제는 비-i.i.d가 발생할 때 즉시 보장은 없어지는 것이다.
B - 절충하기 위해, Random Uniform Forests으로 돌아가서 그리고 mtry 변수를 높은 값으로 하여 노드 간에 경쟁을 심하게 강제할 모델을 생성한다. 점 A와 B간에 연결은 따라오는 인수에 의존하다: 그것의 가장 좋은 추정을 제공하는 비-최적화 고 임의 분류기(non-optimal highly randomized classifier)를 가지므로, 만약 최적의 모델을 생성하면, 우리가 얻은 검증 오류는 비-최적화 분류기(non-optimal classifier)의 평가에서 경계가 될 것이다. Random Forests 의 확률론(stochastic)적 특징과 트리 간에 우리가 얻은 상관관계 때문에, 우리는 두 속성이 적어도 변화하는 분포에서 상당히 잘 동작할 것으로 기대할 수 있다.
우리가 얻은 R 코드로 돌아가자:
rUF.model1 = randomUniformForest(X.train1, Y = as.factor(Y.train1),
                                 ntree = 500, nodesize = 5, mtry = 500, OOB = FALSE)
rUF.model2 = randomUniformForest(X.train2, Y = as.factor(Y.train2),
                                 ntree = 500, nodesize = 5, mtry = 500, OOB = FALSE)
# combine
rUF.combineModels = rUniformForest.combine(rUF.model1, rUF.model2)
# predict
predictions = predict(rUF.combineModels, X.test)

# and assess
stats.predictions = model.stats(predictions, Y.test)

# the function above displays
Test set
Error rate: 19.56%

Confusion matrix:
          Reference
Prediction   0   1 class.error
         0 507 124      0.1965
         1  52 217      0.1933
         
Area Under ROC Curve: 0.7717
Area Under Precision-Recall Curve: 0.6672
F1-score: 0.7115
Geometric mean: 0.7597
우리는 기대했던 결과를 얻었고 그리고, 더 본질적으로, 우리는 안정된 오류를 얻었다, i.e., 알고리즘을 다시 실행하여 오류를 매우 적게 변화시킨 것이다. 어쨌든, 이 방법에는 특별한 이유가 없다. 그러면 Breiman’s Random Forests를 평가한다 그러나 분할 점은 교대로 변수를 최적화하기 때문에, 모든 관측을 확인함으로써, 노드 간에 경쟁을 증가시키지 않을 수 있다. 우리가 할 수 있는 최선은 각 훈련 집합에서 tuneRF() 함수를 이용하여 mtry 변수를 최적화해야 한다. 여기에 결과가 있다:
library(randomForest)
rf1 = randomForest(X.train1, as.factor(Y.train1), mtry = 14, norm.votes = FALSE)
# data in the second model should have the same size than in the first one
rf2 = randomForest(X.train2, as.factor(Y.train2), mtry = 28, norm.votes = FALSE)

rf.combineModels = combine(rf1, rf2)
rf.predictions = predict(rf.combineModels, X.test)
rf.stats.predictions = model.stats(rf.predictions, Y.test)

# displays
Test set
Error rate: 38.11%

Confusion matrix:
           Reference
Prediction   0   1 class.error
         0 378 162      0.3000
         1 181 179      0.5028
         
Area Under ROC Curve: 0.6006
Area Under Precision-Recall Curve: 0.472
F1-score: 0.5107
Geometric mean: 0.5958
랜덤 포레스트(Random Forest)로 더 높은 검증 오류를 얻었다 그리고 한가지 이유는 아마도 분할-점의 로컬 최적화에서 나온다고 가정한다. 첫번째 훈련 표본만 사용으로 검증 오류가 45%를 넘게 한다. 또한 OOB 분류기에 의존하고 그리고 오류는 약 10%를 얻음으로써 i.i.d. 경우를 평가할 수 있다.

Example 2

우리는 또한 분포 변화에 알고리즘이 어떻게 민감하게 되는지 알기를 원한다. 시드(seed)를 변경하고(각각에 값 31를 추가) 같은 절차를 반복한다 그리고 이번에는:
  • 30% 대신에 첫번째 데이터 셋의 50%, 시드(seed) 값은 2045를 가짐.
  • (이전처럼) 두번째 데이터 셋의 30%, 시드(seed) 값은 2045를 가짐
검증 집합의 첫번째와 두번째 일부를 생성하기 위함, 그 자신의 분포로 입력되는 데이터의 15%를 가짐(시드(seed) 값은 1999로 함).
우리는 Random Uniform Forest에서 검증 오류는 27%에서 32%까지 얻었고 그리고 Random Forests에서는 약 43%를 얻었다.

Example 3

우리는 새로운 시드(seed)를 가지고 다시 반복했다, 작업:
  • 첫번째 집합의 15%
  • 두번째 집합의 30%
데이터 자신의 분포에서 나오는 그것의 55%을 가지는, 검증 집합의 첫번째와 두번째 부분을 생성하기 위함.
이번은 검증 오류는 Random Uniform Forest는 56%까지 올랐고 그리고 Random Forest에서는 43%에서 52%까지 검증 오류.
분포가 변화함에 따라, 좋은 예측 오류에 도달하기가 점점 더 어렵게 된다는 것을 확인한다. 우리의 예제에서, 시드와 분포 변화에 의존, 표본을 학습하는 시도는 매우 힘든 작업이 되었다 그리고 검증 집합의 일부를 보지 않는다면, 점증적 학습(incremental learning)은 그것의 한계에 마주친다. 이 작업은 너무 복잡하여 한번에 두가지 훈련 표본을 사용하더라도 변하는 것은 없다.
요약, 만약 분포가 느리게 변화한다면 우리는 약간의 희망이 있다. 모수적 모델에서(for parametric models), 중요 문제는 모수(parametric)를 갱신하는 방법에 있다 그리고 너무 빨리 이전 분포를 잊어버리지 않는 것이다. 비-모수적 모델에서는(for non-parametric models), 그것은 모델을 성장시킨다. 앙상블 (그리고 비-모수적) 학습의 경우에, 모델은 일반적으로 기본 모델의 올바른 하위집합을 선택할 필요가 있을 것이다.
만약 분포가 빠르게 변한다면, 우리의 예제에서 마지막 부분에서처럼, 군집(Clustering)과 차원 축소(Dimension Reduction)는 매우 좋은 대안이 되는 것으로 보인다. 우리의 예제에서, Random Uniform Forest의 비감독 모드의 사용은 더 나은 결과를 도출한다. 사실, non-i.i.d.인 경우, 또는 거의 non-i.i.d. 인 경우, 감독과 비-감독 학습자 모두가 필요할 수 있다.

Unsupervised Learning as a co-worker of Incremental Learning

# The unsupervised case with the last example :
# seeds are set respectively to 2045, 2023 and 1999
# a) 15% of the first data set,
# b) 30% of the second data set,
# are used to build first and second part of the test set,
# having 55% of the data coming from its own distribution.

# 1 - compute the model, letting it find the number of clusters

rUF.unsupervised = unsupervised.randomUniformForest(X.test)

# 2- If needed, modify the number of clusters to have two

rUF.unsupervised2 = modifyClusters(rUF.unsupervised, decreaseBy = 1)

# 3- assess test labels (but one should first identify which cluster
# corresponds to the associated label)

clusterLabels = rUF.unsupervised2$unsupervisedModel$cluster

if (names(which.max(clusterLabels[which(Y.test == 0)])) == 2)
{
    clusterLabelsTemp = clusterLabels
    clusterLabelsTemp[clusterLabels == 1] = 2
    clusterLabelsTemp[clusterLabels == 2] = 1
    clusterLabels = clusterLabelsTemp
}
clusterLabels = clusterLabels - 1

# 4- assess the results

table(clusterLabels, Y.test)

# displays, for the run we do
             Y.test
clusterLabels   0   1
            0 444   6
            1 159 391
비-감독인 경우는 검증 오류가 16.5%로 검증 표기(label)를 쉽게 구별한다. 주요 요점은 i.i.d. 경우를 유지하는지 혹은 아닌지를 더 이상 찾지 않는다는 점이다. 하나의 요점은 군집을 향해 진행할 때 우리가 얻을 수 있는 분리 수준(separation level)이다. Random Uniform Forest에서 두가지 방법으로 확인할 수 있다.
i) 모델 호출:

rUF.unsupervised2

# displays

Average variance between clusters (in percent of total variance): 77.98%
Average silhouette: 0.7113
Clusters size:
  1   2
450 550
Clusters centers (in the MDS coordinates):
     [,1]    [,2]
1 -0.0685  0.0030
2  0.0561 -0.0025
우리는 전체 분산의 백분율로 군집 간의 분산(variance between clusters in percent of total variance)을 얻었다. 즉, 군집과 전체 분산 간에 평균 거리의 비. 그것이 점점 더 높아질수록, 우리는 더 높은 분리 수준을 가진다. 또한 -1에서 1 사이의 평균 외형 상관 계수(average Silhouette coefficient)를 얻었다. 이것은 Rousseeuw (루시, 1986)가 설명했고 그리고 군집을 분석하기 위한 좋은 측정법을 제공한다, 특히 클러스터를 수정하거나 병합할 때 유용.
비감독인 경우에, Random Uniform Forests는, Random Uniform Forests 그 자신에서 시작하는, 다-계층(multiple-layer) 엔진을 사용한다, 그러면 근접 매트릭스(proximity matrix), 다차원 척도로 차원을 2 까지 낮춘다, 그리고 kmeans 이거나 또는 hierarchical clustering으로 끝남. 군집 개수 제공은 요구되지 않는다.
ii) 대부분의 경우에, 간단한 플롯으로 군집을 쉽게 볼 수 있다.
plot(rUF.unsupervised2)
# which displays
Figure 11: 예제 3의 검증 집합의 군집 표현
검증 표기(label)를 정의하는 규칙은 간단하기 때문에, 더 빠른 kmeans나 다른 군집 알고리즘을 왜 사용하지 않는지 의문이 있다. 그러므로, kmeans, EM 알고리즘을 사용하는 clara (R 패키지 cluster) 그리고 Mclust (R 패키지 mclust)를 묶었다.
# K-Means
kmeansOnXtest = kmeans(X.test, 2)

# assess test labels: check first if clusters are correctly assigned to test labels

clusterLabels = kmeansOnXtest$cluster
table(clusterLabels[which(Y.test == 0)])
table(clusterLabels[which(Y.test == 1)])

# cluster labels need to be inverted :
clusterLabelsTemp = clusterLabels
clusterLabelsTemp[clusterLabels == 1] = 2
clusterLabelsTemp[clusterLabels == 2] = 1
clusterLabels = clusterLabelsTemp
clusterLabels = clusterLabels - 1

table(clusterLabels, Y.test)
# displays
              Y.test
clusterLabels   0   1
            0 294   6
            1 309 391
            
# clara: Clustering Large Applications
# first install package, if not

# install.packages("cluster")
library(cluster)
claraOnXtest = clara(X.test, 2)

# one can easily plot clara object, getting also statistics
# plot(claraOnXtest)

# assess test labels
clusterLabels = claraOnXtest$clustering

table(clusterLabels[which(Y.test == 0)])
table(clusterLabels[which(Y.test == 1)])

# cluster labels need to be inverted :

clusterLabelsTemp = clusterLabels
clusterLabelsTemp[clusterLabels == 1] = 2
clusterLabelsTemp[clusterLabels == 2] = 1
clusterLabels = clusterLabelsTemp
clusterLabels = clusterLabels - 1

table(clusterLabels, Y.test)

# displays
              Y.test
clusterLabels   0   1
            0 294   6
            1 309 391
            
# Mclust: Model-Based Clustering
# first install package, if not

mclustOnXtest = Mclust(X.test, 2)
clusterLabels = mclustOnXtest$classification

# here there is no need to assign again cluster labels

clusterLabels = clusterLabels - 1
table(clusterLabels, Y.test)
              Y.test
clusterLabels   0   1
            0 444   6
            1 159 391
오직 Mclust만이 기대하는 결과에 도달했다. 그러나 모든 경우에서, 비감독 학습, 군집을 사용, 우리의 예에서, non-i.i.d. 경우가 데이터에서 발생할 때마다 감독 학습은 실적이 좋다. 감독 학습의 경우는 검증 표기(label)에서 정의하는 표본 규칙에서 조차 분산이 변하기 때문에 실패한다. 복잡한 양식(pattern)을 찾을 수 있는 비감독 방법을 가질 수 있다면, 검증 표본 그것의 학습, 감독 학습에서 더 많은 효율을 가져올 것이다.
모델이 분류 사례에 대해서만 논의했다. 회귀는 더욱 어렵다 그리고, Random Uniform Forests에서는 다른 메커니즘을 사용한다.

6 Conclusion

이 논문에서, 우리는 주요 요지와 Random Uniform Forests의 기능을 보여주기 위해 노력했다. 이론적인 측면에서, 우리는 Random Forests와 중요한 다른 점을 설명했다, 각 노드의 후보 변수의 집합인 표본 생성 작업에서 복제를 이용하여 분할-점(cut-point) 선택하기 위해 더 많은 무작위를 사용(the continuous Uniform distribution). 최적화 기준(optimization criterion) 또한 다르다. 그러므로 최적 노드의 선택은 Breiman의 절차와 더 이상 같지 않다, Random Uniform Forests에서는 상관관계가 더 적은 트리를 유도함(어쨌든 트리의 평균 분산은 증가). 낮은 상관관계는 수렴과 어떤 다른 결과를 위한 중요한 열쇠 중 하나이다. Random Uniform Forests는 Breiman’s Random Forests의 모든 이론적인 속성을 상속하기 때문에, 낮은 비용으로 비슷한 결과에 도달한다.
실용적인 측면에서, Random Uniform Forests는, 변수 중요도에 대한 심도있는 평가를 달성하고, 기본적으로 점증적이며 그리고 쉬운 분산 컴퓨팅을 가능하게하기 위해 설계된, 원본 방법의 확장으로 이해할 수 있다. 우리는 변수 중요도를 평가하기 위해 많은 도구를 보여줬다, 영향력 있는 변수가 어떻게 문제가 되는지 보고 이해하는 방법 제공. 우리는 결측 값 전가 또는 외삽(extrapolation) 같은 어떤 다른 도구에 대해 말하지 않았다. 그러나 우리는 비용 민감한 학습의 완전한 작업 예제를 제공했다, 시각화를 사용하여 포괄적인 모델을 구축할 수 있는 방법과 점증적 학습(incremental learning)의 모든 경우를 보여줌(ROC 또는 PrecisionRecall curves). Breiman의 사상에 따라서, Random Uniform Forests는 분류, 회귀 그리고 비감독 학습을 위한 고도의 다목적 도구가 되는 목적이 있다.




댓글 없음:

댓글 쓰기