강의자료 · 전기공학머신러닝실습

Multiclass Classification

학습 목표

클래스별 점수·확률·정답 Label의 관계를 알아야 다중 분류의 오류와 잘못된 Label을 해석할 수 있습니다.

Multiclass Logits와 Prediction 비교

시작 조건

제공된 중심 (-2,0),(2,0),(0,2) 주변에서 Class별 6표본, 총 18개를 만듭니다. seed=7입니다.

진행 방법

  1. Linear(2,3)와 CrossEntropy의 입력·Label shape를 확인하세요.
  2. 첫 6개 표본의 Logit 3개·확률 3개·예측을 기록하세요.
  3. 자료 산점도와 Loss 곡선을 그리세요.

남길 결과

import numpy as np
import matplotlib.pyplot as plt
import torch
from torch import nn
rng=np.random.default_rng(7)
centers=np.array([[-2.,0.],[2.,0.],[0.,2.]])
X_np=np.concatenate([c+rng.normal(0,.25,(6,2)) for c in centers]);y_np=np.repeat(np.arange(3),6)
X=torch.tensor(X_np,dtype=torch.float32);y=torch.tensor(y_np,dtype=torch.long)
def fit_multi(labels=y):
    torch.manual_seed(7);m=nn.Linear(2,3);opt=torch.optim.SGD(m.parameters(),lr=.1);history=[]
    for _ in range(200):
        loss=nn.functional.cross_entropy(m(X),labels);opt.zero_grad();loss.backward();opt.step();history.append(loss.item())
    return m,history
model,history=fit_multi();logits=model(X).detach();prob=torch.softmax(logits,dim=1);pred=prob.argmax(dim=1)
print(prob[:3],pred[:3])

결과 기록·자가 점검

표본:

정답:

Logit 3개:

확률 3개:

예측:

확인할 점

Class별 결과와 모호한 입력

시작 조건

query=[(-2,0),(2,0),(0,2),(0,0)]을 학습 모델에 입력합니다.

진행 방법

  1. 18개 Training 표본의 3×3 Confusion Matrix를 작성하세요.
  2. query 4개의 확률·예측을 표에 적으세요.
  3. 중심 표본과 (0,0)의 확률 분포를 비교하세요.

남길 결과

query=torch.tensor([[-2.,0.],[2.,0.],[0.,2.],[0.,0.]])
qprob=torch.softmax(model(query),dim=1).detach()
print(qprob)
# TODO: 혼동 행렬과 표를 완성하세요.

결과 기록·자가 점검

query:

P0:

P1:

P2:

예측:

해석:

확인할 점

Label 하나가 바뀐 자료

시작 조건

표본 0의 Label만 0에서 1로 바꾸고 같은 조건으로 다시 학습합니다.

진행 방법

  1. 변경한 Label과 위치를 먼저 표시하세요.
  2. 기준·변경 모델의 Loss, 원래 Label 기준 오류, 변경 Label 기준 오류를 비교하세요.
  3. 학습의 어려움을 반복 횟수 문제와 자료 문제로 나누어 설명하세요.

남길 결과

changed_y=y.clone();changed_y[0]=1
changed_model,changed_history=fit_multi(changed_y)
# TODO: 두 Label 기준으로 같은 예측을 평가하세요.

결과 기록·자가 점검

모델:

최종 Loss:

원래 Label 기준 오류 수:

변경 Label 기준 오류 수:

확인할 점