기타 지식

머신러닝에 대해 알아봅시다. (feat. 파이썬)

* 주의 : 공부 글이라서 다소 재미가 없을 수 있습니다.

 

 

----------------------------------------- 시 작 ----------------------------------------

 

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

처음 입문하시려는 분들 또는 추천 시스템 관련 포트폴리오 하나 필요하신 분들은 끝까지 보시면 도움될거에요!

 

참고로 머신러닝..   이거 아닙니다 ㅋㅋ

 

 

머신러닝은 인공지능의 한 분야로 우리 말로는 기계학습이라고 하는데요.

일반적으로 프로그래밍을 할 때는 어떤 규칙이 있는 함수를 만들어서 입력값을 넣으면 함수 내의 동작을 통해 출력값을 얻게 됩니다.

 

 

2.png

 

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

 

 

반면에 머신러닝은 양질의 데이터를 주면 그 데이터를 가지고 스스로 학습을 해서 '모델'이라는 것을 만드는데요.

이 모델을 이용하면 새로운 입력값이 들어왔을 때 출력값을 예측하는 식으로, 그러니까 함수를 직접 만드는 거라고 이해하시면 됩니다.

 

3.png

아주 쉬운 규칙이 보이시나요?

 

 

 

 

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

4.png

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

 

5.png

 

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

 

 

6.png

 

 

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

 

 

 

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

 

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

 

7.png

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

 

 

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

 

회귀 모델은 경우에 따라 더 복잡해질 수도 있어요.

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

 

8.jpg

 

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

 

9.png

 

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

 

10.png

 

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

 

 

그런데 이런 예측 모델들을 만들었을 때 정말 이게 잘 예측을 하는지는 어떻게 장담할 수 있을까요?

공부 시간에 따른 시험 점수 모델이 만들어져서 '응 너 이번에 4시간만 공부하면 100점 받겠더라' 라고 했는데, 막상 시험을 쳐보니 50점만 나온다면 속상하겠지요?

 

11.jpg

 

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

 

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

 


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

 


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

 

 

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

 

 


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

 

 

 

머신러닝에서 대표적인 분류 알고리즘은 '로지스틱 회귀' 입니다.

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

 

 

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

 

 

 

 

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

 

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

 

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

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

 

15.png

 

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

 

 

16.png

 

 

이렇게 K 가 정해지면 우리는 아무렇게나 흩어져 있는 데이터로부터 아래와 같이 K 개의 클러스터 (그룹)로 나눠진 결과를 얻을 수 있게 되지요.

이 예시가 시험 공부 시간에 따른 점수라고 한다면 각 그룹에 있는 친구들에게 서로 다른 공부 전략을 제공해줄 수도 있겠구요.

 

17.png

 

여기까지 해서 아주 빠르게 머신러닝을 훑어봤습니다.

 

단순히 '머신러닝? 뭐 사람 흉내낸다는 그거?' 라고 막연히 생각하는 것보다는, 이 정도 내용만 알고 계셔도 훨씬 머신러닝에 대해 '어느 정도 아는' 사람이 될 수 있습니다.

 

------------------------------------- 이론 설명은 여기까지 -----------------------------------

 

 

 

위에서 다룬 내용을 더 자세한 설명, 그리고 실습과 함께 공부하고 싶으신 분은 본문 맨 아래에 있는 영상으로 학습하시기를 권해드립니다. 

기본적인 내용들은 물론 고려해야 할 여러 가지 요소에 대해서도 큼직하게 알게 될거구요

 

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

 

 

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

 

굉장하죠?

 

 

 

 

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

 

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

 

1. 많은 사람들이 좋아하는 영화 추천

2. 어떤 특정 영화와 아주 비슷한 영화 추천

3. 개인의 영화 취향에 따른 맞춤형 추천

 

 

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

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

 

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

 

 


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

 

 

19.jpg

 

 

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

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

 

 

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

 

총 7시간 정도의 분량이며, 아래 영상 하나에 모든 걸 담았습니다.

 

 

 

상대적으로 짧은 시간에 쉬운 예제로 핵심만 쏙 뽑으려고 노력을 많이 했습니다. 

머신러닝을 처음으로 공부하고자 하시는 분들께 도움 되었으면 하는 바람입니다.

 

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

42개의 댓글

ery
2022.07.04

0
2022.07.04
@ery
1
2022.07.04

저것만 잘 다루면 죽을때까지 돈 벌어오는 슈퍼ATM머신을 만들수있는건가

0
2022.07.04
@초코마시쩡

내용 안읽었지?

1
2022.07.04
@나코
1
2022.07.04

아 런닝머신 뛰기 귀찮다

1
2022.07.04
@0911

안읽은 사람 또 있네.. 화르르르...

1
2022.07.04

진짜 너 덕분에 웹스크래핑 배우고 삶의질 개떡상했다 고마워

0
2022.07.04
@매치스틱

뭐를 만들었을까? ㅋㅋ 궁금해진다!!

0
2022.07.04

수치해석학을 배우고 이거 보니까 어느정도 이해가 가네.

0
2022.07.04
@LisaGod

머신러닝도 금방 배울 듯 ㅋ

0
2022.07.05

와 진짜 ㅊㅊ. 멋있어

0
2022.07.05
@어느새이런

ㅊㅊ 고마워!!

0
2022.07.05

기능의 동작에 대해선 이해를 하겠는데, 이것들이 나타내는 결과에 대한 해석 능력은 어떻게 키우냐? 그냥 많이 해보는게 땡인가?

0
2022.07.05
@아나나스피자

프로젝트에서도 다루는데 캐글에 가서 많은 사람들이 다룬 데이터셋과 코드 보면서 추천 많이 받은 사람들이 작성한 내용을 보면서 그들의 생각은 어떤지, 다른 사람들이 코멘트는 어떤지, 어떤 식으로 접근했으며 도출된 결과에 대해 어떤 설명을 해두었는지를 많이 접하다보면 도움되지 않을까 해

0
2022.07.05

전공추…

0
2022.07.05
@고민킴
0
2022.07.05

아 파이썬 누가 쉽다고 했어

이거 남의 소스 퍼다가 붙이다가 맨붕왔당 ㅋㅋ

내가 짜면 너무 지저분해짐

0
2022.07.05
@cuqhstoRlqudtls

아씨 닉네임 괜히 쳐봤어 !!!!!!!!!!!!!!

0
2022.07.05
@나코

횽 왜 쳐보고 그래?

스타하는 애들이 자꾸 내 아디 쳐보고 스토킹 하는 버릇이 있길래 그런놈들 골먹일려고 쓰는 아이뒤

0
2022.07.05
@cuqhstoRlqudtls

됐어 혼자있고 싶어... 궁금하게 만든게 누군데 ㅋㅋㅋㅋㅋㅋ

0
2022.07.05
@나코

횽 요즘 나도 코딩 말고 다른거 봄

새로운게 안올라와서 미안해

0
2022.07.05
@cuqhstoRlqudtls
0
2022.07.05
@cuqhstoRlqudtls

매일 하나씩 올리는데 무슨 소리야 너 이리와봐 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

0
2022.07.05
@나코

ㅇㅇ?

요즘은 매일 올려?

아니 전에는 안올리길래 알림 껏지 ㅋ

0

아 저거 만든 사람이구나 구독했는데 생성자 하나만 봤다 ㅋㅋ

0
2022.07.05
@키미땃쥐돈땃쥐미

아 진짜 ㅋㅋㅋㅋㅋ 공부 좀 하라구!!!! 구독만 해놓고 아무도 안 봐 ㅠㅠ ㅋㅋㅋ

0
@나코

파이썬 대체로 알아서 잘 모르는 거만 봤지 ㅋㅋㅎㅎ;;

0
2022.07.05

글이 읽기 쉽고 좋네요

0
2022.07.05
@마참내
0

머신러닝 딥러닝 인공지능 이런 말이라도 나와서 마케팅에 도움은 된다고 생각해요

 

21세기의 피그말리온을 꿈꾸는 새내기들이 열어제낀 머신러닝의 문 뒤에는 응용수학과 통계밖에 없다는걸 깨닫기 전까지는요

0
2022.07.05
@대머리머대리머머리대대리

형 뭔가 멋있어요...

0
2022.07.05

이 유튜브 제작자였구나

전에 어플 만들때 한창 봤었어영 잼써영

0
2022.07.05
@응뿌

제가 어플 만드는 강의도 했었나요?? 오잉 ㅎㅎ

0
2022.07.05
@나코

모야 다른 사람이잖아 당신 누구야

0
2022.07.05
@응뿌

ㅋㅋㅋㅋ 이 방 왜 이래 이상해....

0
2022.07.05

아 개붕이엇어? 파이썬 기초 들엇엇는데 ㅋㅋ

0
2022.07.05
@꼬북칩냠냠

어서와 내 수제자 ㅋㅋ

0
2022.07.06

나도 학부때 이런 자료를 보고 '아 수학에 비하면 쉽구나'라고 착각했지

 

현실은 통계, 최적화, 해석학...

0
2022.07.11

코딩에 관심이 생겨서 배우고있는데 너무 좋아요 감사합니다

0
2022.07.13

덕분에 오늘 런닝머신 1시간 뛰러갑니다.

0
2022.07.14

횽 쥬피터노트북 강의 배경색좀 어케좀

눈아파

0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜
12422 [호러 괴담] [살인자 이야기] 바람피우던 여성의 실종, 27년 뒤 법정에 선... 그그그그 1 1 일 전
12421 [역사] American Socialists-링컨대대의 투쟁과 최후(下) 1 綠象 4 2 일 전
12420 [역사] American Socialists-링컨대대의 투쟁과 최후(中) 1 綠象 2 2 일 전
12419 [기타 지식] 아무리 만들어봐도 맛이 없는 칵테일, 브롱스편 - 바텐더 개... 3 지나가는김개붕 1 3 일 전
12418 [역사] American Socialists-링컨대대의 투쟁과 최후(上) 5 綠象 4 3 일 전
12417 [호러 괴담] [살인자 이야기] 풀리지 않는 미스테리. 보돔 호수 살인사건 2 그그그그 2 4 일 전
12416 [기타 지식] 일본에 의해서 만들어진 칵테일들 편 - 바텐더 개붕이의 술 ... 2 지나가는김개붕 6 4 일 전
12415 [기타 지식] 중국에서 안드로이드 폰을 사면 안되는 이유? 10 대한민국이탈리아 22 5 일 전
12414 [역사] English) 지도로 보는 정사 삼국지 3 FishAndMaps 5 5 일 전
12413 [호러 괴담] [살인자 이야기] 그녀는 왜 일본 최고령 여성 사형수가 되었나 10 그그그그 9 7 일 전
12412 [기타 지식] 최근 지각변동이 일어나는 국내 항공업계 (수정판) 15 K1A1 23 8 일 전
12411 [역사] 인류의 기원 (3) 3 식별불해 6 8 일 전
12410 [호러 괴담] [살인자 이야기] 재벌 3세의 아내가 사라졌다? 그리고 밝혀지... 그그그그 5 10 일 전
12409 [호러 괴담] [살인자 이야기] 의붓아버지의 컴퓨터에서 발견한 사진 3 그그그그 8 12 일 전
12408 [기타 지식] 도카이촌 방사능 누출사고 실제 영상 21 ASI 2 12 일 전
12407 [역사] 지도로 보는 정사 삼국지 ver2 19 FishAndMaps 15 14 일 전
12406 [기타 지식] 웹툰 나이트런의 세계관 및 설정 - 지구 2부 21 Mtrap 8 12 일 전
12405 [기타 지식] 100년을 시간을 넘어서 유행한 칵테일, 사제락편 - 바텐더 개... 5 지나가는김개붕 1 14 일 전
12404 [기타 지식] 오이...좋아하세요? 오이 칵테일 아이리쉬 메이드편 - 바텐더... 3 지나가는김개붕 2 16 일 전
12403 [기타 지식] 웹툰 나이트런의 세계관 및 설정 - 지구 1부 31 Mtrap 13 16 일 전