Machine learning이해하기

부천대학 I.o.T 응용 소프트웨어 과목을 수강하는 학생들을 위해 만든 자료로 권철민님의 파이썬 머신러닝 완벽 가이드의 내용을 기반으로 요약 정리했습니다.

IoT란 ?

I.o.T(Internet of Things의 줄임)는 각종 사물에 센서와 통신 기능을 내장하여 인터넷에 연결하는 기술.

즉, 통신을 통해 각종 사물을 연결하는 기술을 의미한다. I.oT는 일반 가정 용품부터 산업전반에 다양하게 쓰이게 되는데, 전문가들에 의하면 IoT 장치가 2020년에는 100억 개, 2025년에는 220억 개로 증가할 것으로 예상하고 있다. 이렇듯 IoT는 4차산업시대 핵심기술 중 하나로 여겨지게되었고, 주방 가전, 자동차, 온도 조절기, 베이비 모니터와 같이 일상생활 속에서 임베디드 장치를 통해 인터넷에 연결해 사람과 프로세스, 사물 간에도 원활한 소통이 가능해졌다.

물리적 사물은 저비용 컴퓨팅, 클라우드, 빅 데이터, 분석, 모바일 기술 등의 방식으로 사람의 개입을 최소화하면서 데이터를 공유하고 수집할 수 있습니다. 이 초연결 세계에서 디지털 시스템은 연결된 사물 간의 각 상호 작용을 기록하고, 모니터링하고, 조정할 수 있다.

IoT를 가능하게 한 기술은 무엇인가?

  • 저비용, 저전력 센서 기술

  • 네트워크(Network)

  • 클라우드(Cloud)

  • 머신 러닝과 분석

  • 대화형 인공지능(AI)

Machine Learning이란?

머신러닝(Machine Learning)이란 어플리케이션을 수행하지 않고도 데이터 기반으로 패턴을 학습하고 추론하는 알고리즘 기법. 현실세계에 복잡한 어려운 문제를 머신러닝을 통해 해결해가고 있다.

특히 데이터마이닝, 영상인식, 음성인식, 자연어처리에서 머신러닝을 적용하면서 급속히 발전해가고 있다.

왜 머신러닝을 사용해야하는가?

기존의 문제점

  • 현실세계 복잡한 업무와 rule을 구현하는데 어려운 방대한 코드

  • 많은 자원과 비용을 지불을 통해 구현하는 Application의 문제

  • if-else 등 코드로 해결하기 어려운 문제

머신러닝은?

  • 기존의 문제들을 데이터를 기반으로 숨겨진 패턴 인지 및 해결

  • 통계와 수학적 기법을 적용해 데이터 패턴을 인지하고 신뢰도있는 예측 결과를 도출

머신러닝의 분류

머신러닝은 크게 지도학습(Supervised Learning)과 비지도 학습(Un-Supervised Learning), 강화학습(Reinforce Learning)으로 나뉜다.

지도학습은 결정값(target-value)이 주어진 데이터를 학습, 비지도학습은 결정값이 주어지지 않은 데이터를 학습시킨다.

강화학습은 어떤 행동을 할지 판단을 하는 주체(Agent)가 주어진 환경(Enviroment)에서 어떤 행동(Action)에 따라 보상(Reward)을 최대한 많이 받을 수 있는 에이전트를 학습하는 것이다.

예를들어 0~9 까지 숫자가 적혀진(mnist) 이미지 데이터가 주어졌을 때 사람마다 이미지 안에 픽셀안에 글씨가 0이다, 1이다 등 명확히 레이블(Label)을 붙여주면 컴퓨터가 픽셀안에 글씨 패턴을 찾아 학습을 하고 숫자를 명확하게 분류할 수 있다. 반면 비지도학습은 레이블을 정하지 않고, 데이터의 성향 파악한 후 유사한 패턴끼리 묶는, 마치 정리정돈을 하는것과 같다.

강화학습은 흔히 게이머가 게임 실력을 키워가는 것과 같이 게이머가 주어진 환경에서 현재의 상태를 관찰하고 판단하여 어떠한 행동을 한다.그리고 적절한 보상을 받게 되며 점차 프로로 성장한다. 이 과정을 반복하는것이 강화학습이라 생각하면 된다. 2016년 구글과 이세돌의 바둑대결에서 구글이 만든 소프트웨어인 알파고가 이세돌을 4:1로 이겼었는데 이때 알파고의 학습방법이 강화학습이다.

지도 학습(Supervised Learning)

  • 분류 (Classification)

  • 회귀 (Regression /Multiple Regression / Logistic Regression )

  • 시각 /음성/인지

비지도 학습(Un-Supervised Learning)

  • 군집화(Clustering)

  • 차원축소 (PCA /EFA/ CFA )

차원축소에 보충설명하면 다차원의 데이터를 저차원의 데이터로 축소하는데 그치지 않고 데이터의 함축적 의미를 추출한다.

머신러닝은 만능인가??

유수의 회사들이 머신러닝 알고리즘의 정확도를 개선하기 위해 많은 R&D 예산을 투자하고 있는만큼 데이터의 중요성이 증대하고 있다. 머신러닝 시장이 커지고 있는 가운데 머신러닝을 도입한다고해서 우리가 해결하려는 문제를 해결 할 수 있을까? 머신러닝의 대표적인 단점에 대해 소개하려 한다.

편향적인 결과

Garbage in, Garbage out 이라는 말과같이 머신러닝은 데이터에 의존하다 보니 편향적인 결과를 가져올 수 있다. 즉 데이터가 정제되어 있지 않다면 좋지 못한 결과를 가져올 수 있다.

과적합의 문제

데이터만 넣으면 자동으로 최적의 결과를 도출할 수 있다는 흔한 착각을 한다.

실전 데이터와 학습된 데이터 결과는 서로 다를 수 있다.

데이터에 의해 충실한 모델 학습과 알고리즘에 의한 결과가 실제 데이터와는 맞지 않을 수 있다.

따라서 데이터 특성을 파악하고 최적의 패턴 학습 구성이 필요하다.

R vs Python

흔히 머신러닝을 시작하는 사람들의 고민 중 하나다.

이러한 고민을 가진 분들께 내가 추천해주는 방법은 명확하진 않지만 R과 Python 의 특징을 알고 선택과 집중을 해보시길 권유 드린다.

R

  • 통계 전용 프로그램 언어

  • 통계분석에 능한 사용자들이 주로 사용

  • 다양한 통계 패키지 보유

R의 경우 통계 분석을 위해 특화된 언어이며 무엇보다 오랜 기간동안 R 사용자들이 생성하고 검증해온 통계 키지를 보유하고 있다. CRAN에 들어가면 무수히 많은 통 패키지를 볼수있다. 이글을 쓰는 나도 R유저중 한명으로서 R을 이용해 학위논문을 완성했다.

Python

  • 직관적 문법과 객체지향 언어

  • 다양한 라이브러리

  • 개발자들이 주로 사용

머신러닝을 처음 접하는 분이라면, 파이썬을 권하고 싶다. 2020년 11월 티오베 인덱스에서 발표한 자료에 따르면 파이썬이 데이터 마이닝, 인공지능(AI), 수치 해석 등의 분야에 적극적으로 사용되고 있다고 한다.

물론 interpreter 언어이기 때문에 다른언어에 비해 속도는 떨어질 수 있으나 쉽고 유연하며, 딥러닝 프레임워크인 텐서플로(TensorFlow), 케라스(Keras), 파이토치(Pytorch) 등에서 파이썬을 우선적으로 지원하고 있다. 물론 R에서도 텐서플로 연계가 가능하나 우선 정책에서 파이썬에게 밀린다.

파이썬의 주요 패키지

  • 머신러닝/딥러닝 패키지 : 데이터과학자나 데이터 분석가들이 데이터 학습을 위한 패키지로 대표적으로 사이킷런(scikit-Learn), 텐서플로(TensorFlow), 파이토치(Pytorch), 케라스(Keras)가있다.

  • 행렬/ 선형대수/ 통계 패키지: 선형대수와 통계를 다루는 패키지로 넘파이(Numpy)가 있다. 대부분 머신러닝 패키지는 넘파이 기반으로 이뤄져 있다.

  • 데이터 핸들링: 데이터 처리를 위한 패키지로 행렬기반인 넘파이보다 더 많고 편리한 데이터 처리를 제공해주는 판다스(Pandas)가 있다.

  • 시각화: 데이터의 시각화 패키지로 맷플롯립(matplotib)시본(Seaborn)이 있다.

  • 대화형 툴(Tool) : 전체 프로그램에서 특정 코드 영역별로 개별 수행을 지원하는 프로그램인 주피터 노트북(Jupyter Notebook)이 있다. 중요 코드 단위로 설명을 적고 코드를 수행해 결과를 확인 할 수 있다.

파이썬 머신러닝 용도 S/W 설치

파이썬 머신러닝을 위한 패키지를 가장 쉽게 설치할 수 있는 방법은 anaconda를 이용하는 것이다.

먼저 구글에서 python anaconda download를 검색한다. 다음 OS 사양에 맞춰 anaconda를 설치한다.

이후 다운로드한 exe 파일을 실행시키고 차례대로 next를 누르면 설치가 끝난다.

두번쨰로 나중에 추천 시스템 Surprise 패키지를 이용한 실습환경을 위해서 Microsoft Visual Studio Build Tools를 설치한다.

하단의 Tools for Visual studio 2019로 클릭 Visual Studio 2019용 Build Tools 설하면 되겠다.

마지막으로 설치파일을 실행하면 visual C++ 빌드도구만 설치한다.

Reference

[1] https://www.oracle.com/kr/internet-of-things/what-is-iot/

[2] 권철민 - 파이썬머신러닝 완벽 가이드

[3] 그림: 생활코딩

Last updated