티스토리 뷰

안녕하세요 ^^

이번 강의 주제는 IT 와 관련 없는 분들이라도 한 번쯤은 들어보셨을 '머신러닝' 입니다.

 


이거 아닙니다 ㅋㅋ

머신러닝은 인공지능의 한 분야로 우리 말로는 기계학습이라고 하는데요. 일반적으로 프로그래밍을 할 때는 어떤 규칙이 있는 함수를 만들어서 입력값을 넣으면 함수 내의 동작을 통해 출력값을 얻게 됩니다.


이 함수에는 5 를 입력으로 받으면 15 를 출력하게 되지요.

반면에 머신러닝은 양질의 데이터를 주면 그 데이터를 가지고 스스로 학습을 해서 '모델'이라는 것을 만드는데요. 이 모델을 이용하면 새로운 입력값이 들어왔을 때 출력값을 예측하는 식으로, 그러니까 함수를 직접 만드는 거라고 이해하시면 됩니다.

 




여기에 이런 점들이 뿌려져 있습니다.


이 때 이 점들을 가장 잘 표현하는 직선을 딱 하나 찾으라면 무엇일까요?




그렇죠! 바로 3번입니다. 왜 그렇게 생각하셨나요?



그렇습니다. 딱 봐도 그냥 그렇게 보이죠?

우리는 방금 기계가 스스로 학습을 통해 모델을 만드는 과정을 경험했습니다. (언제??)

이러한 모델 (여기서는 직선) 이 만들어지고 나면 이제 '예측'이란 걸 해볼 수가 있습니다.

이 그래프가 캐럿에 따른 다이아몬드의 가격 데이터이고 x 축이 캐럿, y 축이 가격이라고 하면, 새로운 1.7 캐럿 다이아몬드가 있을 때 대략 얼마 정도의 가격일지를 가늠해볼 수 있는거죠.

이와 같이 연속적인 숫자 데이터를 통해 예측을 하는 것을 '회귀 모델' 이라고 합니다.

회귀 모델은 경우에 따라 더 복잡해질 수도 있어요. 가령 공부 시간에 따른 시험 점수를 예측하려고 한다면, 당연히 공부를 많이 하면 시험 점수가 올라가겠지만 점수에 영향을 끼치는 게 꼭 공부 시간 하나만 있는건 아니겠죠? 친구랑 놀기도 해야 되고, 수업시간에도 선생님 말씀 열심히 들어야 되고, 시험 전날에 잠도 푹 자야되고, 잠자기 전에 게임도 한 판 해야 되고 ...


이렇게 시험 점수라는 결과에 영향을 미치는 요소들을 '독립 변수' 라고 하며, 그 때의 결과를 '종속 변수' 라고 합니다. 캐럿에 따른 다이아몬드의 가격은 캐럿이 유일한 독립 변수였지만 시험 점수에 영향을 미치는 독립 변수는 여러개가 있을 수 있지요. 그리고 독립 변수가 많아지면 조금 더 복잡한 형태의 ‘다중 선형 회귀’ 모델이 필요해집니다. 그냥, 이렇게 차원이 늘어나면서 그래프가 조금 복잡해진다고 생각하시면 됩니다.


그리고 지금같은 여름철에는 오래동안 에어컨을 사용하기가 무서워지는데요. 가정용 전기에는 누진 구간이 있어서 조금 사용하다 보면 전기료가 확 뛰고, 또 사용하다 보면 뛰고, 그러다보면 수십만원을 훌쩍 넘는 경우도 생기지요. 누진 구간에 따라 막막 증가하는 데이터처럼, x 의 변화에 따라 y 가 급격히 증가하거나 왔다갔다 하는 등의 경우라면 직선 하나만으로 표현하기에는 다소 무리가 있습니다. 이 때는 '다항 회귀' 모델을 이용해볼 수 있어요.

파란색 점들의 데이터를 표현하기 위한 2개의 모델이 있을 때, 직선의 하늘색 보다는 곡선 형태의 주황색이 훨씬 낫지요!

그런데 이런 예측 모델들을 만들었을 때 정말 이게 잘 예측을 하는지는 어떻게 장담할 수 있을까요? 공부 시간에 따른 시험 점수 모델이 만들어져서 '응 너 이번에 4시간만 공부하면 100점 받겠더라' 라고 했는데 막상 시험을 쳐보니 50점만 나온다면 속상하겠지요?


그래서 모델을 만들고 나면 이 모델의 성능이 얼마나 좋은지 평가를 해야 합니다. 그렇게 하기 위해서 데이터 세트 전체를 둘로 나눠서 하나는 훈련용으로, 하나는 테스트용으로 쓰는데, 보통 80:20 의 비율로 나눠서 훈련용 세트로만 학습을 시킨 다음에 모델이 괜찮은지를 테스트 세트로 검증을 해봅니다. 그리고 경우에 따라 세트를 막 섞어가면서 교차로 검증을 하기도 하지요.

이 과정에서 훈련 세트에 대해서는 정말 잘 예측을 하는데 테스트 세트에 대해서는 형편 없는 예측을 하는 것을 '과대적합' 이라고 하며, 훈련 세트조차 예측을 잘 못하는 경우를 '과소적합' 이라고 합니다. 결국 모델을 만들 때 과대적합 또는 과소적합이 발생하지 않도록 하는 게 중요하지요.

 


대략 할머니 데이터에 과대적합된 꼬마

 


뭔가 보긴 했는데 2% 부족한 꼬마


이런 연속적인 데이터 말고 범주형 데이터라고 하는 것도 있습니다. '회귀' 가 아니라 '분류' 에 해당하는 내용인데요. 공부 시간에 따른 시험 점수가 아니라, 이번에는 자격증 시험으로 바꿔서 '합격/불합격' 으로 나뉘는 것으로 보시면 됩니다. 그래서 2시간, 4시간 공부했을 때는 불합격, 6시간, 8시간 공부했을 때는 합격했다는 데이터가 있을 때 7시간을 공부하면 합격일까 ?불합격일까? 를 나누게 되는 거지요.


(공무원 시험 합격 후 설날의 모습이래요 ㅋㅋ)


머신러닝에서 대표적인 분류 알고리즘은 '로지스틱 회귀' 입니다. 이름은 회귀이지만 실제로는 분류를 위해 사용되는 모델이며, 예를 들어 어떤 환자의 몸에 종양이 있을 때 그 환자의 나이와 종양의 크기 등을 미루어봤을 때 이 종양이 악성인지 아닌지를 판단할 수 있게 됩니다. 그런데 의사 선생님이 '당신은 암이에요' 라고 했다가 정밀 검사를 해보니 암이 아닌 경우와, '당신은 암이 아니에요' 라고 했다가 암으로 드러나는 경우가 있을 때, 전자가 결과적으로는 훨씬 낫겠지요? 그래서 분류 모델은 필요에 따라 기준을 조금 조정하기도 합니다. 즉 모델에서는 '너 4시간 공부하면 합격하겠더라' 라고 나온다고 해도 보수적으로 접근해서 '너 6시간은 공부해야겠더라' 라고 말을 하는거죠.

 


지금까지 설명된 내용은 머신러닝 중에서 '지도학습'에 해당하는 부분이었습니다. 지도학습은 정답을 알려주면서 학습시키는 걸 말합니다. 그러니까 '2시간 공부하면 20점, 4시간 공부하면 40점, 6시간 공부하면 60점' 과 답을 알려주고 나서 학습을 시키는 방법이지요.


반면에 머신러닝에는 정답을 알려주지 않는 '비지도 학습' 이란 것도 있습니다. 

비지도 학습은 기계가 스스로 데이터 내에서 유의미한 패턴이나 구조를 찾아내는 건데, 이런 유사한 패턴을 가지는 데이터들끼리 무리를 지어주는 군집화라는 게 있습니다. 하루에도 수없이 쏟아져나오는 뉴스 기사들을 과학/기술, 스포츠, 건강 등의 카테고리로 나눠주는 것도 군집화의 한 가지 예시입니다.

 


군집화의 대표적인 알고리즘으로 'K-평균'이라는 게 있는데요. 

여러분이 과수원에서 처음으로 사과를 따서 상품으로 판매하기 위해 나눈다고 할 때, 어떻게 나누면 가장 좋을까요? 그냥 크기에 따라 큰 것과 작은 것, 이렇게 둘로 나눌 수도 있고 대/중/소 3개의 분류로, 또는 예쁜 것과 못난 것으로 나누어서 못난 것들은 싸게 파는 식으로 할 수도 있을 거에요.


이 때 '몇 개의 그룹' 에 해당하는 게 바로 K 인데요. 사과가 아닌, 굉장히 복잡하고 많은 양의 데이터를 군집화한다면 '몇 개' 를 정하는 게 아주 어려워질 수 있어요. 다행히 최적의 K 를 찾기 위해 참고할 만한 방법이 있습니다. 팔꿈치 모양을 닮아서 엘보우 방법이라 불리는 것인데, 간단히 설명드리면 K 의 변화에 따른 각 데이터들로부터 각 클러스터 (그룹) 의 중심점까지의 거리 평균을 계산해서, 그래프 상에서 경사가 완만해지기 시작하는 그 시점을 K 로 보는 것입니다.




이렇게 K 가 정해지면 우리는 아무렇게나 흩어져 있는 데이터로부터 아래와 같이 K 개의 클러스터 (그룹)로 나눠진 결과를 얻을 수 있게 되지요. 이 예시가 시험 공부 시간에 따른 점수라고 한다면 각 그룹에 있는 친구들에게 서로 다른 공부 전략을 제공해줄 수도 있겠구요.





위에서 다룬 머신러닝의 기본적인 내용들은 자세한 이론 설명과 실습을 통해 공부하게 되구요. 

끝나면 퀴즈를 통해서 지금까지 배운 내용을 복습합니다.




퀴즈에서는 데이터 세트만 달랑 주어지고 그 데이터를 가지고 해야 하는 7가지 작은 미션들이 있는데요. 기본 내용을 잘 공부하셨다면 충분히 소화해내실 수 있습니다. 그리고 퀴즈를 스스로 풀 수 있다는 말은, 여러분이 스스로 데이터 분리, 훈련 세트를 통한 학습, 데이터 시각화, 평가 및 예측까지 할 수 있게 된다는 의미에요. 

굉장하죠?





퀴즈를 풀고 나면 이제 뭔가 써먹어봐야겠죠!

다른 모든 활용편 강의들도 그랬듯이, 머신러닝 편에서도 프로젝트를 진행합니다. 프로젝트 주제는 '영화 추천 시스템' 인데요. 약 5,000 개의 영화 관련 데이터 세트를 가지고 분석 및 학습을 통해 추천 영화 10개를 뽑는 내용을 공부합니다. 추천의 방법에도 몇 가지가 있는데, 간단히 다음 3개에 대해서 공부해봅니다.

1. 많은 사람들이 좋아하는 영화 추천
2. 어떤 특정 영화와 아주 비슷한 영화 추천
3. 개인의 영화 취향에 따른 맞춤형 추천

이 과정에서 텍스트 분석 방법에 대해서도 어느 정도 배우게 될 거구요.

그리고 코드만 보면 지겨우니까 streamlit 이라고 하는, 몇 줄 안되는 코드로 예쁜 웹페이지를 만들 수 있는 패키지를 통해 영화 추천 시스템 사이트를 직접 만들어봅니다.

여기에서는 어떤 영화를 선택하면 그 영화의 장르, 감독, 출연 배우 등의 정보를 토대로 추천 영화 10개를 뽑아서 한국어로 된 포스터 이미지를 짠~ 하고 보여준답니다. 그럴듯하죠?


특히 마지막의 개인 영화 취향에 따른 맞춤형 추천은 Surprise 라는 패키지를 이용하는데, 지금까지 쌓인 판매 이력 데이터를 통해서 어떤 고객에게 어떤 상품을 추천하면 좋을지, 어떤 물건들을 세트로 판매하면 더 잘 팔릴지 등에 대한 전략을 세우는데 어쩌면 큰 도움이 될 수도 있을거라 생각합니다.


에버랜드같은 대형 놀이공원은 절대 하루만에 모든 놀이기구를 이용할 수 없지요. 땅도 넓어서 어디에 뭐가 있는지 파악도 해야 하고 놀이 기구 별로 대기줄도 굉장히 길고 식사도 해야 하고 기념품도 사야되고 동물 친구들도 만나야 하고 사진도 찍어야 하고 머리부터 발끝까지 젖어도 봐야 되고 …

하지만 적어도 에버랜드라는 곳이 어떻게 생겼으며 주차는 어떻게 하고 입구는 어떻게 생겼으며 어느 곳에 어떤 놀이기구들이 있는지, 다음에 또 방문을 한다면 무엇을 먼저 타면 좋을지에 대한 큰 그림은 그릴 수 있을겁니다. 

제 강의는 이런 놀이공원에 처음 방문하는 느낌으로 공부하시면 좋겠습니다. 머신러닝에 대해 모든 것을 알기는 어렵지만 대략 머신러닝이 어떤 것이고 종류는 무엇이 있고 학습을 위해서 고려해야 할 부분이 어떤 게 있으며 관심 가는 모델은 무엇이며 이걸 어디에 적용해볼 수 있을지, 어떤 내용을 더 공부해보면 좋을지 감을 잡는 것이죠. 그러면 여기에서 한 걸음 더 나아가서 온라인 / 교재 등의 다양한 자료를 통해 더 깊은 지식을 쌓으실 수 있게 될겁니다.


이 강의는 파이썬 기본 문법은 모두 알고 계시다는 가정 하에 진행하므로 ,파이썬을 처음 접하시는 분이라면 아래 기본편 강의를 먼저 공부하시길 권해드립니다. 그리고 주피터 노트북이라는 환경에서 진행되므로 아나콘다 - 주피터 노트북의 사용법도 알아두시면 더욱 좋습니다.

 


본문에 소개 드린 머신러닝 강의는 이 영상입니다. 총 7시간이 조금 안되는 분량이구요. 
실습과 병행 하신다면 아마 1-2 주 정도면 완강 가능할거라 봅니다.

 

 

 

 

강의 목차는 이렇습니다.

 

[소개]
(0:00:00) 0.Intro
(0:00:44) 1.소개
(0:02:32) 2.활용편 7 머신러닝 소개

[기본]
(0:04:32) 3.머신러닝 개요
(0:15:04) 4.지도 학습
(0:20:19) 5.선형 회귀
(0:25:56) 6.선형 회귀 (실습 #1)
(0:36:41) 7.선형 회귀 (실습 #2)
(0:43:45) 8.데이터 세트 분리
(0:45:56) 9.데이터 세트 분리 (실습)
(0:59:39) 10.경사 하강법
(1:06:12) 11.경사 하강법 (실습)
(1:16:43) 12.다중 선형 회귀
(1:18:58) 13.원-핫 인코딩
(1:21:03) 14.다중 공선성
(1:23:22) 15.다중 선형 회귀 (실습 #1)
(1:30:02) 16.다중 선형 회귀 (실습 #2)
(1:35:13) 17.회귀 모델 평가
(1:47:32) 18.회귀 모델 평가 (실습)
(1:52:07) 19.다항 회귀
(1:59:46) 20.다항 회귀 (실습 #1)
(2:06:00) 21.다항 회귀 (실습 #2)
(2:19:14) 22.다항 회귀 (실습 #3)
(2:24:26) 23.로지스틱 회귀
(2:30:01) 24.로지스틱 회귀 (실습 #1)
(2:41:07) 25.로지스틱 회귀 (실습 #2)
(2:51:32) 26.혼동 행렬 (실습)
(2:58:31) 27.비지도 학습
(3:00:21) 28.K-평균
(3:10:26) 29.엘보우 방법
(3:12:57) 30.유사도
(3:17:40) 31.K-평균 (실습 #1)
(3:31:23) 32.K-평균 (실습 #2)
(3:38:06) 33.K-평균 (실습 #3)
(3:47:50) 34.K-평균 (실습 #4)

[퀴즈]
(3:54:41) 35.퀴즈

[영화 추천 시스템 프로젝트]
(4:16:21) 36.인구 통계학적 필터링 #1
(4:28:31) 37.인구 통계학적 필터링 #2
(4:43:02) 38.컨텐츠(줄거리) 기반 필터링 #1
(4:53:58) 39.컨텐츠(줄거리) 기반 필터링 #2
(5:04:12) 40.컨텐츠(줄거리) 기반 필터링 #3
(5:14:45) 41.컨텐츠(배우,감독 등) 기반 필터링 #1
(5:24:09) 42.컨텐츠(배우,감독 등) 기반 필터링 #2
(5:36:20) 43.컨텐츠(배우,감독 등) 기반 필터링 #3
(5:45:08) 44.영화 추천 웹사이트 #1
(5:53:19) 45.영화 추천 웹사이트 #2
(6:05:27) 46.영화 추천 웹사이트 #3
(6:15:00) 47.영화 추천 웹사이트 #4
(6:22:26) 48.협업(리뷰 기반) 필터링 #1
(6:32:48) 49.협업(리뷰 기반) 필터링 #2
(6:43:20) 50.Outro

 

 

상대적으로 짧은 시간에 쉬운 예제로 핵심만 쏙 뽑으려고 노력을 많이 했습니다. 
머신러닝을 처음으로 공부하고자 하시는 분들께 도움 되었으면 하는 바람입니다.

긴 글 읽어주셔서 감사합니다. ^^

 

 

소스 코드


강의에서 사용된 소스코드 및 데이터 파일 (경량화) 이 포함된 압축파일입니다.

프로젝트용 TMDB 관련 데이터 및 pickle dump 파일은 포함되지 않았습니다.

PythonMLWorkspace(LightWeight).zip
0.28MB

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함