본문 바로가기

머신러닝 공부

머신러닝(Machine Learning)

SMALL

머신러닝은 일반적으로 애플리케이션을 수정하지 않고도 데이터를 기반으로 패턴을 학습하고 결과를 예측하는 알고리즘 기법을 이야기합니다. 기존의 소프트웨어 코드로만은 해결하기 힘든 문제들을 머신러닝을 이용해서 해결하고 있습니다.

머신러닝 알고리즘은 데이터를 기반으로 통계적인 신뢰도를 강화하고 예측 오류를 최소화하기 위한 다양한 수학적 기법을 적용해 데이터 내의 패턴을 스스로 인지하고 신뢰도 있는 예측 결과를 도출하도록 합니다.

 

데이터마이닝, 영상 인식, 음성 인식, 자연어 처리 등과 같이 개발자가 데이터나 업무 로직의 특성을 직접 감안한 프로그램을 만들 경우 난이도와 개발 복잡도가 높을 수 밖에 없는 분야에 머신러닝은 계속해서 발전하고 있습니다.

 

 

 

 

머신러닝 분류

머신러닝은 일반적으로 Supervised Learning(지도 학습)과 Un-supervised Learning(비지도 학습), Reinforcement Learning(강화학습)으로 나뉩니다.

여기서 지도학습의 대표적인 머신러닝은 Classification(분류)와 Regression(회귀)로 나뉩니다.

 

머신러닝에서는 문제와 답을 계속해서 예측 및 보정을 해나가면서 logic을 찾아나가는데 답이 있으면 지도학습, 답이 없는 경우는 비지도 학습으로 구분하면 된다. 답을 보통 target, label값이라 합니다. 문제가 보통은 feature라고 합니다.

데이터의 feature들을 기반으로 해서 target값을 주어지는 것은 지도학습이라고 하면 됩니다.

 

1. 지도학습

- 분류 (ex: 암이 양성/음성 , 신용카드가 사기거래인가요? => 단일값 예측)

- 회귀 (ex : 우리 회사의 매출은 100일 뒤에 어떻게 될까요? ==> 연속값 예측)

- 추천 시스템 (ex: 사용자가 산 제품들을 분석해서 최적의 상품을 추천)

- 시각/음성 감지 및 인지 

 

*지도학습의 시각/음성 감지 및 인지는 분류(Classification)분야로 넣을 수 있지만 딥러닝 기반이라 예외적으로 뺀 것입니다.

비지도학습은 feature들이 여러개 있는 것입니다. 비슷한 특성을 가진 feature들을 모으는 것입니다.

 

2.비지도학습

-클러스터링(군집화) 

-차원 축소

-토픽 모델링, 문서 군집화

 

 

머신러닝에서 데이터와 머신러닝 알고리즘은 중요한 요소입니다. 어느 요소가 더 중요하다고 말하기 힘들지만 저를 포함한 많은 사람들은 당야한 알고리즘의 차이와 적용 방법을 익히기 위해서 시간을 쏟고 있으리라고 생각합니다. 하지만 머신러닝의 가장 큰 단점이라면 데이터의 의존성이 매우 크다는 것입니다. 그만큼 머신러닝 세상에서는 데이터의 중요성이 크다는 뜻이겠죠. 양질의 데이터가 없다면 머신러닝의 수행결과도 좋을 수 없습니다. 머신러닝이 어떤 데이터든 넣는다면 최적화된 결과를 도출한다는 믿음은 환상입니다. 이를 위해서는 최적의 머신러닝 알고지므 및 모델 파라미터를 구축하는 능력은 물론 중요하지만 데이터를 이해하고 효율적으로 가공, 처리, 추출해 최적의 데이터를 준비하는 능력이 더 중요합니다.

 

 

 

 

오픈 소스 프로그래밍 언어 비교 (파이썬, R)

머신러닝 프로그램을 작성할 수 있는 오픈 소스 프로그래밍 언어는 위에서 보듯 python, R입니다. C/C++/JAVA 등 컴파일러 기반의 언어도 작성은 가능하지만, 위의 언어에 대비하여 생산성이 떨어지고 지원 패키지와 생태계가 활발하지 않습니다. 물론 컴파일러 기반의 언어는 즉각적인 수행 시간이 중요한 머신러닝 애플리케이션 (ex: 임베디드)에 적용이 활발합니다. 이외 MATLAB과 같은 상용 통계 패키지도 머신러닝을 지원하지만 번외로 취급할 정도의 머신러닝 분야에 있어서는 파이썬과 R을 가장 많이 사용합니다.

 

R은 통계 전용 프로그래밍 언어입니다. SPSS, SAS, MATLAB등 전통적인 통계 및 마이닝 패키지 통계 전문가들이 이를 개선하고자 만든 언어가 R입니다.

파이썬은 개발 전문 프로그램 언어입니다. 파이썬은 직관적인 문법과 객체지향, 함수형 프로그래밍 전부를 포괄하는 프로그램 아키텍처, 다양한 라이브러리 등의 강점을 가지면서 현재 트렌디한 언어라고 볼 수 있습니다.

 

머신러닝을 시작하는 사람이라면 (저와같은), 특히 개발자를 꿈꾸는 분들이라면 파이썬이 더 나을거라고 생각합니다.

머신러닝을 배우려는 사람들에게 파이썬이 뛰어난 점은 어떤 것이냐 "파이썬은 소리 없이 프로그래밍 세계를 주도하는 언어" 입니다.

 

1. 쉬운 개발 생산성으로 전 세계 개발자들이 파이썬에 대한 선호도 증가. 특히 구글, 페이스북 등 유수의 IT 업계에서도 파이썬의 높은 생산성으로 인해 활용도가 매우 높다.

 

2. 오픈소스 계열의 전폭적인 지원을 받아 많은 라이브러리로 인해 개발 시 높은 생산성을 보장해준다.

 

3. Interpreter Language 특성상 속도는 느릴지언정, 뛰어난 확장성, 유연성, 호환성으로 서버(장고와 같은 웹 프레임 워크 등), 네트워크, 시스템, IoT(Raspberry pi) 등 다양한 영역에서 사용

 

4. 머신러닝 애플리케이션과 결합한 다양한 애플리케이션 개발 가능

 

5. 엔터프라이즈 아키텍처로의 확장 및 마이크로서비스 기반의 실시간 연계 등 다양한 기업 환경으로의 확신이 가능

 

분석 영역을 넘어서 ML 기반의 다양한 애플리케이션 개발이 쉽게 가능합니다. 

(ML 모델을 하나 만들고 이를 호출하고 싶으면 파이썬 기반으로 Flask를 만들어서 Rest API를 통해 예측결과를 알고싶다면 Flask와 model이 상호작용을 통해 다시 Rest API로 반환시키는 기존 어플리케이션과의 연계도 쉽습니다.)

 

딥러닝 프레임워크인 TensorFlow(텐서플로), Keras(케라스), PyTorch(파이토치) 등에서 파이썬 우선 정책으로 지원하고 있습니다. 따라서 딥러닝 프레임워크는 파이썬 중심으로 발전될 가능성이 큽니다.

 

 

 

파이썬 머신러닝을 구성하는 주요 패키지

1. 머신러닝 패키지 : 정형 데이터 기반으로 머신러닝을 한다하면 Scikit-Learn(사이킷런)을 쓸 수 있습니다. 

2. 배열 /선형대수/ 통계 패키지 : 사이킷런의 기반인 NumPy(넘파이), SciPy(사이파이)를 패키지로 쓸 수 있습니다.

*SciPy의 ML기반 확장형으로 만든 패키지가 Scikit-Learn인데 확장형으로 만든 패키지가 더 유명해져 대표 ML 패키지로 쓰게 되었습니다.

3. 데이터 핸들링 패키지 : NumPy는 일반적으로 다차원행렬을 처리하기 때문에 평면적인 2차원 데이터를 처리하기에는 조금 데이터처리가 편리하지 않는다. 따라서 2차원 데이터 처리를 편리하기 하기 위해서 pandas(판다스) 패키지를 사용합니다.

4. 시각화 : 데이터의 특성을 직관적으로 이해하기 위해서는 시각화가 필요하기 때문에 파이썬에서는 matplotlib(맷플롯립)이라는 패키지를 가장 대표적인 시각화로 사용합니다. 단, API가 조금 불편사항이 있어 좀더 직관적인 API로 만들어진 Seaborn(시본)이 있습니다.

5. 대화형 파이썬 툴 : 앞서 말한 패키지들을 어디서 코딩하냐면, 대화형 파이썬 툴의 Jupyter Notebook 기반으로 합니다. 

이 jupyter notebook은 어떤 코드를 입력하고 설명을 한다던가, 셀 단위로 코드를 분리하여 작업을 할 수 있는 장점이 있습니다. 마치 디버깅을 하듯이 결과를 셀 단위로 확인할 수 있기 때문에 데이터사이언스에서 prototype을 만들 때는 jupyter notebook을 사용하여 만드는 것이 좋습니다.

 

 

이제 파이썬을 통한 ML을 배우기 위해서는 앞서 본 패키지들을 전부 공부할 것 같습니다.

LIST