728x90

참고답안:

 

선형 함수를 활성화 함수로 사용하게 되면 은닉층이든 출력층이든 (몇개의 층을 더하던지) 해당 유닛값은 입력 x의 선형 결합이 되는데, 이때 신경망은 사실상 로지스틱 회귀와 같아집니다. 만약 출력층에서도 선형 함수를 활성화 함수로 사용한다면 선형 회귀와 같게 됩니다.

 

다시 정리하면, 신경망에는 반드시 비선형 활성화 함수를 사용해야 합니다. 위 선형 함수를 신경망 활성화 함수로 사용하면 몇 개의 층을 사용하던지 결국 선형회귀가 되어버립니다. 그냥 단순히 복잡한 선형회귀 말이죠.

 

 

728x90

사실상 4.3과 4.4 문제에서 다루었던 내용이 다변량 의사결정 트리이기 때문에, 해당 내용에 수박 데이터 세트3.0을 사용하면 된다. 

 

728x90

4.9

4.4.2절에서 결측값에 대한 처리 메커니즘을 지니계수의 계산으로 확장하라

 

참고답안:

문제의 해답은 상대적으로 간단합니다. 책의 공식 4.9, 4.10, 그리고 4.11을 사용해 식4.5에 대해 다음과 같은 식을 유도할 수 있습니다.

 

여기서 속성a의 지니계수는 다음과 같습니다.

728x90

'''
사이킷런에서 제공하는 iris 데이터 사용
'''

import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
import numpy as np
import treeCreater
import treePlottter


iris = datasets.load_iris()
X = pd.DataFrame(iris['data'], columns=iris['feature_names'])
y = pd.Series(iris['target_names'][iris['target']])

# 3개의 샘플을 취해 테스트세트로 사용
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=15)

# 남은 120개 샘플 중에서 30개를 검정세트로 사용
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.25, random_state=15)


# 가지치기 않함
tree_no_pruning = treeCreater.DecisionTree('gini')
tree_no_pruning.fit(X_train, y_train, X_val, y_val)
print('가지치기 없음:', np.mean(tree_no_pruning.predict(X_test) == y_test))
# treePlottter.create_plot(tree_no_pruning.tree_)

# 사전 가지치기
tree_pre_pruning = treeCreater.DecisionTree('gini', 'pre_pruning')
tree_pre_pruning.fit(X_train, y_train, X_val, y_val)
print('사전 가지치기:', np.mean(tree_pre_pruning.predict(X_test) == y_test))
# treePlottter.create_plot(tree_pre_pruning.tree_)

# 사후 가지치기
tree_post_pruning = treeCreater.DecisionTree('gini', 'post_pruning')
tree_post_pruning.fit(X_train, y_train, X_val, y_val)
print('사후 가지치기:', np.mean(tree_post_pruning.predict(X_test) == y_test))
# treePlottter.create_plot(tree_post_pruning.tree_)

 

참고 답안: https://blog.csdn.net/red_stone1/article/details/106110620

728x90

 

문제:

UCI 데이터 세트에서 4개의 데이터 세트를 선택하여, 위에서 언급한 세 가지 알고리즘이 생성한 가지치기를 하지 않은, 사전 가지치기를 한, 사후 가지치기를 한 의사결정 트리들에 대해 비교를 진행하고 통계적 유의미성을 검증하라.

 

UCI 데이터 세트 중 Wine Data Set 사용. 대략 180개의 데이터, 12개의 특성, 3가지 레이블(3가지 주종)이 있음. 랜덤 샘플링으로 140:40 으로 split함.

 

ID3 의사결정 트리:

 

CART(가지치기 없음):

CART(사전 가지치기):

 

CART(사후 가지치기):

 

사후 가지치기가 사전 가지치기보다 과적합 현상이 일어나기 쉬움을 알 수 있음.

 

728x90

 

파이썬 라이브러리가 잘 나오기 때문에 사실 이 부분을 구현하는 것이 의미가 있을까 싶네요.

이 문제에 대한 참고 답안은 별도로 올리지 않겠습니다.

파이썬에서 인자만 바꿔주면 해결되기 때문에;

 

실습에 편의를 위해 데이터셋은 중->영 변환해서 올려드립니다.

 

chapter4_dataset.csv
0.00MB

728x90

4.2 ‘최소 훈련 오차’를 사용하여 의사결정 트리 분할의 기준으로 삼을 때 빠질 수 있는 함정에 대해 분석하라.

 

참고 답안:

만약 최소훈련오차를 의사결정 트리 분할의 기준으로 사용한다면 훈련 데이터와 실제 데이터 사이에 (거의 대부분의 상황에서)일정한 편차(bias)가 존재할 것이기 때문에, 이렇게 얻어진 의사결정 트리는 과적합 상황을 일으켜 테스트 데이터에 대한 일반화 성능이 하락하게 될것이다. 

 

 

이 문제에 대해 아직 명확한 답을 찾진 못했습니다. '과적합'때문이라는 의견이 대부분이긴 하지만, 이에 대한 구체적인 증명은 찾지 못해서요. 개인적으로는 의사결정 트리는 information gain을 사용하던 지니인덱스를 사용하던 과적합 되기 쉬운 것으로 생각되서요. 

혹시 해당 부분에 대해 좋은 해답을 가지고 계시다면 댓글로 달아주세요~ 다른 분들과 함께 공유했으면 좋겠습니다:)

 

728x90

4.1:

충돌되는 데이터conflicting data(즉, 특성 벡터가 완전히 같지만 레이블은 다른)를 포함하지 않는 훈련 세트에 대해, 훈련 세트와 일치(훈련 오차가 0인)하는 의사결정 트리가 반드시 존재한다는 사실을 증명하라.

 

참고 답안1.

훈련 데이터셋과 일치하는 의사결정 트리가 존재하지 않는다고 가정한다면, 훈련 데이터셋으로 훈련해 얻은 의사결정 트리의 최소 한개의 노드상에 분할할 수 없는 데이터가 있어야한다(만약 노드상에 conflicting data가 없다면 해당 데이터는 분리 가능해야 한다). 이는 전제(충돌되는 데이터를 포함하지 않는다)와 모순되기 때문에 반드시 훈련데이터셋과 일치하는 의사결정 트리가 있어야 한다.

 

참고답안2.

 

단단한 머신러닝 책 그림4.2에 나오는 알고리즘 설명에 따르면, 노드를 생성하는 3가지 상황은 다음과 같다:

 

1,2,3 총 3가지 상황으로 정리가 가능한데, 

이 문제의 목적은 훈련 데이터셋과 일치하는 의사결정 트리를 찾는 것이기 때문에 3번째 포인트는 고려하지않아도 된다.  1,2,번 상황만 고려하면 의사결정 트레에서 가지가 잎 노드 생성을 멈출 때는 샘플이 모두 같은 클래스에 속하거나 모든 특성(feature)을 다 사용했을 때이다. 그렇다면 잎노드 레이블과 실제 훈련셋이 다를 경우는 특성을 모두 다 사용한 상황일 것이다. 하지만 훈련셋에 충돌 데이터가 없다고 했기 때문에 각 노드상에 훈련 오차는 모두 0이 된다.

728x90

 

참고답안:

단단한 머신러닝 3.3 참고

 

OvR,  MvM은 각 클래스에 동일한 처리를 하기 때문에 이진 분류 문제에서 클래스 불균형 영향이 상쇄되는 경향이 있다. 따라서 일반적으로 추가적인 처리를 진행하지 않아도 된다.

 

728x90

3.7 코드 길이가 9이고, 클래스 수가 4일 때 해밍턴 거리로 이론 최적의 ECOC 이진코드와 이에 대한 증명을 기술하라.

 

참고답안:

책에서 해당 부분에 대한 내용을 명확하게 설명하고 있지 않기 때문에,

원문(논문)인 《Solving Multiclass Learning Problems via Error-Correcting Output Codes》를 참조하라.

원문에서는 코드를 구성하는 몇 가지 방법에 대해 설명하고 있는데, 그 중 하나는 다음과 같다.

클래스 수가 4일때 가능한 코드는 7가지가 있다. 위 방법에 따르면,

표와 같아지고, 코드 길이가 9일때 f6 이후에 어떤 두 코드를 더해도 최적의 코드가 된다. 이때 임의로 추가되는 코드는 모두 이전 코드의 반대 코드가 되기때문에, 클래스 사이의 최소 해밍턴 거리는 모두 4가 되며 증가되지 않는다.

 

 

+ Recent posts