Orange를 활용한 코딩 없는 AI 데이터 분석 - Lv.4 분류 머신러닝 분석 강좌의 맛보기 강의입니다.
이번 영상에서는 가장 가까운 이웃을 따라가는 KNN에 대해서 함께 알아보도록 하겠습니다. KNN이라고 하는 것은 매우 독특한, 개성 있는 분석 모델인데요. 일단 KNN이라는 이름 자체는 지금 보시는 것처럼 최근접이웃법, K 최근접이웃이라고 하는 이러한 이름의 약자다. 분류에도 사용할 수 있고 회귀에도 사용할 수 있는 지도학습 기법이고요 이것은 미리 만들어진 모형이 없습니다 예를 들어서 회귀 분석처럼 y는 ax 플러스 b 같은 이런 무엇인가를 만들지 않는 거예요 수학 공식도 없고 뭔가 만들어진 게 없습니다 그런 거 없다가 새로운 데이터가 뭔가 하나 딱 나타나요 그럼 그때부터 이 데이터의 주변에 있는 가까운 데이터들 가까운 데이터들의 값을 토대로 해서 결정을 하게 되는 이러한 방식이 바로 최근접이웃 KNN 이라고 하는 방식입니다 예시를 하나 들어 보겠습니다 예를 들어서 우리가 가로축에는 한번 구매를 할 때 얼마의 금액을 지불하는가 라고 하는 기준을 두고 또 세로축에는 그래서 그 사람이 몇 번이나 우리랑 거래를 했는가 라고 하는 그런 기준을 두겠습니다 이걸 기준으로 해서 지금까지 있었던 어떤 데이터들은 예를 들어서 한번에 구매하는 금액이 크고 다만 조금 상대적으로 구매 횟수는 좀 작은 한번 살 때는 많이 사는 횟수가 적더라도 한번 살 때는 많이 사는 사람들 우리가 이런 사람들을 예를 들어서 이 파란 데이터 포인트들을 대량 구매 고객이라고 분류를 하기로 하고 그리고 한번에 구매하는 금액은 좀 작지만 그래도 자주 자주 와서 사는 이러한 사람들 이 녹색 데이터 포인트에 있는 사람들을 소액 단골 고객이다 라고 분류를 한다 라고 하겠습니다 만약에 이것이 SVM 이다 라고 한다면 서포트 벡터 머신 이라고 한다면 미리 어떠한 그 클래스의 경계를 나눠줄 수 있는 결정 경계 같은 것을 미리 만들게 되죠 로지스틱 회귀라고 한다면 이 데이터를 토대로 해서 그것을 뭔가 예측할 수 있는 로지스틱 회귀 예측선을 만들고 임계점을 기준으로 어떻게 판단을 하겠다 하는 걸 뭔가 만들어 놓잖아요 하지만 KNN은 그런 게 없습니다 그냥 정답이 있는 상태니까 이 데이터는 이 데이터는 이 클래스임 이라고 딱 아무런 준비 없이 그냥 그대로 있어요 그러다가 새로운 어떤 데이터가 들어왔습니다 여기 새로운 고객이 짠 하고 등장을 했어요 그럼 이제부터 생각하는 거죠 이 사람은 어디에 분류해서 넣으면 좋을까 이 사람을 대량 구매 고객이라고 해야 할까 소액 단골 고객이라고 해야 할까 라는 걸 이제 고민하기 시작합니다 KNN 이라고 하는 이 이름에서의 K 우리가 K 라고 하는 표현을 다른 곳에서도 보았죠 예를 들어서 K 폴드 교차 검증 이라고 하는 것도 보셨습니다 그때 K 라고 하는 것은 폴드를 만들긴 만들건데 몇 개를 만들진 모르겠다 라고 하는 게 K-fold인 거잖아요. K개를 만들겠다 라고 하는 것처럼 최근접이웃을 따지긴 따질 건데 몇 명을 따질지 정해진 건 아니야 라는 뜻으로 우리가 K-최근접이웃이라고 이야기를 합니다. K값에 따라서 값이 달라질 수가 있는 거죠. 예를 들어서 지금 새로운 고객이 나타났어요 그런데 우리가 이 KNN 이라고 할 때의 K를 만약에 1이라고 한다 라고 하면 이 데이터로부터 새로 등장한 데이터로부터 가장 가까운 이웃 하나만 딱 확인을 하는 겁니다 하나만 근데 어떠세요 제일 가장 가까운 이웃 K가 1일 때 녹색인 소액 단골 고객이 이 데이터와 가장 거리상 가깝죠 그러면 가장 가까운 이웃이 소액 단골 고객이니까 그럼 얘도 이제 소액 단골 고객으로 분류하겠어 라고 하는 거죠 만약에 K가 3이라면 K를 3으로 본다면 이 데이터로부터 가장 가까운 이웃 3명을 본다는 뜻입니다. 그런데 3명을 보니까 어떠세요? 녹색이 가장 가까우네요. 그리고 두 번째로 가까운 애, 세 번째로 가까운 애를 놓고 보니까 이렇게 둘이 더 가까운 데이터 포인트로 잡히게 된 거죠. 지금 보시면 원을 이렇게 조금 더 늘린 상황이라고 하는 건 직관적으로 보실 수 있으실 거예요. 그럼 이때는 어떠세요? 녹색이 하나 있고 파란색이 두 개 있네요. 그러니까 이 경우에는 가장 가까운 이웃 3을 봤더니 K가 3일 때는 파란색이 둘이고 녹색이 하나야. 그러니까 다수결로 놓고 볼 때 파란색이 더 많네. 그러니까 이제 이 데이터는 파란색 데이터는 파란색 대량 구매 고객 이라고 하자 라는 방식으로 분류를 해주는 것이 바로 KNN 입니다 다수결을 사용하는 거죠 다수결을 사용하는 거다 보니까 만약에 여기서 K는 4개로 하겠다 K는 6개로 하겠다 라는 식으로 뭔가 이렇게 펼쳐 놨는데 만약에 거기서 녹색이 2개고 파란색이 2개고 이러면 다수결로 결론을 내릴 수가 없겠죠 그래서 KNN에서 K라고 하는 것은 다수결을 쓰다 보니까 다수결을 사용하다 보니까 홀수로 지정하는 것이 일반적이다 라고 할 수 있습니다 1개만 따지거나 3개, 5개, 7개처럼 가장 가까운 이웃 몇 개라고 할 때 다수결에서 어느 한쪽으로는 결판이 나야 되기 때문에 반드시 홀수를 쓰실 것을 적극적으로 권장드립니다 이 방법은 우리가 앞선 것에서는 두 개의 클래스가 있고 새로 들어온 데이터를 어떤 클래스로 분류할 거냐 라고 하는 분류의 문제로 봤잖아요 근데 이 KNN이 분류에만 사용되는 건 아니고요 회귀적인 예측, 어떤 수치 예측에서도 사용할 수가 있습니다 그럼 수치 예측을 하면 어떻게 되느냐 방법이 동일해요 간단합니다 예를 들어서 X축은 어떤 깔끔 샴푸 라고 하는 샴푸가 있는데 그 샴푸를 얼마나 좋아하는가 라고 하는 것으로 이렇게 배치를 하고 그리고 Y축은 찰라라 컨디셔너 라고 하는 이런 컨디셔너가 있는데 그 컨디셔너를 얼마나 좋아하는가 선호도를 가지고 8명을 데이터 공간에 배치했다고 하겠습니다 지금 보시는 것처럼 어떤 샴푸에 대해서 그 샴푸 얼마나 좋아하세요 라고 물어봐서 1점 2점 3점 4점 뭐 다들 답변 했겠죠 이 사람들은 뭐 1점 2점 3점 뭐 이런 식으로 답변을 했을 것 같아요 뭔가 이렇게 답변해서 저는 그 샴푸는 이 정도 마음에 들고요 그 컨디셔너는 이 정도 마음에 들어요 라고 하는 것을 가지고 사람들을 이렇게 배치를 한 거죠 이 배치된 공간, 이 공간에서 새로운 걸 물어보는 겁니다 세 번째를 물어봐요 우리가 정말 궁금한 거 뭘 물어보느냐 샴푸도 아니고 컨디셔너도 아닌 새로운 거 에센스에 대해서 물어보는 거죠 향긋해 헤어 에센스라는 게 있는데 이거 한번 써보세요 써보시고 얼마나 맘에 드는지 한번 말씀해주세요 라고 했습니다 이미 샴푸와 컨디셔너에 대한 선호도로 어떤 좌표 공간이 만들어진 상태에서 이제 에센스에 대해서 물어봤어요 그랬더니 이 사람은 저는 이게 이 정도 좋은 거 같아요 2점을 줬고 누구는 1점을 줬고 누구는 3점 누구는 4점 누구는 뭐 3점 요렇게 줬습니다 요렇게 줬어요 자 이제 우리가 궁금한 건 어떤 거냐면 깔끔샴푸를 요정도 좋아하고 찰라라 컨디셔너를 요정도 좋아한 어떤 우리가 궁금한 새로운 데이터가 있습니다 이 데이터 포인트가 있어요 그러면 이 사람은 저 향긋해 헤어 에센스를 얼마나 좋아할까 라는 걸 예측하고 싶은 거죠 이해되시죠? 데이터 공간에 데이터들이 펼쳐져 있고 이제 누가 이웃인가라고 하는 것이 결정된 상태에서 그 이웃들한테 에센스 얼마나 맘에 드세요? 라고 물어봤고 점수를 미리 받아놨습니다 그때 우리가 예측하고자 하는 이 데이터는 얼마의 값을 내놓을까? 라고 하는 것을 확인하고자 하는 거죠 KNN의 방법은 분류나 수치 예측이나 방법이 똑같습니다. KNN이라는 게 뭐예요? 결국 K개의 이웃들의 어떤 값을 종합해서 판단하는 거잖아요. 근데 그게 분류일 때는 분류의 데이터는 카테고리컬 데이터이기 때문에 한마디로 문자 데이터들이잖아요 그러니까 너는 A가 좋아 B가 좋아 물어보고 다수결로 A라고 대답한 이웃이 더 많았다 그럼 A를 들겠다 라고 하는 식으로 이제 분류 문제에서 그렇게 동작을 하게 되는 거고 회귀 문제 같은 경우에 수치를 예측하는 문제 같은 경우는 만약에 K가 1이다 라고 하면 이 데이터로부터 가장 가까운 이웃의 값을 그대로 가져갑니다. 만약에 K가 1이라면 가장 가까운 이웃은 헤어 에센스를 4점을 줬죠. 그렇다면 이 데이터도 4점을 줄 거라고 예상을 하는 식인 거죠. 만약 K가 3이라면 어때요? K가 3이라면 이 데이터로부터 주변에 있는 3명의 이웃이 있고 누구는 2점을 주고 누구는 3점을 주고 누구는 4점을 줬죠 그러면 이건 다수결이 되는 상황이 아니잖아요 이런 상황일 때는 이 3명의 점수를 평균을 내서 평균을 내보니 3이구나 그래서 평균을 내서 가장 가까운 K개 이웃들의 값의 평균을 새로운 데이터의 예측 값으로 채택을 하게 됩니다. 어떠세요? 방법이 엄청 간단하죠? 매우 단순하고 직관적인데 또 다르게 생각하면 근처에 있는 이웃들의 값을 평균 내거나 또 근처에 있는 데이터 포인트의 레이블을 따라가는 것이기 때문에 사실 굉장히 합리적인 방법이기도 합니다 여기서의 핵심은 K가 얼마냐 라고 하는 게 굉장히 중요해지는 거죠 K가 얼마인가에 따라서 값은 언제든지 바뀔 수 있다 라고 하는 겁니다 최근접이웃을 몇 명까지 따지느냐에 따라서 우리가 아까 이 새로운 고객을 단골이라고 소액 단골이라고 할 것인가 아니면 대량 구매 고객이라고 할 것인가가 K가 1일 때는 바로 옆에 있는 사람이 녹색이라서 녹색으로 갔고 K가 3일 때는 K가 너무 작다. K가 너무 작으면 K가 너무 작으면 이런 상황이라면 사실 바로 옆에 있는 거 전체 데이터에 대해서 만약에 이런 상황이 있을 수가 있거든요 만약에 K가 너무 작다 진짜 난 1만 보겠다 라고 하면 K의 한 개는 녹색인데 정작 그 외에 다른 모든 가까운 것들 수많은 것들이 다 파란색이야 이런 불합리한 상황도 얼마든지 있을 수가 있어요 물론 실제로 그렇게 하는 경우가 조금 특이하다고 볼 수 있을지도 모르지만 대체적으로 무언가 한두 개의 가까운 이웃 옆에 있는 K가 굉장히 작은 상태에 너무 픽스를 하다 보면 오버피팅이 나는 거죠 너무 과적합 그 옆에 있는 그 이웃 그거에만 너무 매달리게 돼서 일반적으로 볼 수 있는 상황 사실 일반적으로 본다면 이거 제일 가까운 게 녹색인데 그거 외에 나머지 가까운 애들은 모두 다 파란색이다 얘 빼고 나머지는 다 여기에 있다 엄청 똑같다 K가 작으면 과대적합, 오버피팅이 발생할 확률이 굉장히 높아지는 문제가 있습니다 그러면 K가 크면 어떨까요? K가 엄청 커요. K가 엄청 크면 어떤 문제가 벌어지느냐? 일반적이기는 해요. 일반적이긴 한데 근데 그래서 정확히 어떻게 되나요? 라고 하면 뭔가 좀 두루뭉술한 거죠. 아니 뭐 다수결을 할 건데 예를 들어서 그런 상황이라고 따지면 다수결을 할 건데 데이터는 여기 있는데 K가 너무 커요. 그래서 주변에 있는 거 다 해줘요. 그래서 예를 들어 여기에 6개가 있고 똑같이 여기에 6개가 있어요 그래서 같은 공간 안에 전체 데이터가 있는데 전체 데이터에서 예를 들어서 K가 13인데 13개를 볼 건데 녹색은 6개밖에 되지 않는데 그 6개가 모두 여기 있다고 가정하고요 파란색은 7개씩이나 되는데 근데 그 7개가 모두 다 여기에 있다 라고 가정을 해봐요 그럼 우리가 상식적으로 볼 때는 당연히 가까이에 있는 이 6개들 가장 가까운 6개는 녹색이니까 오히려 6개를 녹색으로 묶으면 더 합리적일 것 같은데 K가 너무 크기 때문에 이 데이터로부터 너무 떨어져 있는 데이터 값의 영향을 받아서 엉뚱하게 6대 7로 파란색으로 분류가 되는 상황도 있을 수가 있는 거죠. 정확도가 굉장히 떨어지게 되죠. 그래서 이런 상황을 우리가 언더피팅, 과소적합이라고 할 수 있습니다. 그래서 적정 수의 K를 정하는 게 굉장히 중요한데요. 보통은 이제 KNN의 예시를 줄 때는 조금 쉬우려고 3개, 5개 이렇게 이야기를 하잖아요. 그런데 우리가 이것이 어떤 수학적으로 정해져 있는 그런 게 딱히 KNN은 반드시 이렇게 해야 한다 그런 건 아니에요 그건 아니지만 통상적으로는 우리가 KNN에서는 어떻게 정하냐면 일반적으로 K라고 하는 것은 데이터 세트의 제곱근 데이터 세트의 개수에 루트를 씌운 그 값에 근사시키는 방법을 많이 사용합니다. 이것은 하나의 참고할 만한 기준인 거고 이것이 꼭 반드시 그렇게 해야 되는 건 아니다 라고 하는 것도 강조드립니다. 통상적으로는 조금 가까운 이웃을 볼 때 데이터 세트의 제곱근을 조금 참고하는 그런 방식으로 KNN은 동작을 하게 됩니다. 자 그러면 우리가 KNN도 오렌지로 한번 직접 보도록 할까요? 우리가 어쨌든 그 분석 모델이 어떤 것이다 라는 것을 일단 확인을 하면 아 이게 이런 모델이구나 라고 큰 틀에서 한번 보면 실제로 그 분석 모델을 선택해서 메뉴가 어디인지 확인하시고 연결하는 것 사실 분석 모델의 연결은 워크플로우 자체는 어려울 게 없지만 연결을 하고 또 이걸 그냥 연결만 한다고 끝나는 게 아니라 더블클릭해 보면 해당하는 분석 모델이 가지고 있는 중요한 옵션들이 있잖아요 그 옵션이 대략적으로 어떤 것인지 라고 하는 것을 검토해 보는 그런 동일한 방법으로 설명을 진행을 하고 있죠 그러니까 KNN도 실행을 한번 해보도록 하겠습니다 일단 데이터 세트에서 오렌지 데이터 세트 중에 예를 들어 와인 퀄리티라고 하는 거 볼까요? 와인 퀄리티 레드 꼭 이거여야 되는 건 아닙니다 당연히 KNN은 분류도 할 수 있고 수치 예측도 할 수 있으니까 타겟이 있는 데이터 중에 numeric건, categorical건 여러분이 다루고자 하는 그러한 데이터 세트를 선택해 주셔도 좋고 파일을 올리셔도 다 좋습니다 와인 퀄리티 레드 같은 경우에 이 데이터를 가지고 우리가 KNN을 한다고 가정해 볼게요 그러면 모델이 있고 KNN으로 연결을 해 주면 되겠죠 그래서 이렇게 연결을 해 줄 수가 있고요 마찬가지로 테스트 앤 스코어로 이렇게 연결해서 분류하고 예측하는 능력이 얼마나 되는 것인가 라고 하는 것을 확인할 수가 있겠죠 더블클릭 해보시면 이 데이터 어때요? 지금까지는 너무 잘 맞추는 모델들이 나왔어요. 하지만 이렇게 보니 KNN이라고 하는 것이 있고 데이터를 설명하는 어떤 결정계수 오차에 대한 이러한 결론이라고 하는 것은 0.134밖에 되지 않는다 라고 하는 것들을 우리가 좀 볼 수가 있죠 보시면 생각보다 RMSE 같은 게 좀 많이 크다 그래서 이런 어떤 예측에서는 KNN이 그렇게 유리하지는 않구나 라고 하는 것도 판단할 수가 있어요 하지만 KNN도 그렇고 어떤 분류 모델, 분석 모델이든 얘는 반드시 압도적으로 좋은 성과를 낸다 얘는 무조건 안 좋은 성과를 낸다 그런 건 없어요 우리가 다양한 모델들을 사용할 수 있으니까 여러분께서 여러 상황에서 여러 분석 모델들 여러 가지로 확인해 보시고 그 중에서 KNN도 또한 고려할 만한 모델이다 라고 하는 것을 같이 알아두시면 좋을 것 같습니다 K-NN을 열어볼까요? K-NN은 그렇게 어려운 분석 모델은 아니구요 K-NN에게 중요한 옵션은 세 가지 정도가 있게 되는데 일단 첫 번째가 이거인 거죠 그래서 최근접이웃을 몇 개 어떤 데이터 포인트에 대해서 우리가 분류를 하든 회귀를 하든 주변의 이웃 몇 개를 볼 것인가 라고 하는 것을 확인하게 되는데 이때 K의 개수를 정해줘야 되는 거죠 다수결을 사용하기 때문에 K의 개수는 홀수여야 됩니다 라고 말씀드렸어요 디폴트로는 5개로 되어 있는데요 우리가 통상적으로는 데이터의 개수에 루트를 씌우는 걸 많이 하거든요 그래서 지금 이 와인 데이터 같은 경우에 만약에 이 데이터는 지금 1599개의 인스턴스를 가지고 있어요. 그렇다면 최근접이웃을 루트를 씌워서 계산해보면 대략 39개 정도로 우리가 K를 잡아주는 것이 그 정도가 흔히 사용하는 방법이다 정도로 말씀드릴 수 있겠습니다. 이것은 흔히 사용하는 방법이다인 거지 반드시 그렇게 해야 됩니다는 아닙니다. 그 정도로 K를 정한다고 하는 것을 말씀드리고요. 그리고 아래쪽에는 메트릭이 있고 웨이트가 있습니다. 웨이트를 먼저 얘기하자면 아래쪽에는 가중치라고 하는 것을 먼저 얘기하면 이 가중치는 눌러보시면 또 있고 거리에 따라서 라고 되어 있잖아요 이건 어떤 개념이냐면 아까 말씀드린 것처럼 우리가 이 사람이 어떤 클래스에 속하면 좋을까 라고 하는 것을 결정하는데 예를 들어서 녹색이 여기에 6개 있고 파란색이 이쯤에 뚝 떨어져 갖고 7개가 있다 쳐요 그런데 K가 13개입니다 예를 들어서 K가 13개예요 그러면 우리에게 이 녹색인 가까이에 있는 이 13개가 모두 다 동일한가 가중치가 다 동일한가 만약에 다 동일하게 갈 거야 라고 하면 이제 유니폼인 겁니다 그러면 이 K개 13개에 들기만 한다면 걔가 여기에 있든 여기에 있든 동급이다 라고 치는 것이 유니폼인 거고요 그리고 가중치를 거리에 따라서 두겠다 라고 한다면 가까이에 있는 이웃을 더 중요하게 여긴다 라는 개념인 거죠 당연히 상식적으로 여러분께서는 가까이에 있는 이웃을 더 중요하게 여긴다 라고 조금 보정을 해 주실 필요가 있겠죠 다른 것 아무것도 없이 이렇게 가까이 있는 이웃을 조금 더 가중치를 줄 거예요 라고 하는 것만으로도 이렇게 테스트 앤 스코어를 눌러 보시면 R2 설명력이 올라가는 것들이 보이죠 우리가 어떤 분석 모델이 있을 때 그 분석 모델이 대략 이런 거다 라고 하는 개념을 알게 되면 이걸 우리가 진짜 수학적으로 계산할 필요까지는 없잖아요 그러니까 아 이렇게 되는 거다 라고 하는 것을 알게 되면 거기서 중요한 개념들이 꼭 옵션에서 반드시 다 그냥 둬도 되는 경우가 대부분이긴 하지만 처음 디폴트로 되어 있는 걸 그대로 써도 나쁘지 않은 경우가 대부분이지만 하지만 거기서 우리가 충분히 바꿈으로써 전혀 다른 결과를 가져올 수 있는 경우도 많이 있거든요 그래서 각각의 옵션의 의미를 조금 알아두시면 좀 더 좋다 라고 하는 말씀을 드립니다 그리고 위쪽에는 매트릭이라고 하는 게 있습니다. 이 매트릭은 한마디로 거리입니다. 거리. 바로 아래에 있는 distance랑 매트릭이 사실상 같은 의미인 건데요. 우리가 예측하고자 하는 이 데이터가 있다면 우리는 이 데이터로부터 가까이에 있는 이웃들을 참조해서 뭔가를 하는 거잖아요 가까이에 있는 이웃들의 다수결로 레이블이 결정된다거나 가까이에 있는 이웃들의 값을 평균 내서 정한다거나 그래서 이렇게 가까이에 있는 이라는 표현이 있는데 가깝다 라고 할 때 그 가깝다는 거리를 어떻게 측정할 것인가 그 거리를 어떤 방법으로 측정할 것인가 라고 하는 게 바로 매트릭입니다 유클리디안 거리는 우리가 흔히 생각하는 거리가 바로 유클리디안 거리입니다. 점이 여기 있고 여기에 점이 있습니다 그래서 여기서부터 여기까지 거리는 이만큼입니다 라고 우리가 딱 생각하는 그 우리가 생각하는 그 직선 거리 이 직선 거리가 바로 유클리디안 거리라고 하는 거고요 그 아래쪽에는 이제 맨하탄 거리라고 하는 게 있습니다 맨하탄 거리라는 것은 어떤 거냐면 이 맨하탄에 가면 맨하탄에 도로망이 이렇게 있는 거예요 블록이 있고 블록에 이렇게 도로망이 이렇게 되어 있습니다. 맨하탄 거리를 우리가 다른 말로 택시 거리라고도 표현을 하는데요. 예를 들어서 여기서 택시를 타고 출발을 해서 여기로 가고 싶어요. 여기가 이제 도착지입니다. 그러면 우리가 갈 수 있는 것이 만약에 유클리디안 거리다 라고 하면 유클리디안 거리로는 이렇게 가는 거죠. 이게 이제 유클리디안 거리예요. 그런데 실제로 택시를 타면 그렇게 건물을 뚫고 갈 수가 없죠. 그래서 갈 때 이 도로망을 따라서 가야 됩니다 최단 거리를 예를 들어서 이렇게 간다거나 뭐 예를 들어서 이렇게 간다거나 뭐 이런 식으로 이렇게 간다거나 하게 되는 거잖아요 이렇게 어떤 블럭이 있으면 그 블럭을 따라서 가게 되는 이렇게 꺾이면서 가는 거 요게 바로 이제 맨하탄 거리다 라고 말씀드릴 수 있어요 체비셰프 거리는 어떤 개념이냐면 체스판 거리입니다. 예를 들어서 체스판에 말이 있습니다 체스판에 말이 있는데 이 말이 예를 들어서 칸을 조금 이렇게 나눠볼까요 이렇게 자 체스판에 말이 있습니다 여기에 말이 있다 라고 칠게요 말이 지금 여기에 있습니다 이 말을 우리가 움직여요 움직이는데 그 실제적으로 이 모든 네모칸의 가장 가운데가 실제 도착점이다 라고 할게요 그러면 유클리디안 거리로 따진다면 유클리디안 거리로 따지면 이 말이 여기까지 가면 거리가 요만큼이 되는 거죠 유클리디안 거리에서는 여기로 가는 건 어떨까요? 여기로 가는 것은 동일하지 않죠? 여기서 피타고라스 정리, 우리 그런 거 따지지 않겠어요 어쨌든 거리가 다르다 지금 보시면 직선 거리 자체가 다르잖아요 그래서 Euclidean 거리로는 이게 거리가 다른데 Chebyshev 거리라고 하는 개념은 뭐냐면 체스판에서 말이 움직이는 걸 생각해 보면 체스판에서 말은 가로든 세로든 대각선이든 한 번에 한 칸을 이동할 수 있잖아요 그러면 이게 실제로 몇 센치인 거랑 상관없이 어찌됐든 모든 위치는 같은 칸을 이동하게 되죠 3칸 움직였다, 4칸 움직였다, 1칸 움직였다 이러한 개념 그래서 이 모든 위치들이 체비셰프 거리는 같다고 보는 겁니다. 체비셰프 거리로는 이게 다 한 칸인 거죠. 이런 개념. 이렇게 가로, 세로, 대각선으로 한 번에 움직이는 거리는 똑같이 1만큼이다. 라고 하는 이런 개념이 체비셰프 거리입니다. 마할라노비스 거리라고 하는 개념 엄청나게 많은 요소를 같이 고려해서 만들어지는 건데요 아주 간단하게 비유하자면 예를 들면 이런 거입니다 예를 들어서 교과목이 3개 있다 라고 칠게요 우리 반 학생들이 국어 시험을 봤어요 그리고 국어 영어 수학 시험을 봤다고 칠게요. 국어 영어 수학 시험을 봤습니다. 그런데 학생들의 점수를 놓고 볼 때 예를 들어서 국어의 평균은 50점이고 이 평균 50점으로 학생들은 국어는 다들 시험을 비슷비슷하게 잘 봤어요. 그래서 이 정도 50점이 평균이고 표준편차가 10점 표준편차가 10점이고 그리고 잘하는 애들은 엄청 잘해갖고 90점도 맞고 못하는 애들은 되게 못해갖고 이렇게 0점도 되게 우수수수 많다 요런 식으로 뭔가 점수의 분포가 있다라고 치겠습니다 그러면 이 마할라노비스 거리라고 하는 개념은 일단 이 상태에서 예를 들어 국어는 70점을 맞았고 영어는 60점을 맞았고 수학은 30점을 맞았다고 쳐봐요. 그럼 70점, 60점, 30점 국어점수와 영어점수의 관계 영어 점수와 수학 점수의 관계, 국어와 수학의 관계라고 하는 요소들을 모두 복합적으로 쭉 다 만들어서 그것을 이제 다 계산을 해서 공분산 행렬이라고 하는 요상한 걸 만듭니다. 그래서 그걸 모두 다 고려해서 어떠한 확률적인 거리라고 하는 것을 만들어 내는 거죠. 그래서 나는 70점, 60점, 30점인데 예를 들어서 내가 국어를 70점 맞고 영어는 60점 맞았으니까 이 사이의 차이는 10점이야 라고 하는 게 아니다 라는 거죠 그렇게 계산하는 게 아니고 그래서 중심에서 얼마큼 떨어져 있고 걔네들의 분포는 서로 어떤 관계가 있고 라고 하는 것을 종합적으로 고려해서 어떤 거리도, 마할라노비스 거리가 만들어지게 되고 확률적인 거리가 만들어지고 거기서 그 확률적 거리도 안에서 이런 식으로 생기게 되거든요. 여러분께서 가끔 보시게 되는 타원형 같은 게 있고 그런 확률적 거리를 다 계산해보면 그러면 내 영어점수는 여기 있고 마할라노비스 거리를 잰다는 건 확률적인 분포도 안에서 거리를 재는 특수한 방식입니다 위의 세 번째까지는 조금 더 기하학적인 거리잖아요 일단 유클리디안하고 맨하탄은 정말 좀 기하학적으로 우리가 쉽게 직관적으로 딱 이해할 수 있는 거리고 체비셰프 같은 경우에도 우리가 이 체스판에서 움직이는 거야 한 칸 움직이는 거야 가로 세로 대각선이 다 똑같고 마할라노비스 같은 경우에는 직관적으로 연상하기는 좀 어렵고요 다만 이 거리를 사용하는 또 중대한 이유 중의 하나는 우리가 예측하고자 하는 데이터와 주변의 이웃들이 서로 어떤 관계를 가지고 얼마나 어떻게 펼쳐져 있느냐 이웃들 간의 어떤 관계 같은 게 있거든요 이 데이터들의 분포라던가 서로의 관계라던가 이런 것들을 서로 상관관계라고 하는 것을 추가적으로 고려해서 굉장히 복잡한 수학적인 계산을 통해서 걔네들 사이의 관련성 그리고 데이터가 분포한 모습 이런 걸 종합적으로 고려해주는 조금 더 정교한 거리다 라고 여러분께서 생각해 주시면 될 것 같습니다 그래서 예를 들어서 여러분께서는 뭐 이런 우리 아까 얘기했었죠 이 데이터가 많이 있으니까 예를 들어서 이웃을 조금 늘려줄까요 이웃을 조금 늘려서 뭐 한 39? 39 정도로 늘려주고 그리고 잠시만요 이렇게 펼쳐 볼게요 이렇게 좀 펼쳐서 예를 들어 많은 성능 지표가 있습니다만, 예를 들어서 R2만 보겠다라고 한다면 이 거리를 유클리디안으로 계산할 경우에는 지금 R2 값이 0.32 정도가 되잖아요. 만약에 조금 더 복잡한 방식을 제가 다 사용하겠어. 이웃들의 상관관계 이런 거 다 계산할 거야 라고 하시면 지금 보시는 것처럼 통상적으로는 꼭 그런 건 아닙니다 하지만 대체로 이런 식으로 여러분이 거리의 척도를 바꿔 주시거나 어떤 가중치를 부여해 주신다거나 K를 조금 올려 준다거나 하는 이런 과정을 통해서 이 KNN의 결과 수치 처음엔 사실 0.12 이러면 되게 참담하잖아요 그걸 갖고 어떻게 예측한다고 말할 수가 있나 라고 생각이 되겠지만 이렇게 옵션 조절 같은 것들을 통해서 여러분이 조금 더 실제의 예측력을 높일 수 있는 그러한 튜닝도 가능하다 를 추가적으로 설명드리겠습니다.
