Wednesday, July 5, 2017

유학 준비 - 자기소개서와 연구계획서 작성법

간결하게 쓰겠습니다.
  • 자기 소개서
    • Q. 자기 소개서에 쓸 내용이 너무 없어요.
      • A. 자기 소개서에 쓸 내용을 만들었어야합니다. 공부를 했다면 그 내용을 정리해서 인터넷에 올리세요. 연구를 도운게 있다면 공저자로 이름이 들어있겠죠? 그걸 사용하세요. 뽑는사람 입장에서는 이 사람을 뽑았을 때 혹시나 깽판치거나 완전 말아먹을수도 있다는 걱정을 항상 하게됩니다. 따라서 그런 불안감을 줄여주려면 근거 없는 경험을 나열하는게 아니라 신뢰할 수 있는, 권위 있는 사람이나 소속이 연관된 뭐라도 하셔야합니다.
      • 지금까지 한게 없으면 지금부터라도 하세요. 1달이라도 의미있는걸, 그리고 문서화할 수 있고 설명이 가능한걸 뭐라도 하고 그걸 적으세요. 만일 수 개월의 시간이 있다면 분명 의미있는 활동을 할 수 있습니다. 
    • Q. 자기 소개서를 교수가 읽나요?
      • A. 읽는다고 가정하고 쓰세요. 
    • Q. 주의사항
      • A. 본인이 참여한 프로젝트나 기관을 너무 열심히 설명하지 마시고 본인이 참여한 이유, 맡은 역할, 배운 내용을 쓰세요. 즉 본인이 뭘 하셨는지를 적으셔야합니다. 자기소개서는 내 예전 직장 소개서가 아닙니다.
  • 연구계획서
    • Q. 전 아는게 없는데 연구계획서를 어떻게 쓰죠? 
      • A. 연구계획서를 쓸 수 있도록 해당 분야의 논문, 서적, 발표자료 등을 면밀히 찾아보시길 바랍니다.
    • Q. 대학원 다니는 동안 연구계획서대로 진짜 연구를 수행해야 하나요?
      • A. 아뇨, 실제로 연구하는 내용은 엄청나게 바뀔겁니다. 그렇지만 현 시점에서 최대한 노력해서 쓰셔야합니다.
    • Q. 연구계획서를 교수가 읽나요?
      • A. 읽는다고 가정하고 쓰세요.
  • 그 외
    • 자기소개서에서는 본인의 과거를 소개합니다. 어지간하면 최근 몇 년만 적으세요.
    • 연구계획서에는 본인이 미래에 - 향후 몇 년 간 - 뭘 할지 적습니다. 
    • 따라서 두 문서는 내용이 겹치거나 같은 말을 반복하지는 마세요. 그러나,
      • 과거에 나는 이런이런걸 했고, 이건 나의 어떠한 면을 보여주며, 내 관심 분야를 이렇게 공부해왔고,
      • 미래에도 이걸 계속하고 싶으며 이러이러하게 열심히 잘 할것이니 뽑아달라.
    • 로 일맥상통해야 합니다.
    • 연구계획서에 적힌 연구 내용은 당연히 지원하는 학교와 잘 맞아야합니다. 교수의 논문 목록을 찾아보시면 최근 관심분야가 나오겠죠.
    • 자기소개서나 연구계획서가 당락을 가르는지 관심갖지 마세요. 그냥 열심히 준비하세요. 교수마다 다르고, 학교마다 다르고, 기분따라 다릅니다. 남들이 어떻게 하는지, 어떻게 했는지는 전혀 중요하지 않습니다.

Friday, June 30, 2017

음악 관련 공동연구 하실 분!

안녕하세요, 공동 연구 하실 분 구합니다! 음악 관련 연구 주제 2개를 생각중입니다.

1. 데이터 사이언스에 더 가까울 수도 있는데요, 미리 계산된 음악 피쳐랑 메타데이터로 장르 구별하는 챌린지에 참가하려고 합니다. Kaggle비슷한건데 http://multimediaeval.org 에서 주최하는거에요.
하려는 일은, pandas/numpy/scikit-learn으로 전처리 빡시게 하고 그 뒤는 keras/scikit-learn으로 학습하는 전형적인 카글 솔루션을 따라가려고 합니다. 음악 관련 데이터이니만큼 전처리랑 네트웍 구조 만들 때 관련 지식을 활용해 성능을 높일 수 있을거라고 예상하고있습니다.

2. 이건 전형적인 Music information retrieval 주제입니다.
키워드: sample-based audio, convnet, rhythm, music classifiation/tempo estimation/backbeat detection
타겟은 2018 ICASSP로 생각중입니다. 마침 내년에 서울에서 하죠. 논문 제출은 10월 27일까지네요. 미리 준비해서 실험 탄탄하게 잘 하고, 학회 이후에도 레터나 저널 논문을 쓰게 될 수도 있구요. 

공동으로 연구하고 논문 작성하실 의향이 있으신분은 메일로 연락주세요. 제가 1저자만큼 기여할 시간을 내기가 어려워서 8월 중순까지 시간을 투자하실 수 있으셔야 합니다. 따라서 학부생/석사과정/박사 초반이시면 역할을 나누기가 편할 것 같습니다. 구현 대부분을 하셔야하므로 연구에 필요한 코딩은 할 수 있으셔야합니다. 논문 작성은 제가 주로 해도 괜찮고 같이 해도 많이 도와드릴 수 있습니다.

이메일은 keunwoo.초이 앳 qmul.ac.uk 입니다. 간략히 소개랑 얼마나 시간 내실 수 있는지 적어주시면 감사드리겠습니다. 그럼 부담없이 연락주세요!

Wednesday, June 14, 2017

음성/음악신호+머신러닝 초심자를 위한 가이드 [4편]

음성/음악신호+머신러닝 초심자를 위한 가이드 전체 게시물은 여기를 클릭하세요.

데이터 수집

이번엔 데이터 수집을 주제로 글을 쓰겠습니다.

기존 데이터셋 사용

음악 데이터 셋은 http://www.audiocontentanalysis.org/data-sets/ 여기에 잘 정리되어있습니다.
오디오 관련 데이터셋은 좀 더 중구난방인데, 
- Urbansound8K by Justin Salamon
- AudioSet by Google, 2017 (유튜브 주소만 제공하고 직접 크롤링해야함. 어떻게? Fuel, YouTube-dl)
- DCASE audio detection by Queen Mary University of London
- Bird Audio Detection by Queen Mary University of London

이 정도가 생각나네요.

데이터 수집

살다보면 힘들고 험한 길을 가야할 때가 있죠.
freesound에서 직접 크롤링해서 뭔가 할 수 있지 않을까? 하는 희망을 한번쯤은 품어볼 필요가 있습니다.
아래 코드를 참고하세요. 주소는 여기





데이터 정리

데이터를 모으는게 다가 아니죠. 일단, 키워드로 검색을 했으니 특정 소리가 들어있는 음악 파일을 잔뜩 받았다고 해봅시다. 뭘 해야할까요?


  • Normalisation
import numpy as np
import librosa

x = librosa.core('event1.mp3', sr=None, mono=True)
x = x / np.max(np.abs(x))

  • Trimming
앞뒤에 조용한 구간이 있다면 싹둑 잘라주는편이 좋겠죠. 이건 어느정도 대애충 감으로 하는게 편할것같네요. 저라면, hann window같은걸 씌우고, 각 윈도에서 평균 에너지를 구해서 (np.mean(np.abs(windowed_source_x) ** 2)), 그 윈도 별 평균 에너지를 기준으로,아무런 음향 이벤트가 안일어나는 첫 N개의 윈도와 마지막 M개의 윈도를 날리겠습니다.

  • Augmentation
데이터가 부족하면 뻥튀기를 하고싶겠죠? 방법은 여러가지가 있습니다. 적당한 구간에서 pitch shift / time expanding을 하시면 무난할테고, 다른 잡음을 적당히 섞어주는것도 좋겠죠 (x = x + gain * noise). 이 정도만 해도 벌써 10배이상 데이터가 늘어날 것 같네요. 


  • 주의사항
음원이 매우 길다거나해서 여러 개의 학습 데이터 샘플로 쪼개서 쓰는 경우에, 같은 음원에서 나온 샘플 여러개가 training/validation/test 셋에서 섞이지 않도록 주의합시다.


이상입니다.

Monday, June 5, 2017

WWDC 2017 - Apple Music, MusicKit API

Apple Music 관련 몇 가지 뉴스가 나왔네요.
  • 애플 뮤직이 런칭한게 약 2년 전입니다. 2015년 6월 30일에 서비스를 시작했군요. 1년 반이 2016년 12월에 유료 구독이 2천만명을 넘었다고 기사가 나왔었고 오늘은 2천 7백만명이 넘었다고 발표했습니다. 업계 1위인 Spotify가 5천만명을 발표했죠. 둘 다 여전히 성장을 하고 있습니다. 
    • 참고로 Spotify는 아직까지 적자 기업이지만 음악 비즈니스 전체의 파이가 커지고 있는 것 등을 감안하면 미래가 그렇게 어둡지는 않아보입니다. 
    • 역시 사견입니다. Spotify는 광고 기반 무료 감상때문에 적자인건데, 이게 음악 시장 전체를 악화시킨다고 생각합니다.
  • MusicKit 이라는 새 API를 발표했군요. iOS 11의 신기능입니다. 이걸 쓰면 애플 뮤직 유저의 각종 정보 - 라이브러리, 개인화 추천 등에 접근이 가능하다고 하네요. 애플 뮤직은 안드로이드에서도 있으니 안드로이드용 API도 나오면 좋을텐데 딱히 언급은 없었습니다.
  • 역시 Spotify포함 기존 서비스에 많이 있는거죠. 소셜 기능을 추가했네요. '친구' 맺은 사람이 뭐 듣는지 나오고 그런거라고 하네요. 자세한 언급은 없었지만 연락처에 있는 목록 / 페북 친구 등등으로 연계해서 나올거같습니다.

국내 스트리밍 서비스도 재미있는 API를 많이 열면 좋겠습니다만, 경제적인 유인이 적으니까 안하는것이겠죠. 연구자, 종사자 및 음악을 좋아하는 사람으로서 매우 아쉬운 면입니다.

Friday, June 2, 2017

블로그를 하십시오.

독자가 컴공 대학원생이라고 가정하고 글을 쓰겠습니다. 아닌분들이 더 많겠죠? 본인의 상황에 맞는 조언인지 생각해보면서 읽으시면 되겠습니다.

블로그를 운영하면 생각보다 많은 사람들이 와서 봅니다.
그리고 연구는, 더군다나 취직은, '장사'의 속성을 지니고 있습니다.
아시다시피 그리고 컴공 분야 종사자들은 컴퓨터를 엄청 오래 합니다.

블로그에 논문을 설명해놓으면, 더 많은 사람들이 효율적으로 당신의 연구를 이해하게 됩니다. 그럼 더 많이 읽고 더 많이 인용하겠죠.
블로그의 좋은 글을 보면서 당신이 누군지 알게되고, 당신의 연구와 논문에 관심을 갖고 더 신뢰하게 됩니다.
블로그를 보면 독자는 당신의 연구 분야와 능력을 알게 되고, 더 낮은 기회비용으로 당신을 고용하려고 하겠죠.

모두 실제로 제게 일어난 일입니다. 저는 국문 블로그(여기), 영문 블로그, 깃헙 저장소 등으로 열심히 '영업'을 합니다. 지금보다 훨씬 영업할 껀덕지가 없을때부터 그랬습니다. 이건 제가 박사과정 시작하고 갔던 첫 번째 학회에서 (현재 DeepMind에서 일하는, AlphaGo와 Wavenet 논문의 저자) Sander Dieleman이 조언해준 덕분입니다. Sander도 Spotify x Convnet 게시물이 엄청난 인기를 끌어서 유명해졌고 그 결과로 딥마인드에서 면접 오퍼를 받았습니다. 저는 그런 스타급 연구자가 아니지만 현재 일하고있는 스타트업(버즈뮤직)에서도 제 블로그를 보고 연락을 줬고, 자문역으로 일하기 시작한 제이마플도 마찬가지입니다. 멜론에서도 연락이 왔었군요. 제가 런던에 있으니 더 용이한 것도 있겠지만 Mixcloud나 Kantar Media에서도 비슷한 연락을 받았습니다.

아마 제가 블로그/깃헙을 안했다면 아무 일도 일어나지 않았을 것입니다. 여러분, 블로그를 하세요. 엄청난 도움이 됩니다. 남들도 하루종일 웹서핑 하거든요.

Wednesday, May 17, 2017

두괄식 글쓰기: 영어 논문을 'Poor English'로 리젝 당하지 않는법

요즘 저랑 같은 사무실 쓰는 친구들이 학회를 준비중입니다. 최근에 리뷰가 끝났고 이제 통과/탈락 Acceptance/Rejection을 정하는 회의를 하더군요. 그리고 그럭저럭 재밌는 연구를 했지만 논문 작성 - 글쓰기를 매우 못해서 모든 리뷰어에게 낮은 점수/Rejection을 받은 논문을 보여주더군요.

인터넷에서 논문 리뷰 가이드를 찾아보면 '글쓰기'보다 연구 내용을 보고 평가하라고 써있곤 합니다. 그렇지만 현실에서는 영어 또는 글쓰기 이슈로 점수를 많이 깎이고 결과적으로 억셉될수도 있었던 논문이 리젝되는 슬픈일이 일어나곤합니다.

사실 억울하죠. 서양애들은 영어가 모국어가 아니더라도 한국어 화자가 얼마나 영어로 말하고 글쓰기가 어려운지 몰라요. 그렇지만 현실이 냉정하니 생존할 방법을 논의해봅시다. 저도 많이 부족하지만 제가 깨달은 몇가지를 이야기해보도록 하겠습니다. 

몇 가지 이야기를 할건데, 핵심 키워드는 "두괄식" 입니다. 

두괄식으로 초록 쓰기

오늘 제가 리젝당한걸 지켜본 논문의 시작은 두 문단으로 되어있습니다. 대략 이런식으로요. (제가 작성한 예제입니다.)

The development of parallel-computing hardware and optimisation techniques have been helped research on deep neural networks since 2000s when .. blahblah (중략)
This work present a music classification based on deep convolutional neural network. ... (후략)

즉, 첫 문단에 이 연구의 배경 설명을 소개하고 두 번째 문단에서 본격적으로 이 논문의 내용을 소개하는겁니다.

결론부터 이야기하면, 서양식 글쓰기에서 첫 번째 문단은 완전 불필요한 잉여문단입니다. 저런 소개를 빼고 조금도 어색하지 않아요. 리뷰어는 이미 해당 분야의 배경 지식을 갖고있습니다. 저런 소개는 잉여인데다가 리뷰어의 집중력을 흐트려놓습니다. 그리고 논문의 시작에서 강렬하고 좋은 인상을 주지 못하면 이미 "이 논문 뭐야? 어디꺼야?"이러면서 부정적으로 보게 되고 최악의 경우엔 제대로 읽지도 않아요. 부당하지만 현실.

게다가 영어 실력이 조금 떨어져서 쓸데없는 내용을 담은 이상한 문장이 나왔다면? 리젝률이 막 올라가는거죠. 오늘 본 논문이 딱 이랬어요. 

즉, 부족한 영어실력 * 두괄식이 아닌 글쓰기 = 리젝. 따라서 일단 두괄식으로 초록을 쓰세요. 초록 첫 문장에서 바로 강펀치를 빵! 날리셔야합니다.

두괄식으로 본문 쓰기

마찬가지 내용입니다. 각 문단의 첫 문장만 모아놓으면 자동으로 개요가 되어야한다고 생각하면 편합니다. 문단의 첫 문장은 그 문단의 가장 중요한 내용을 요약해야합니다. 만일 중요한 내용이 두 개가 나온다면 문단을 나누세요.

두괄식으로 문장 쓰기

논문에서는 'we'가 아니라 수동태로 문장을 작성하라고 배우죠. 그런데 보면 종종 we로 시작하는 문장도 있어요. 이걸 더 자세히 설명해볼게요.

1. Audio signals are converted into short-time Fourier transform.
2. Short-time Fourier transform is adopted to represent audio signals.
3. We use short-time Fourier transform to represent audio signals.

언뜻 보면 같은 내용을 다르게 표현한것 같지만 논문 글쓰기를 하는 경우에는 저 셋을 구별해서 사용해야합니다.

일단, 1과 2는 소위 수동태고 3은 능동형 문장이네요. 그럼 어떤 차이가 있을까요?

1. 주어가 Audio signals로 되어있네요. 이 경우엔 오디오 신호를 어떻게 처리하는지가 제일 중요한 상황입니다.
2. 주어가 Short-time Fourier transform이네요. 이 맥락에서 다른 방법 (CQT, Mel-spectrogram, ...)이 아니라 STFT를 사용했다는 사실이 중요한거죠.

사실 1과 2는 그렇게 다르진 않습니다. 독자가 읽기에도 별 차이 없는 경우가 대부분일거에요. 그러나 3은 아주 다릅니다.

3. 상황에 따라 "We used short.."로 쓰는게 나을수도 있어요. 아무튼, 왜 논문인데 능동형이냐! 이 문장은, 제안한 방법이 꼭 STFT를 써야하는건 아니고 다른것도 가능한 상황, 즉 알고리즘 내부에서 STFT를 쓰건 다른걸 쓰건 큰 차이가 없고, 이 논문에서 보고하는 실험은 STFT를 썼다는걸 명시하는 경우에 쓸 수 있는 문장입니다. 반대로, STFT를 (거의) 반드시 써야하는 상황이라면 1이나 2처럼 쓰는것이 더 적합하겠죠.

결론

초록도, 본문의 문단도, 문장도 모두 두괄식으로 써야합니다. 한국인의 대화/글쓰기 사고방식이 두괄식이 아니라 두괄식으로 쓰려고 맘먹어도 자꾸 잊을거에요. 그래도 계속 이걸 잊지말고 계속 쓰고 고치다보면 훨씬 좋은 글이 나올거에요. 그럼 다들 좋은 논문 쓰길 바랍니다.

Saturday, April 29, 2017

ISLR 2.2 - An Introduction to Statistical Learning (with applications in R)



pdf 다운로드 링크
구매 링크 (네이버 책)

2. 통계 학습 Statistical Learning

2.2 모델 정확도 평가 Assessing model accuracy


이 책에서는 선형 모델보다 복잡한 다양한 모델을 소개할 예정입니다. 왜 이렇게 많은 모델이 존재하고 이걸 다 공부해야 할까요? 그냥 제일 좋은거 하나를 쓰면 되지 않을까요? (아님) 안타깝게도 모든 경우에 제일 적합한 최고의 모델같은건 없습니다. 데이터 셋에 따라 다른 모델의 성능이 더 좋을 수 있고 문제에 따라, 목적에 따라 다 다를 수 있습니다.

제일 좋은 모델을 고르려면 어떤 모델이 좋은지를 평가할 수 있어야합니다. 이 부분을 알아봅시다.

2.1.1. 학습 성능 평가 Measuring the quality of fit

데이터 셋이 주어져있을 때 여기에 제일 잘 맞는 모델을 고르려면 모델의 성능을 수치화해야합니다. 회귀 regression 문제에서는 흔히 평균 제곱 오차 (MSE, Mean square error)를 많이 사용합니다. 말 그대로 오차의 제곱을 평균낸 것이죠.

$MSE = \frac{1}{N} \sum_{i=1}^n (y_i - \hat{f}(x_i))^2$

$y_i$가 정답, $\hat{f}(x_i)$가 우리의 예측 값이구요. 예측값이 정답에 가까울수록 MSE는 작아지게 됩니다.

학습 셋에서 구한 MSE를 '학습MSE' (training MSE)라고 하죠. 그런데 우리가 진짜로 신경쓰는건 학습MSE가 아니라, 생전 처음 보는, 새로운 데이터에서 모델의 MSE - 즉 시험MSE (test MSE)입니다. 예를 들어 주가 예측 모델을 짰다고 하면, 과거의 주가 패턴을 분석해서 모델을 만들고 학습시키겠죠. 그런데 이 모델의 학습MSE가 완벽해서 과거의 주가를 100% 맞추는건 아무 의미가 없습니다. 시험 셋에서의 성능 -- 즉 내일 주가를 맞추느냐! 가 중요하겠죠. 그래야 돈을 버니까!

때론 시험 셋이 있어서, 시험셋에서 성능이 제일 잘 나오는 모델을 고르면 되기도 합니다. 그런데 아닐때도 있죠. 그럼 어떻게 해야할까요? 흔한 오해는 학습MSE를 보고 판단하는겁니다.



그림 2.9를 보시죠. 우측 회색 선이 학습MSE, 빨간 선이 시험MSE입니다. 모델의 복잡도가 올라갈수록 학습 MSE는 계속 감사합니다. 왜냐면, 복잡한 모델일수록 어떻게든 학습 데이터에 모델을 "끼워 맞추는" 식으로 학습할 여지가 많기 때문입니다. 왼쪽 그림의 녹색 그래프가 바로 그런거죠. 복잡한 데이터에 막 그래프가 쭈글쭈글거리면서 끼워맞춘거죠.

이런 경우에 빨간 선, 즉 시험 셋의 MSE가 제일 적은 점(파랑 네모)로 골라야 최적의 선택이 됩니다.

2.2.2. 바이어스-베리언스 트레이드 오프 The bias-variance trade-off


시험MSE(의 제곱)는 아래와 같이 세 항으로 나눌 수 있습니다.

$E(y_0 - \hat{f}(x_0))^2 = Var(\hat{f}(x_0)) + [Bias(\hat{f}(x_0))]^2 + Var(\epsilon)$

여기에서, 역시 $\epsilon$은 우리가 어떻게 할 수가 없습니다. 따라서 여기에 있는 Variance와 Bias를 최소화하는것이 좋겠죠.

그런데 대체 여기에서 말하는 Variance와 Bias가 뭘까요?

Variance는 데이터셋을 바꾸면 일어날 수 있는 $\hat{f}$의 변화입니다. 만일 Variance가 크다면, 같은 모델을 학습 데이터만 바꿔도 오차가 확 증가합니다.

Bias는 실제로 일어나는, 훨씬 복잡한 상황을 이보다 단순한 함수 $\hat{f}$를 사용함으로써 생기는 오차입니다. 예를 들어 실제로 일어나는 상황엔 입력-출력 사이에 비선형성이 작용하는데 이걸 선형으로 모델링한다면 어쩔 수 없이 오차가 생기게됩니다.

일반적으로, 복잡하고 유연한 모델을 쓸수록 Variance가 증가하고 Bias는 감소합니다. 당연히 그렇겠죠. 그러나 이는 실제 문제가 어떤지, 그리고 우리가 어떤 데이터를 가지고 있는지에 따라 달라집니다.

2.2.3. 분류기 설정 The classification setting

그동안은 MSE를 쓰면서 회귀 모델을 가정했습니다. 이번엔 분류의 경우에 어떻게 되나 보도록 합시다. 우선 평가 방법으로 흔히 오차율 error rate을 계산합니다.

$\frac{1}{n}\sum_{i=1}^n I(y_i \neq \hat{y}_i)$

이 식에서 $\hat{y}_i$는 i번째 입력 데이터로 모델이 예측한 값입니다. 그리고 $I()$는 indicator 함수라고 흔히 부르는데, $I(true)=1$, $I(false)=0$ 으로 정의됩니다. 즉, 예측 값이 맞다면 -- 예를 들어 숫자 인식기라면 0-9중에 3을 예측했고, 실제로 정답이 3이면 $I()$가 1이 되는 것이죠. 따라서 최종적으로 100개를 테스트했는데 정답이 95개면 오차율은 $5/100=0.05$가 나오는 간단한 방식입니다.

베이즈 분류기 The Bayes Classifier
베이즈 분류기는 아래의 식을 (Bayes rule) 최대화하는 클래스 $j$를 고르는 분류기입니다.

$Pr(Y=j | X=x_0)$

쉬운 예를 들면, 만일 클래스가 두개인 이진분류 binary classification이면, $Pr(Y=1
 X=x_0 > 0.5 $이면 $Y=1$로 예측을 하는 방식입니다.

베이즈 분류기는 테스트 오차율을 최소화하는 규칙입니다. 이 오차율을 베이즈 오차율 Bayes error rate이라고 부릅니다.

KNN; K-nearest neighbors
그럼 베이즈 분류기를 쓰면 참 좋겠죠? 그러나 실제로는 조건부확률 $Pr(Y=j | X=x_0$를 모르기 때문에 불가능합니다. 즉 베이즈 분류기는 영원히 도달할 수 없는 궁극의 목표같은거죠. 이 조건부 확률을 추정하는 방법이 여러가지가 있는데 그 중 하나가 KNN입니다.




KNN은, 학습 데이터의 $X$를 보고, 테스트 데이터 $x$가 들어왔을 때, $x$ 근처의 가장 가까운 값 $K$개의 클래스를 살펴보고 다수결로 여기에 쫓아가는 방식입니다. 즉 자기 주변의 값을 보고 비슷한걸로 가는, 매우 직관적인 방법입니다.

$K$가 1이면 무조건 제일 가까운걸 쫓아갑니다. 반대 극단으로, 학습 셋이 100개의 데이터인데 $K$가 100이라면 무조건 전체 학습 셋에서 제일 많은 라벨을 쫓아가는거죠. $K$가 작을수록 decision boundary - 클래스를 결정짓는 경계선이 울퉁불퉁 꼬불꼬불해집니다.


여기에서도 적당한 $K$를 고르는것이 중요합니다. 아래 그림을 보면 $1/K$가 증가할수록 -- 즉 $K$가 감소할수록 -- 학습 오차는 줄어들지만 테스트 셋 오차는 어느순간 오히려 증가합니다.


2.3 Lab: Introduction to R


PDF파일을 보고 직접 해보시길 바랍니다.