Search
📝

Week 3 Solve

링크
Category
Vision Study
Keywords
상위 개념
하위 개념
속성
Subcategory
문제
날짜

문제 1

다음 중 틀린 것을 모두 고르시오.
1.
KNN: 게으른 학습 또는 사례중심 학습이라고 한다.
O
2.
KNN: 데이터의 차원이 증가하면 차원의 저주 문제가 발생한다.
O
3.
KNN: 탐색할 이웃의 수(K)가 클 수록 과적합이 발생한다.
반대
4.
KNN: 학습데이터 내에 끼어있는 노이즈의 영향을 크게 받지 않는다.
O
5.
KNN: 최적 이웃의 수(K)와 거리 척도(distance metric)는 연구자가 실험 결과에 따라 임의로 선정한다.
O
6.
의사 결정 나무(DT): 모든 샘플이 한 클래스에 속한다면 지니 불순도는 0이다.
O
7.
DT: 의사 결정 나무는 지니 불순도를 최대화하도록 학습한다.
최소화
8.
DT: 샘플들의 클래스가 균등하게 분포되어 있다면 지니 불순도는 최대가 된다.
O
9.
DT: 지니 불순도를 통해 의사 결정 나무가 변수 공간을 잘 나누었는지 평가할 수 있다.
O
10.
DT: 전역 최적을 달성할 수 있는 모델이다.
없다
11.
DT: 나무의 깊이가 깊어질 수록 더욱 복잡한 관계를 표현 가능하다.
복잡한 표현은 가능하나 너무 깊어지면 성능이 안좋다
12.
새로운 관측 데이터에 대해 모델이 얼마나 잘 동작하는지를 의미하는 용어를 generalizability라고 한다.
O
13.
regression 모델은 classification을 수행할 수 없다.
KNN은 둘다 가능
14.
Training data는 feature vector를 포함한다.
O
15.
precision과 recall을 더하면 항상 1이 된다.
X TPTP+FP,TPTP+FN\frac{TP}{TP+FP} , \frac{TP}{TP+FN}
16.
precision과 recall을 산술평균한 값을 F1 score라고 부른다.
조화평균
17.
모든 케이스를 positive로 예측하면 recall을 1로 만들 수 있다.
O
18.
모델이 랜덤으로 결과를 낸다면 ROC AUC는 0.5가 된다.
O
19.
ROC AUC의 값이 클수록 일반적으로 더 좋은 분류 모델이다.
O
20.
서로 다른 분류 모델을 하나의 수치로 비교하기 위해 ROC AUC가 쓰일 수 있다.
O
오차 +- 1개까지 정답으로 인정

문제 2+3

문제 2

아래 이미지에 대해 성능 지표 수치를 작성하라.
(1) sensitivity: 512\frac{5}{12}
(2) specificity: 310\frac{3}{10}
(3) negative predictive value: 12\frac{1}{2}
(4) precision:58 \frac{5}{8}
(5) F1 score:12 \frac{1}{2}
각 0.2점

문제 3

문제 2의 문항에서 등장한 용어들의 의미와 용도를 코로나 관련 논문을 참조하여 서술하시오.
각 0.2점
(1) Sensitivity(Recall) : 실제로 코로나 걸린 사람을 양성으로 분류할 확률 (2) Specificity : 코로나에 걸리지 않은 사람을 음성이라고 분류할 확률 (3) NPV : 음성으로 분류한 사람 중 실제 걸리지 않은 사람의 비율 (4) precision : 양성으로 분류한 사람들 중에서 실제로 걸린 사람의 비율 (5) F1 score : Recall과 precision을 평균낸 후 역수를 취한 값..?
보너스 문제
ROC curve의 현 위의 점의 의미는 무엇인가?
현의 휨 정도가 의미하는 것은 무엇인가?
Q) ROC curve의 현 위의 점의 의미는 무엇인가? A) 가능한 범위의 모든 Threshold별로 False Positive Rate와 True positive Rate의 비율을 확인하겠다는 의미 Q) 현의 휨 정도가 의미하는 것은 무엇인가? A) 좌상단에 가까워 질수록 분류 능력이 더 좋음을 의미한다.
찾은 논문에 적용해서 해석해보세요!

문제 4, 5

nearest neighbor search, 최근접 이웃 탐색은 주어진 점 세트 내에서 새로운 점과 가장 가까운 점을 찾는 최적화 문제이다. 이 ‘점’은 다양한 형태로 응용될 수 있다. 데이터 문제에서 각 점은 데이터가 된다. 또한 데이터는 다차원 특징으로 구성된다. 새로운 데이터는 가장 가까운 특징에 기반해서 클래스가 결정된다.
아래의 트리를 통해 탐색 과정을 최적화 해보자.
새로운 데이터: (6, 7)
k-d tree root: (7, 2)

문제 4

다음의 거리 측정 방법을 참고해 새로운 데이터와 기존 데이터와의 거리를 측정하라.
1.
Euclidean distance
기존 데이터 중 가장 가까운 점은(4, 7) ~ (6, 7) : (64)2=2\sqrt{(6-4)^2} = 2
1.
Manhattan distance
(4, 7) ~ (6, 7) : 64=2|6-4| = 2
1.
Minkowski distance
p=1 경우 유클리디안과 동일 p=2 경우 맨하튼과 동일

문제 5

새로운 데이터 (6, 7)과 기존 데이터의 k-d tree를 바탕으로 다음을 구하라.
1.
가장 가까운 데이터와의 거리(L2)
Euclidean : (4, 7) ~ (6, 7) : (64)2=2\sqrt{(6-4)^2} = 2
1.
1번을 탐색하는 순서와 결정 트리의 분기 조건들
1. (x1, x2)라고 했을 때, x1이 7보다 작은가/큰가 2. x2가 4, 6보다 작은가/큰가
1.
결정 경계의 시각화
예시)
그 외 생각해볼 문제들
(나이, 연봉) 과 같이 스케일의 차이가 큰 특성에 대해서는 L2 거리가 적절한 측정 방식인가? descriptor matcher의 거리 측정 방식은 무엇이 있는가?
kd tree는 최근접 이웃을 반드시 찾을 수 있는가?
kd tree에서 데이터의 차원이 크면 어떤 일이 발생하는가?
트리의 분할 기준은 무엇이 적절한가?
최적화를 위한 가지치기는 어떻게 진행되는가?
k-d tree...
nearest neighbor search, 최근접 이웃 탐색은 주어진 점 세트 내에서 새로운 점과 가장 가까운 점을 찾는 최적화 문제이다. 이 ‘점’은 다양한 형태로 응용될 수 있다. 데이터 문제에서 각 점은 데이터가 된다. 또한 데이터는 다차원 특징으로 구성된다. 새로운 데이터는 가장 가까운 특징에 기반해서 클래스가 결정된다.
NN의 데이터 응용 방법론인 KNN은 특징이 가장 가까운 k개 이웃의 투표로 클래스가 결정되는 방법이다. 새로운 데이터의 클래스를 결정하기 위해 가까운 k개의 이웃을 어떻게 찾을 수 있을까?
간단한 방법은 모든 훈련 데이터와 새로운 데이터 사이의 거리를 측정하고, 그 중 가까운 데이터 k개를 선택하면 된다. 그러나 이건 시간 복잡도가 매우 높다. 데이터가 많을수록 끔직해질 것이다.
이 계산량을 줄이는 것이 nearest neighbor search의 목적이다. 다양한 방법이 있지만, k-dimensional tree를 소개하고자 한다.
k-d tree는 BSP의 특수 케이스이다. 우리가 잘 아는 1차원 데이터로 만든 BST의 다차원 버전이라고 볼 수 있다. 따라서 의사결정 트리와 매우 유사하다. 아래는 BST의 예시이다.
위에서 지적한 계산량 문제는 이진 트리를 활용해 최적화할 수 있다.
이미지 A, B의 Descriptor를 매칭하는 것도 NN문제임을 알 수 있다. 가장 가까운 데이터(feature)를 찾는 동일한 테스크이기 때문이다.
특히 지난 번 Descriptor matcher 중 BFMatcher를 주로 사용했을 것이다. 이때 BF는 Brute Force의 약자로 완전 탐색을 의미한다. 이미지의 크기가 커지거나 descriptor가 많아지는 경우 매칭에 오랜 시간이 걸리게 된다.
이때 FlannBasedMatcher를 사용하면 보다 빠르게 매칭이 가능하다. Fast Library for Approximate Nearest Neighbors Matching의 의미처럼, 가장 가까운 점을 엄밀하게 찾지는 않는다.

문제 6+7

6개의 훈련 데이터 샘플을 이용하여 깊이가 2인 결정트리 분류기를 만들려고 한다.
주어진 특성벡터와 대응되는 레이블이 다음 표와 같을 때, 다음 물음에 답하세요.
Show All
Search
(4,1)
(6,7)
(9,5)
(1,2)
(7,3)
(5,4)

객관식 6.

root node에서 ‘엔트로피 불순도’와 ‘지니 불순도’를 각각 구하세요.
엔트로피 불순도 : $H(\Omega) = - \sum_{w_i \in \Omega} p(w_i)ln(p(w_i))$ = ①
지니 불순도 : $G(\Omega) = 1 - \sum_{w_i \in \Omega}p(w_i)^2$ = ②
Show All
Search
객관식 6. ④

주관식 7.

지니 불순도를 이용하여 깊이가 2인 결정트리를 생성하여 수형도를 그리세요.
hint) 항상 지니 불순도가 최소가 되게 split해야 한다는거 잊지 마세요!

문제 8

객관식 8.

다음은 앙상블 기법의 대표적인 방법인 bagging과 boosting의 특징들을 나열한 것입니다. (보기 자체가 옳은 특징일 수도, 아닐 수도 있습니다.)
보기의 특징이 옳다면, 각각의 알고리즘에 해당하는 번호의 개수를 맞춰주세요!
1 → Boosting 2 → 반대 3 → Bagging, Boosting 4 → Bagging, Boosting 5 → 느리다. 6 → bagging 7 → Voting 8 → Boosting 3개 4개 → 답 : ⓶
1.
순차적으로 학습하기 때문에 모델 간의 팀워크가 중요하다.
2.
오답에 대해 낮은 가중치를 부여하고, 정답에 대해 높은 가중치를 부여한다.
3.
데이터를 랜덤 샘플링(복원 추출)한다.
4.
강력한 하나의 모델을 사용하는 대신 적당한 모델 여러 개를 조합하여 일반화 오차를 줄이는 것이 목적이다.
5.
직렬적 구조를 갖기 때문에 상대적으로 빠른 속도를 갖는다.
6.
모든 model을 균등한 비중으로 앙상블한다.
7.
앙상블의 결과를, 이산적인 데이터 형태일 경우에는 평균으로, 연속적인 데이터 형태일 경우에는 투표방식으로 집계한다.
8.
모델의 정확도는 높다는 장점이 있지만, 상대적으로 overfitting이 발생할 가능성이 높다.

문제 9

주관식 9.

다음은 chest Pain, Patient Weight에 따른 Heart Disease 여부에 대한 데이터입니다..
(STEP 1) ‘지니 불순도’를 이용하여 forest의 첫번째 Decision Stump를 구하고 (STEP 2) 첫번째 Decision Stump를 학습한 이후에 변경된 weight를 구해주세요.
ϵl,hl(x),w(t)\epsilon_l, h_l(x), w(t)는 반드시 소수점 3째자리에서 반올림하여 계산합니다.
우리에게 주어진 training data는 {$(\bf{x^1},w^1),...,(\bf{x^{10}},w^{10})$}
1.
ϵ1=t=1Tw(t)I(wth1(xt))\epsilon_1 = \sum_{t=1}^{T}w(t)I(w^t \neq h_1(\bf{x}^t)),
2.
voting weight of $h_1(x)$ : α1=0.5log((1ϵ1)/ϵ1))\alpha_1 = 0.5 log((1-\epsilon_1)/\epsilon_1))
3.
recompute weights : w(t)=w(t)exp(α1wth1(xt))/Z1w(t) = w(t)exp(-\alpha_1w^th_1(\bf{x}^t)) / Z_1
(이때, wt=h1(xt)w^t = h_1(\bf{x^t}) 이라면 wth1(xt)=1w^th_1(\bf{x}^t) = 1, wth1(xt)w^t \neq h_1(\bf{x^t}) 이라면, wth1(xt)=1w^th_1(\bf{x}^t) = -1) (Z1Z_1은 전체 weight의 합을 1로 만들기 위한 normalizer)

Blocked Arteries에서의 지니계수가 더 작으므로 Decision Stump로 선택.
α1=0.5log((10.4)/0.4))=0.09\alpha_1 = 0.5 log((1-0.4)/0.4)) = 0.09
w(t1)=0.1exp(0.09)/Z1:=0.09w(t_1) = 0.1 * exp(-0.09) / Z_1 := 0.09
w(t2)=0.1exp(0.09)/Z1:=0.11w(t_2) = 0.1 * exp(0.09) / Z_1 := 0.11
Show All
Search
Chest Pain
Blocked Arteries
Heart Disease
Sample Weight
변경된 Weight
1/10
1/10

문제 10

실습 10.

앞선 문제들에서는 분류 문제에 대한 결정트리를 많이 풀어봤으니
이번 실습에서는 회귀 문제에 대한 결정트리를 다뤄볼 것입니다.

회귀 결정트리의 loss값이 10이하가 되도록 코드를 직접 짜보는 실습

(정해진 정답은 없으니 parameter값들을 자유롭게 설정해주셔도 좋습니다.)
<aside>  (STEP1) sklearn.datasets.make_friedman1 함수를 이용하여 샘플을 직접 생성하고,
</aside>
자세히
make_friedman1 : 회귀 문제를 생성할 수 있는 함수
make_friedman1 함수의 인자 n_samplesn_features 직접 설정하기
<aside>  (STEP2) sklearn.tree 모듈의 DecisionTreeRegressor 을 이용하여 훈련한 후에
</aside>
자세히
DecisionTreeRegressor 함수의 인자 max_depth를 직접 설정하기
<aside>  (STEP3) loss값을 측정한다.
</aside>

참고코드

코랩에서 실행하고 링크를 제출해주세요.