1. What is the approximate depth of a Decision Tree trained (without restrictions) on a training set with 1 million instances?

The depth of a well-balanced binary tree containing m leaves is equal to log2(m)3, rounded up. A binary Decision Tree (one that makes only binary decisions, as is the case of all trees in Scikit-Learn) will end up more or less well balanced at the end of training, with one leaf per training instance if it is trained without restrictions. Thus, if the training set contains one million instances, the Decision Tree will have a depth of log2(106) 20 (actually a bit more since the tree will generally not be perfectly well balanced).

 

m 개의 잎을 포함하는 균형 잡힌 이진 트리의 깊이는 log2 (m)과 같으며 반올림됩니다. 바이너리 결정 트리 (Scikit-Learn의 모든 트리의 경우와 같이 바이너리 결정 만하는 바이너리 결정 트리)는 교육 종료시 다소 균형이 잘 잡히게됩니다. 제한없이 교육을받는 경우 트레이닝 인스턴스 당 하나의 리프가됩니다. . 따라서 훈련 세트에 백만 인스턴스가 포함되어있는 경우 의사 결정 트리의 깊이는 log2 (106) 20입니다 (실제로 트리가 일반적으로 완벽하게 균형을 이루지 못하기 때문에 실제로는 조금 더 많음). (그냥 로그 2 해주면 되는듯)

*여기서 log2는 밑이 2라는 것을 뜻함. 어떻게 쓰는지 모르겠다 컴퓨터로..


 

2. Is a nodes Gini impurity generally lower or greater than its parents? Is it generally lower/greater, or always lower/greater?

일반적으로 노드의 Gini 불순도가 부모도다 높나 낮나? 일반적으로 낮/높은지 항상 낮/높은지


노드의 지니 불순물은 일반적으로 부모보다 낮습니다. 이것은 CART 교육 알고리즘의 비용으로 보장됩니다. 함수는 각 노드를 자식 Gini 불순물의 가중치 합을 최소화하는 방식으로 분할합니다.

그러나 한 자식이 다른 자식(의 지니 불순도)보다 작으면, 그 부모보다 지니 불순도가 높을 수 있다 만약 이 증가분이 다른 자식의 지니 불순물 감소보다 크다면)

 

그러나 한 자식의 불순이 다른 자식보다 작으면, 다른 아이의 불순물 감소로 인해 지니 불순물이 부모보다 더 클수도 있다.

 

예를 들어, 클래스 A에 네 개의 인스턴스가 있고, 클래스 B에는 한 개의 인스턴스가 있다고 가정해 보자. 지니 불순도는 1-(1/5)^2 – (4/5)^2 = 0.32 이다. 이 때 데이터 셋은 일차원이고 모든 인스턴스들이 A B A A A 순서라고 해보자. 너는 알고리즘이 두번째 인스턴스 이후 이 노드를 분리할 것임을 알 수 있(그냥 클래스 나누는것) – 자식 노드 A, B를 만들면서.  그리고 다른 자식 노드의 인스턴스는 A, A, A이다.

첫번째 자식의 불순도는 1 – (1/2)^2 – (1/2)^2 = 0.5이다 = 부모보다 높음.

 

이 것은 다른 노두가 순수하다는 것에 대한 보상이므로, 전체 지니 불순도는 2/5 * 0.5 + 3/5 * 0 = 0.2이다. (두번째 노드는 모두가 A이므로 순수 = 불순도는 0) à 이 때 부모의 지니 불순도보다 낮다 


*즉 보통 자식노드가 부모노드보다 지니불순도가 낮지만 항상 낮은건 아니다.


 

3. If a Decision Tree is overfitting the training set, is it a good idea to try decreasing max_depth?

If a Decision Tree is overfitting the training set, it may be a good idea to decrease max_depth, since this will constrain the model, regularizing it. // 모델의 깊이가 낮아질수록 모델을 제약하고 regularizing 하는 것.

 

 

4. If a Decision Tree is underfitting the training set, is it a good idea to try scaling the input features? 만약 underfit하다면 scaling 해주는 것이 좋냐?

Decision Trees dont care whether or not the training data is scaled or centered; thats one of the nice things about them. So if a Decision Tree underfits the training set, scaling the input features will just be a waste of time.

해봤자 소용없음 

 


5. If it takes one hour to train a Decision Tree on a training set containing 1 million instances, roughly how much time will it take to train another Decision Tree on a training set containing 10 million instances?

1 백만 개의 인스턴스가 포함 된 교육 세트에서 의사 결정 트리를 교육하는 데 1 시간이 소요되는 경우 1 천만 개의 인스턴스가 포함 된 교육 세트에서 다른 의사 결정 트리를 교육하는 데 대략 어느 정도의 시간이 걸립니까?

 

The computational complexity of training a Decision Tree is O(n × m log(m)). So if you multiply the training set size by 10, the training time will be multiplied by K = (n × 10m × log(10m)) / (n × m × log(m)) = 10 × log(10m) / log(m). If m = 106, then K 11.7, so you can expect the training time to be roughly 11.7 hours.

 

의사 결정 트리 트레이닝의 계산 복잡도는 O (n × m log (m))입니다. 따라서 훈련 세트 크기에 10을 곱하면 훈련 시간에 K = (n × 10m × log (10m)) / (n × m × log (m)) = 10 × log (10m) / log (m). m = 10^6이면 K ≈ 11.7이므로 약 11.7 시간의 교육 시간을 기대할 수 있습니다.

 


6. If your training set contains 100,000 instances, will setting presort=True speed up training?

너의 교육 세트에 100,000 개의 인스턴스가 포함되어 있다면 presort = True로 설정하여 교육을 가속화해야 하는가?

 

Presorting the training set speeds up training only if the dataset is smaller than a few thousand instances. If it contains 100,000 instances, setting presort=True will considerably slow down training.

교육 세트를 미리 할당하면 데이터 세트가 수천 개보다 작은 경우에만 교육이 가속화됩니다. 인스턴스가 100,000 개 포함되어 있으면 presort = True로 설정하면 교육 속도가 상당히 느려집니다.




랜덤포레스트는 Meta-Learning의 한 종류로 여러 모형을 통합하여 모델을 만드는 것을 뜻한다. 

이는 이전 디시전트리를 구현하는 과정에서 설명하였던 앙상블 기법으로 불리기도 한다. 


디시전트리(의사결정나무) 설명은 이전 포스팅으로.


랜덤포래스트

의사결정나무를 여러 개 모아놓으면 (decision tree 여러 개) 숲이 되는데 이 숲을 구성하는 방법을 random 으로 함

나무마다 독립변수가 다르게 들어갈 수 있도록 그 수를(독립변수 사용 개수)를 제한시키는 것

이때 베깅 기법을 사용함.

Random subset of training data(bagging) + Random selection of features 


베깅(Bagging)

베깅은 원 표본에서 중복을 허용하여 표본을 추출(복원추출).

(학습)데이터셋을 여러 개 만들수 있는데 데이터가 각 셋마다 다르다


베깅과 랜덤포레스트의 정의는 위와 같이 내릴 수 있다. 이해가 안가면 제일 위 사진과 함께 아래 예시를 보자.


베깅의 예시는 

총 1000개의 train 데이터 셋이 있다고 가정하자. 이럴 때, train셋을 1000개를 전부 다 한번에 쓰는 것이 아닌,

이 중 700개만 뽑아서 train셋을 여러개 만든 후, 이를 각각 학습한 결과값의 평균, 즉 값들을 모두 이용하여 

최적회된 모델을 만드는 것이다.


이 때 한번 학습에 사용한 데이터는 다시 train데이터에 놓고 랜덤으로 추출하여 각 train 데이터 셋마다 일부는 겹칠 수 있지만 완벽히는 겹치지 않는

모델을 만드는 것이다 


랜덤포레스트의 예시는

마찬가지로 train data set마다 각기 백퍼센트 동일하지 않은(=다른) 셋을 가지고 있다는 것은 동일하지만, 베깅처럼 모든 변수를 사용하는 대신

나무마다 독립변수가 다르게 들어가도록 독립변수의 수를 제한하는 기법을 뜻한다.

즉 a데이터 셋은 나이, 성별, 수입 변수를 사용하고, b데이터셋은 나이, 거주지, 수입 변수를 사용하는 식으로 백퍼센트 변수가 동일하지 않는 것이다.


이와 비슷한 이론으로 부스팅이 있는데, 부스팅은 베강과는 살짝 다른 기법이다.

부스팅을 활용한 디시전트리의 정의는 아래와 같다.


부스팅 (Adaboost)

Train data 중 일부를 랜덤으로 추출하여 모델을 만든다. 이 모델의 정확도를 측정한다.

여기서 에러가 난 데이터들을 찾고, 이 데이터들에게 가중치를 더 준 상태에서 다음번 모델을 만들 데이터들을 랜덤으로 추출한다.

이 과정에서 가중치가 큰 데이터(기존에 에러 났던 데이터)가 들어올 확률이 높다.

이렇게 다시 모델을 만들고, 전체 Train data셋을 통해 다시 정확도를 측정한다. (=Sequential 하게 모델을 만들어간다) 


해당 과정을 반복하여 완벽한 모델을 만들도록 하는게 부스팅.


이러한 랜덤포레스트의 장단점은 

장점

의사결정나무(디시전 트리)보다 정확도가 높아진다

단점

디시전 트리가 가지는 설명력을 상실한다(왜 대출 심사에서 떨어진건지, 왜 부도가 난건지 등 변수의 가중치를 우선순위를 파악할수 없으니 결과를 해석할 수 없음)


+ Recent posts