파이썬 라이브러리를 활용한 머신러닝 1일차

GRAND IT NOMAD·2021년 12월 7일
0



시작

빅데이터 모델링을 개발해야한다. 진짜 이제는 사업을 위해 시작해야했다. 학교 도서관에서 이 책을 바로 집어들었다. 이제는 시간이 많이 없다. 시작해야된다!


1장. 머신러닝과 머신러닝 애플리케이션의 기초 개념, 책에서 사용할 환경

2장. 지도학습 (실전에서 널리 이용하는 머신러닝 알고리즘, 각각의 장단점)

3장. 비지도 학습 (실전에서 널리 이용하는 머신러닝 알고리즘, 각각의 장단점)

4장. 머신러닝에서 데이터를 표현하는 방법이 왜 중요한지, 주의할 점이나 그런 것들

5장. 모델 평가와 매개변수 튜닝을 위한 고급 방법, 교차 검증, 그리드 서치

6장. 모델을 연결하고 워크플로를 캡슐화하는 파이프라인

7장. 텍스트데이터에 적용하는 방법, 텍스트에 특화된 처리 기법

8장. 개괄적인 정리를 하고, 좀 더 어려운 주제에 대한 참고 자료


1.1  왜 머신 러닝 인가?

머신러닝이 나오기 전에 모든 시스템들은 if-else을 활용한 규칙기반 시스템이었다. 이렇다보니 이미지 인식과 관련된 문제들을 해결할 수 없었다. 머신러닝은 이러한 이미지 인식 문제 같은 복잡한 문제들을 해결해준다.

1.1.1 머신 러닝으로 풀 수 있는 문제

머신러닝은 이미 알려진 사례들을 바탕으로 일반화된 모델을 만들어 의사결정프로세스를 자동화한다. 이 방식을 지도방식 이라고 한다.

일반화된 모델을 만들 때, 입력-출력 데이터를 계속 제공하고, 알고리즘은 주어진 입력에서 원하는 출력을 만드는 방법을 찾는다.


지도학습 예시

편지봉투에 손으로 쓴 우편번호 숫자판별 -> 제대로 된 숫자
의료 영상 이미지에 기반한 종양 판단 -> Yes / No


비지도학습 예시

블로그 글의 주제 구분
고객들을 취향이 비슷한 그룹으로 묶기
비정상적인 웹사이트 접근 탐지


지도학습 / 비지도학습 공통점

지도학습 vs 비지도학습 둘다 컴퓨터가 인식할 수 있는 형태로 입력 데이터를 준비하는 것이 중요하다

데이터는 엑셀테이블처럼 생각하면 편리
우리가 판별해야할 개개 데이터 (개개의 이메일, 고객, 거래) 는 행
데이터를 구성하는 각 속성(고객의 나이, 거래 가격, 지역

하나의 인스턴스를 샘플, 데이터 포인트라고 부른다. 좋은 입력 데이터를 만들어내는 특성 추출 및 특성 공학이라는 주제는 추후에!

(devstu에서 어떤 데이터들을 수집해야하는지도 나온다!)

1.1.2 문제와 데이터 이해하기

머신러닝 프로세스에서 가장 중요한 것은 사용할 데이터에 대한 이해, 그 데이터가 해결해야할 문제와 어떤 관련이 있는지!

데이터를 통해 문제 해결을 해야한다. 데이터셋으로 무엇을 하는지 반드시 이해해야한다.

1.2 파이썬인가?

파이썬이다. 라이브러리 만세

1.3 scikit-learn

Numpy 와 Scipy  를 활용한다. 그래프를 그리려면 matplotlibㅡ, 대화식을 그리려면 IPython과 주피터 노트북을

실습 과정

1-4-7 (211207)
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS_HTML"></script>
<!-- MathJax configuration -->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
    tex2jax: {
        inlineMath: [ ['$','$'], ["\\(","\\)"] ],
        displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
        processEscapes: true,
        processEnvironments: true
    },
    // Center justify equations in code and markdown cells. Elsewhere
    // we use CSS to left justify single line equations in code cells.
    displayAlign: 'center',
    "HTML-CSS": {
        styles: {'.MathJax_Display': {"margin": 0}},
        linebreaks: { automatic: true }
    }
});
</script>
<!-- End of mathjax configuration --></head>

Numpy (기본 자료구조)

In [11]:
import numpy as np

x = np.array([[1,2,3], [4,5,6]])

print('x:')
print("{}".format(x))

</div>
<div class="prompt"></div>
x:
[[1 2 3]
 [4 5 6]]

Numpy오 과학 계산을 하기 위해서 반드시 필요한 패키지이다. 다차원 배열을 위한 기능, 선형 대수 연산, 푸리에 변환과 같은 고수준 함수

scikit-learn에서 Numpy 배열은 기본 데이터 구조. Numpy 배열 형태의 데이터를 입력으로 받는다. 그래서 우리가 사용할 데이터는 모두 Numpy 배열로 변환되어야 합니다. 그래서 우리가 사용할 데이터는 모두 Numpy qoduffh qusghksehldjdi gka

Numpy 핵심 기능은 다차원(n차원 배열)인 ndarray 클래스입니다.

SciPy (희소행렬)

In [16]:
from scipy import sparse

eye = np.eye(4)
print("Numpy 배열 : \n{}".format(eye))

</div>
<div class="prompt"></div>
Numpy 배열 : 
[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]
In [17]:
sparse_matrix = sparse.csr_matrix(eye)
print("SciPy의 CSR 행렬 : \n{}".format(sparse_matrix))
</div>
<div class="prompt"></div>
SciPy의 CSR 행렬 : 
  (0, 0)	1.0
  (1, 1)	1.0
  (2, 2)	1.0
  (3, 3)	1.0

과학 계산용 함수들을 모아둔 파이썬 패키지이다. Scipy

고성능 선형 대수, 함수 최적화, 신호 처리, 특수한 수학함수, 통계 분포 등 많은 기능을 제공.

sparse 는 희소행렬을 제공한다.

In [19]:
data = np.ones(4)
row_indices = np.arange(4)
col_indices = np.arange(4)
eye_coo = sparse.coo_matrix((data, (row_indices, col_indices)))
print("C00 표현:\n{}".format(eye_coo))
</div>
<div class="prompt"></div>
C00 표현:
  (0, 0)	1.0
  (1, 1)	1.0
  (2, 2)	1.0
  (3, 3)	1.0

메모리 부족으로 인해서 C00 표현을 해낼 수 있어야 한다!

? 왜 eye랑 data 다르게 처리를 하고 있는가?

  • sparse.csr_matrix(eye)
  • sparse.coo_matrix((data, (row_indices, col_indices)))

matplotlib

In [22]:
%matplotlib inline
</div>
In [23]:
import matplotlib.pyplot as plt

# -10부터 10까지 간격이 100개인 배열을 생성한다
x = np.linspace(-10, 10, 100)
y = np.sin(x)
plt.plot(x, y, marker="x")

</div>
<div class="prompt output_prompt">Out[23]:</div>
[<matplotlib.lines.Line2D at 0x4d9c090>]
<div class="prompt"></div>

Pandas (데이터 처리와 분석)

Pandas는 데이터베이스랑 같은 것!
테이블을 수정하고 조작하는 것과 완전 같은 기능을 수행한다!
SQL처럼 테이블에 쿼리나 조인을 수행할 수 있다!

딕셔너리를 활용해서 Dataframe을 만드는 방법 (책 35P)

In [25]:
import pandas as pd

data = {
"name" : ["John", "Anna", "Peter", "Linda"],
"location" : ["New York", "Paris", "Berlin", "London"],
"Age" : [24, 13, 53, 33]
}

data_pandas = pd.DataFrame(data)
display(data_pandas)

</div>
<div class="prompt"></div>
name location Age
0 John New York 24
1 Anna Paris 13
2 Peter Berlin 53
3 Linda London 33
In [26]:
display(data_pandas[data_pandas.Age > 30])
</div>
<div class="prompt"></div>
name location Age
2 Peter Berlin 53
3 Linda London 33

mglearn (그림을 그리거나, 필요한 데이터를 불러들이기 위해 바로 사용한다)

이 책의 소프트웨어 버전

In [30]:
import sys
print("Python 버전: {}".format(sys.version))

import pandas as pd
print("pandas 버전: {}".format(pd.version))

import matplotlib
print("matplotlib 버전: {}".format(matplotlib.version))

import numpy as np
print("NumPy 버전: {}".format(np.version))

import scipy as sp
print("SciPy 버전: {}".format(sp.version))

import IPython
print("IPython 버전: {}".format(IPython.version))

import sklearn
print("scikit-learn 버전: {}".format(sklearn.version))

</div>
<div class="prompt"></div>
Python 버전: 3.7.6 (default, Jan  8 2020, 16:21:45) [MSC v.1916 32 bit (Intel)]
pandas 버전: 1.0.1
matplotlib 버전: 3.1.3
NumPy 버전: 1.18.1
SciPy 버전: 1.4.1
IPython 버전: 7.12.0
scikit-learn 버전: 0.21.1
In [ ]:
 
</div>
profile
자동화 시스템 개발자

0개의 댓글