inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[파이토치] 실전 인공지능으로 이어지는 딥러닝 - 기초부터 논문 구현까지

라벨 없이 예측하기 - 깊은 K 평균 알고리즘(Deep K-means) [TOP 논문 구현]

선생님! 아래 코드가 잘 이해가 되지 않습니다.

463

npdrbong

작성한 질문수 3

1

def cluster_acc(y_true, y_pred):

    y_true = np.array(y_true)
    y_pred = np.array(y_pred)

    D = max(y_pred.max(), y_true.max()) + 1
    w = np.zeros((D, D), dtype=np.int64)
    for i in range(y_pred.size):
        w[y_pred[i], y_true[i]] += 1
    ind = linear_assignment(w.max() - w)
     return sum([w[i, j] for i, j in zip(ind[0], ind[1])]) * 1.0 / y_pred.size

위 코드 부분에서 이게 어떻게 cluster의 accuracy를 계산하는지 직관적으로 이해가 되지 않습니다.

제가 이해하기로는 y_true는 각 image의 label을 batchsize에 따라서 가져오니까 y_true는 (120, )의 tensor가 될 것이고, y_pred는 k_means를 통과한 값이 될 것입니다.

이런 식이겠죠

y_true = [0, 1, 1, 2, 3, 0, ...]

y_pred = [3, 4, 4, 5, 1, 3, ...]

계산을 하면 D = 10이 될 것이고, w는 10X10짜리 tensor가 될 것입니다.

이 때 for i in range(120):에서 위의 6 라벨이 들어왔다고 치면

W = [[0, 0, 2, 0, 0, 0, 0, 0, 0, 0]

[0, 0, 0, 2, 0, 0, 0, 0, 0, 0]

[0, 0, 0, 0, 1, 0, 0, 0, 0, 0]

[0, 1, 0, 0, 0, 0, 0, 0, 0, 0]

...]

이런 식으로 코딩이 될 것입니다.

그러면 이게

W.max()를 취하면 2가 나올테고,

w.max() - w

이 식은 [[2, 2, 0, 2, 2, ...], [2,2,2,0,2,...], [2,2,2,2,1,...],

[2,1,2,2,2,...]...] 이렇게 되고

여기에서 linear_assignment를 통과한다면

한 batch에서 정확도를 구할 수 있다는 것인데,

linear_assignment가 hungarian algorhythm을 통해서 bipartite한

graph에서의 정보를 처리한다데 이게 구체적으로 어떤 공식에 의해서

되는 것인지 잘 모르겠습니다..

매번 감사합니다.

pytorch 딥러닝 인공신경망 python 머신러닝 배워볼래요?

답변 1

0

딥러닝호형

안녕하세요!

좋은 질문 감사합니다.

클러스터링은 데이터의 그룹을 나눠주는 역할만 하는 것이기 때문에 0은 0으로, 6은 6으로 매칭이 되지 않습니다. 따라서 정확도를 구하기 위해 매칭 분포를 나타내는 w 행렬를 구한 후 w를 기준으로 실제 라벨과 클러스터링 라벨이 가장 매칭이 잘 되도록 최적화 과정을 거치게 됩니다. 이 때 linear assignment를 사용합니다.

직관적인 이해를 위해 예를 들면 타겟 라벨이 0: 5개, 1: 3개, 2:1개 있고 예측 라벨이 0:3개, 1:5개, 2:1개라면 예측 라벨의 0->1, 1->0, 2->2 로 맞춰 진다고 생각하시면 됩니다.

이 방법은 최적화 문제 중 한 방법으로 딥러닝 학습하고는 다소 멀리 있는 내용입니다. 여기서 중요한 것은 "클러스터링은 정확히 라벨의 순서를 정해주지 않기 때문에 정확도 계산시 재배치가 필요하다."의 개념을 알고 가시는 것입니다. 수학 내용을 반드시 공부하셔야 한다면 아래 링크에 관련 방법론에 대한 내용과 참고문헌을 확인하실 수 있습니다.

https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linear_sum_assignment.html

감사합니다 :)

수업자료 제공 부탁드립니다.

0

118

2

코드가 어디에 있는지 모르겠습니다.

0

117

2

논문 구현

0

209

2

overfitting이 나는 이유가 궁금합니다.

1

185

2

분류 성능이 잘 안 나오는 이유

0

226

1

AutoEncoder 차원 질문

1

260

2

사전 학습 모델에서의 layer 변경에 대한 질문

1

227

1

7강 폴더 만들

0

268

1

4-3강 cross-validation에서의 best model 선정 기준

0

462

1

regression 문제에 대한 결과 시각화

0

220

1

Loss function 관련하여 질문드립니다.

0

973

1

early stopping 코드 문의

0

333

1

예측 그래프

0

364

1

데이터 불균형

1

368

1

8강 전이 학습 질문

0

409

2

data의 gpu처리 질문

0

248

1

nn.Linear(1024, 10) 관련 질문드립니다.

0

297

1

학습과 평가시 Loss 함수가 다른 이유

0

256

1

전처리 관련해서 질문 있습니다.

0

232

1

데이터 엔지니어의 역량을 기르려면 어떻게 해야할까요?

0

950

2

역전파 내용 중 미분 관련 질문 드립니다

1

285

1

8강 전이학습에서 kernel size 관련 질문 드립니다.

1

969

1

이미지분류-합성곱신경망(CNN) 피쳐맵 질문입니다.

1

594

1

14강 데이터 불균형 RandomRotation

1

488

1