머신 러닝이란 이슈가 나온지는 꽤 시간이 지났으나, 과연 머신 러닝이 무엇일까?? 라는게 궁금해서 문득 찾아서 정리해보았습니다.
머신러닝의 정의
우선 위키 백과에 있는 머신러닝의 정의입니다.
머신 러닝 : 인공 지능의 한 분야로, 컴퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 분야를 말한다.
참조 : https://ko.wikipedia.org/wiki/%EA%B8%B0%EA%B3%84_%ED%95%99%EC%8A%B5
라고 합니다. 말 그대로 해석해보면 기계학습 . 기계가 공부한다라는 뜻은 대충 누구나 어림잡아 알 수 있지만 뭔가 명확하지 않죠? 그래서 이걸로 뭘 할 수 있을까 싶어서 좀 더 찾아보았습니다.
일반적으로 아래 그림과 같은 분류를 잘 찾아볼 수 있는데요.
AI 속에 머신러닝이 있고 또 머신러닝이 딥러닝을 포함하고 있습니다.
하지만 여러 블로그 또는 구글링을 해보면 또 다시 머신러닝과 밀접한 관계인 데이터 사이언스, 머신러닝, 빅데이터, 데이터 마이닝 이란 단어가 나오며
점점 제 머리속을 복잡하게 만드는 이유는 뭘까요??? 다 비슷한 단어 인거 같은데 왜 저렇게 세분화 되어 혼란스럽게 만드는 걸까요?!
네. 정확히 잘 모르겠습니다. 점점 머리속이 어지러워지는 느낌분입니다.
지금 제가 정리한 것은 머신러닝은 사람이 참견하여 학습(세부적으로는 가보면 지도 학습, 비지도 학습이 있음), 딥러닝은 스스로 학습한다. 그정도 입니다.
그럼 머신 러닝으로 과연 무엇을 할 수 있는가? 이것도 중요한 쟁점 아니겠습니까?! 그래서 한번 찾아 보았습니다.
1. 머신러닝을 사용한 악성 행위 탐지와 공격 저지
2. 머신러닝을 사용한 모바일 엔드포인트 분석
3. 머신러닝을 이용한 사람의 분석 능력 및 결과 보강
원문보기: http://www.itworld.co.kr/news/107587
위와 같은 사례와 사진을 찍을때의 안면인식, 언어 번역기 등등 뭐 많은 기능이 가능하다고 하는데 과연 어떻게??? 네… 그 부분은 아직 잘 모르겠습니다. 기존에 축적된 데이터로 학습하여 뭔가를 하는거 같은데 말이죠.
머신러닝의 종류
말그대로 머신러닝. 즉 기계 학습이라고 하였는데요.
기존에 쌓여진 데이터를 훈련시켜 새로운 값에 대한 답을 찾고자하는 과정이라고 할 수 있습니다.
기본 종류는
1. 지도 학습
=> 질문에 대한 정답이 어떤 것인지 훈련데이터가 알고 있는 경우 입니다.
간단히 y = ax + b(상수) 이런 방정식이 나오는데요. 고등학교때 배우는 수학인 경우에는
a, b값이 명시 되어 있고 x 또는 y 값을 구하라 라고 하지만. 지도 학습에서는 x, y값은 데이터를 통해서 얻을 수 있답니다.
2. 비지도 학습
=> 데이터는 많은데 답이 없습니다. 하지만 해당 데이터를 기반삼아 유형을 판단하는 용도 입니다.
3. 강화학습
=> 정답이 정해져 있지 않으나 해당 학습을 할때마다 해당 학습의 잘한 정도를 체크합니다.
ex) 체스, 장기 등등
강화학습의 내용은 아직 잘 이해가 안되니 넘어가도록 하겠습니다.
지도 학습은 선으로 연결된 그래프가 나온다 생각하시면 되고, 비지도 학습은 그래프가 점으로 찍히는 분포도라 일단 생각하겠습니다.
(해당 내용마다 다른 기법들이 있으나, 이해를 위해서 일단 이렇게 표현)
머신러닝을 위한 파이썬 설치 방법와 실행
괜히 수학 방정식도 보고 안좋은 느낌이 드는데 프로그램을 하기위한 설치부터 해볼까요.
우선 머신러닝하면 유명한 Python, R이 있는데 저는 Python을 설치해보도록 하겠습니다.
(파이썬에 머신러닝 관련한 라이브러리가 아주 강력하다고 합니다!)
파이썬 설치를 위해서 파이썬 공식 홈페이지에 들어가서 다운로드 메뉴를 눌러볼까요?!
Python은 3.x 버전과 2.x 버전 두개로 나오고 있습니다.
3.x 버전과 2.x버전은 개발하는 방법이 다르며, 예전에는 2.x 모델이 호환성이 좋아 인기가 좋았는데
최근에 3.x버전이 점점 업그레이드 되가면서 다들 2.x모델을 3.x로 재작업하여 사용중이라고 합니다.
그래서 3.7을 다운 받아서 설치를 해보죠!
음 다운로드와 설치 하는데 5분도 안걸리는데 설치 한게 맞나요..??
정상 설치도 되었고 IDLE(Python -3.x) 를 실행하면
오오. 뭔가 떳어요 떳습니다. 근데 대학교때 첨에 C언어 배울때 같은 이 허접한 툴은 뭐죠??? 툴이 이따구 쉘 하나뜨는게 실화입니까….
실제로 저렇게 단순 파이썬만 설치 해도 되지만 세상엔 좋은 툴이 많습니다. 그래서 실제로 위의 설치에 링크도 안달아드렸습니다..
혹시 설치하신분들이 없기를…
파이썬이 머신러닝에 강력한 이유는 아까 강력한 라이브러리 제공에 있다고 했었죠?!
하지만 필요할때마다 일일이 필요할때마다 설치하기가 여간 귀찮은게 아니겠죠
그래서 찾아보니 바로바로바로!! 그이름 유명한 아나콘다라 합니다! 아나콘다!!
아나콘다라고 하면 파이썬 설치 및 각종 필요한 라이브러리을 쉽게 받을 수 있는 툴입니다.
아나콘다 설치 사이트 : https://www.anaconda.com/download/
아까 버전에 대해서 말씀 드렸죠?! 일단 3.7에서 설치를 합니다.
중간에 나오는 환경변수 등록 체크를 해주시면 편합니다.
그외엔 다음다음다음 하다보면 설치가 진행되는데 금방 될줄알았으나, 10분넘게 걸립니다. 좀 기달려볼까요?
위와 같이 보이면 설치가 된건데요. 아나콘다 설치를 하면 아나콘다와 별개로. iPython, Jupyter Notebook 등도 같이 설치가 됩니다.
다 쓰는거니 뭐이래 쓸때 없는것도 같이 깔아 라고 생각하지 마시길!
(아나콘다는 수많은 라이브러리가 같이 통합해서 같이 깔립니다. 쓰지 않는 라이브러리도 있을 수 있죠.
그렇다 보니 필요한 것만 깔고 싶은 사람의 욕구가 아나콘다의 축소판인 미니콘다라고 하여 필요한 라이브러리만 깔 수 있는 것도 있습니다.
요즘엔 미니콘다가 대세인듯하지만 첨이니 저는 아나콘다를 한번 설치해봤습니다.
미니콘다 설치 참조 : https://justmakeyourself.tistory.com/entry/install-python)
쥬피터 노트북을 한번 실행해볼까요?!
실행을 하면 cmd 창이 하나뜨고 다음에 위와 같은 얼핏 git 모방품같은 사이트가 하나 나옵니다.
오른쪽 상단위 New 버튼을 눌러 Pyhon3을 눌러보시죠.
위와 같은 화면이 나오는데 뭔가 프로그램을 짜는 화면치곤 약간 신박합니다.
간단히 입력한 화면을 한번 보겠습니다.
해당 화면에서 코딩을 진행하며 신긴한건 코드 중간중간 값을 보면서 코딩이 가능합니다.!!!(우오)…
음..저 화면을 보시면서 갑자기 a = 1 , b = 2이거 왜 코드 중간에껄 스샷찍었냐구요?!!?
파이썬은 첨에 변수를 선언할때 타입을 선언하지 않습니다. 그냥 a= 2라고 적으면 a가 자동으로 int형이 되더라구요.
늘 int a; 또는 var a; 라고 쓰다가 없으니 완전 허전합니다. ㅠ
그리고 해당 내용을 중간중간에 마크 다운 형식으로 코딩을 보고서 같이 작성하는 것도 가능 하더라구요..
머신러닝을 공부 할때 가장 유명한 언어가 R vs Python 2개를 떠올릴 수 있는데 R 과 Python 에 장단점을 비교해보도록 하겠습니다.
R 과 Python의 비교
먼저 R 입니다.
첫번째. 일단 R은 통계학자가 통계학자를 위해 개발한 언어입니다. 통계학자가 데이터 분석을 위해 직접 만들었다니
예전에 유행했던 홧김에 내가차린가게 란 느낌이 나는군요.
애초 통계 목적으로 만들어졌고 컴퓨터의 배경이 다른 언어보단 덜하다는 장점이 있습니다.
두번째. 1993년부터 통계목적으로 통계학자들이 쓰기 시작했기 때문에 지금까지의 방대한 생태계가 이루어져있는건 사실이며,
기존에 구글링으로도 꽤나 심도 있는 머신러닝 패키지를 복사해다 쓸수 있는 장점이 있습니다.
이 부분이 실제로 엄청난 메리트가 있습니다.
(RDocumentation site : https://www.rdocumentation.org/)
세번째. 통계에 있어서 또한 중요한게 시각화 인데 R은 시각화에서 엄청난 장점이 있습니다.
(다들 이렇게 얘기하는데 저도 R을 사용해본적이 없어..그렇구나..하고 넘어가겠습니다.)
그리고 Python에 장점에 대해 알아볼까요.
첫번째. Python은 프로그래밍 언어지만 몇년전부터 붐이 일어 프로그래밍 언어로서도 지금 아주 각광 받고 있습니다.
언어가 배우기 쉬워 요즘 잇슈가 되고 있는 코딩교육에서도 많이 사용하고 있습니다.
두번째. R이 데이터쪽에서 방대한 생태계가 이루어져 있다고 하였는데, Python은 그렇지 않습니다.
R이 원조 맛집이라면, Python은 신생 맛집이라 표현하면 이해가 좋을 거 같습니다.
하지만 Python도 점점 시간이 지남에 따라 사용자수도 늘어나고 패키지가 늘어남에 따라 점점 강력해지고 있습니다.
세번째. Python은 범용으로 사용하기 R보다 뛰어나며, 다른 툴과 같이 사용해야 될 경우 유리하다.
뭐 R은 느리고 배우기 어렵고, 범용성이 떨어지고, Python은 시각화가 아직 좋지 않고, 아직 생태계가 크게 활성화하지 않았다는 등
단점이 있지만.. 장점만 알아가기도 부족한 시간인데 단점은 여기까지!
참조 사이트 : http://www.incodom.kr/R_vs._Python
그런데 왜 R이 아니고 파이썬을 선택한 지 이유는?!
파이썬이 뜨고 있다는 소리는 몇년전부터 알고 있었으며, …..
위 통계 그래프를 보면 파이썬이 R을 앞지른걸 볼수 있었는데요.
인지율 상승 추세, 그리고 범용성을 따진다면 아마도 대부분 Python을 사용하지 않을까 하는 생각이 들어 선택했습니다.
일단 파이썬 선택 배경을 말씀드렸는데요. 설치는 이미 했겠다. 파이썬의 머신러닝의 대표적인 라이브러리 부터 비교 해보도록 할까요?!
머신러닝 라이브러리
가장 대표적인 라이브러리가 구글 TENSOR FLOW VS SCIKIT-LEARN 입니다만.
뭔가 텐소 플로우, 싸이킷런 말만 들어봐도 뭔가 색다른 느낌이 나는 단어들이네요.
먼저 사이킷런은 탄탄한 학습 알고리즘이 장점이며 사용하기 쉽고 예제 및 샘플 설명이 잘되어 있지만 강화학습이나 딥러닝을 다루진 않습니다.
일반적인 머신러닝 용도라면 사이킷런 만한게 없다고 합니다.
그리고 텐소 플로우 인데요. 구글이 내놓았으며, 성능과 확장성이 좋지만
배우기 어렵고 딥러닝에서 많이 사용하는 모델과 알고리즘이 들어 있다고 합니다.
더 자세한 내용은 아래 참조 사이트에 설명이 잘되어 있는 듯 합니다.
(참조 : 사이킷런 VS 텐소플로우)
일단 사용하기 쉽고 샘플 설명이 잘되어 있는 사이킷런을 사용할 생각이며, 또한 싸이킷런과 자주 사용하는 라이브러리도 이용할 생각입니다.
– 필요 lib
+ SCIKT-LEARN (머신러닝 라이브러리)
+ PANDAS (데이터 처리 라이브러리)
+ NUMPY(대규모 다차원 배열을 쉽고 빠르게 처리할 수 있는 라이브러리)
+ MATPLOTLIB(데이터 시각화 라이브러리 )
우선 Pandas 라이브러리를 보도록 하겠습니다.
Pandas는 파이썬에서 사용하는 데이터분석 라이브러리로 행과 열로 이루어진 데이터 객체를 만들어 다룰 수 있게 되며
보다 안정적으로 대용량의 데이터들을 처리하는데 편리한 라이브러리 입니다.
음 그냥 데이터 분석 라이브러리 라고 하니 느낌은 그냥 그렇습니다.
그럼 샘플을 실행하기 위해서 저번에 설치 하였던 Jupyter notebook을 실행하여 샘플을 작성해보도록 하겠습니다.
해당 하면은 Jupyter notebook을 사용하여 먼저 pandas를 사용하겠다고 Import 한 뒤 앨리아스를 pd 라고 정의.
그리고 Data 변수 안에 Dictionary 형태(Key , Value) 의 데이터를 만듭니다. 그런 다음 pandas에 있는 함수를 이용하여 DataFrame으로 만든뒤 출력!!
뭔가 엑셀 같은 느낌이네요.
저렇게 엑셀에 있는 기능이 편리하게 구현되어 있습니다. 해당 컬럼에 조건을 걸어 해당 내용만 출력. 뭐 다들 있는 합계, 평균 등 기본적인건 당연히 갖추고 있습니다.
Jupyter Notebook을 사용하니 코딩을 하면서 위와 같이 볼 수 있어 조금 색다른 느낌이 드네요.
파이썬으로 머신 러닝을 첨에 접하다보면 거의 필히 나오는 예제 데이터가 있습니다. 바로 보스턴 집값에 대한 가격에 대한 데이터 인데요. 해당 데이터가 머신러닝 쌤플로 제공을 하고 있습니다. Pandas를 사용해 해당 데이터를 cvs로 저장해 읽어 보겠습니다.
오..pandas를 사용하니까 파일을 그냥 저 함수 한줄로 읽어 들일 수 있습니다.!!!!
해당 데이터는 총 506행이고 마지막 행을 실행하면 CRIM(범죄율을 뜻하는듯한)이 10이 넘는 데이터만 조회가 되겠죠?!
써본 느낌은 엑셀을 조작하는 느낌이라 생각보다 친숙합니다.
다음으로 matplotlib라이브러리를 살펴볼까 합니다.
matplotlib : 그래프등 데이터를 시각화 하기 위한 라이브러리, 다차원 그래프 지원을 한다고 되어 있는데 일단 간단히만 알아보겠습니다.!
음 보시는대로 데이터를 x, y 축의 데이터를 시각화 하는 용도. 음 기본만 써서 그런지 데이터를 봐서 좋긴한데 퀄리티가 좋아보이진 않긴합니다!
그럼 마지막으로 numpy 입니다. 실제로 numpy가 머신러닝에 비중이 젤 큰 라이브러리라고들 말하는데요.
해당 라이브러리는 쌤플 이외에도 라이브러리만 파도 공부를 꽤나 시간들여서 해야하는 거 같습니다.
기존에 파이썬의 느린 속도를 보완하고 과학 연산 및 수치 연산을 하는 Nummerical Python 줄여서 넘파이라고 부릅니다.
샘플을 실행하기 앞서 과학 연산 및 수치 연산이라고 하는데 실제로 해당 라이브러리를 사용하기 위해서 선형 대수학!! 선형 대수학이 필요합니다. 저도 대학교 1학년때 배운 기억이 나는데요…… 네…기억은 나는데요….
간단한 샘플 한번 살펴보면서 기억을 더듬어 보도록 하겠습니다.
음 몰라도 어떻게 되는지만 알면 계산은 Numpy가 해줍니다. 걱정하지 마세요!!
ㅠㅠ 머신 러닝이라더니…휴먼러닝이 아닐까 싶습니다….머리가 급 아파오네요 ㅠ
음 일단 실행해보도록 하죠…. 일단 샘플은 사칙연산만 알면 가능합니다!!
numpy를 선언한뒤 넘파이에서 제공하는 array를 사용하여 2차원 리스트를 2개 생성한 뒤 사칙연산을 하면 알아서 같은 자리끼리 사칙연산을 하여 나옵니다. 그리고 다음에 중요한게 바로 선형 대수학의 내적인데요…. 내적이라… 한번 보시죠!
실제로 내적이라하면 선형대수학에서 3차원 이상의 연립방정식을 구하기 위해 주로 사용을 합니다. 해당 data1 (2X2 ) * (2X1) 매트릭스끼리 곱할려면 중간에 저 숫자가 딱 맞아야하며 해당 숫자는 소거되고 (2×1)매트릭스가 나오게 됩니다. data1에 1행을 가로로 세워 data2에 해당하는 걸 각자 곱하면 해당 값이 나오게 됩니다.
[1*3 + 2*3] = 9
[1*3 + 2*3] = 9
잘 정리되어 있는 블로그가 있었는데 찾을수가 없어서..비슷한 링크를 달아드립니다.
해당 방법을 사용하면 데이터가 여러행이 되므로 포문을 돌리지 않고 여러개의 데이터를 한방에 계산을 가능합니다.