프로그래밍 놀이터/머신러닝, AI, 딥러닝

[머신러닝] #1 헬로 파이썬

돼지왕 왕돼지 2018. 7. 1. 14:30
반응형

[머신러닝]  #1 헬로 파이썬


"Deep Learning from Scratch” 책을 보고 제가 필요한 내용만 정리한 내용입니다.

자세한 내용은 책을 구매해서 보세요~


1.1. 파이썬이란?


-

파이썬은 과학 분야, 특히 기계학습과 데이터 과학 분야에서 널리 쓰인다.

파이썬 자체의 뛰어난 성능에 넘파이(NumPy)와 사이파이(SciPy) 같은 수치 계산과 통계 처리를 다루는 탁월한 lib 이 더해져 데이터 과학 분야에서 확고한 위치를 차지하고 있다.

딥러닝 프레임워크 쪽에서도 파이썬을 애용한다. 카페(caffe), 텐서플로(tensorflow), 체이너(chainer), 테아노(theano) 같은 유명 딥러닝 프레임워크들이 파이썬용 api 를 제공한다.





1.2. 파이썬 설치하기.


1.2.1. 파이썬 버전




1.2.2. 사용하는 외부 라이브러리


-

matplotlib : 그래프를 그려주는 라이브러리

numpy : 수치 계산용 라이브러리. 고도의 수학 알고리즘과 배열(행렬)을 조작하기 위한 편리한 메서드가 많이 준비되어 있다.




1.2.3. 아나콘다 배포판


-

배포판이란 사용자가 설치를 한 번에 수행할 수 있도록 필요한 lib 등을 하나로 정리해둔 것.

아나콘다는 데이터 분석에 중점을 둔 배포판이다.


https://www.continuum.io/downloads 에서 OS 에 맞는 배포판을 다운받아 설치하면 된다.





1.3. 파이썬 인터프리터


1.3.1. 산술 연산




1.3.2. 자료형


-

type() 을 통해 자료형(data type)을 알아볼 수 있다.




1.3.3. 변수


-

파이썬은 동적 언어로 분류되는 언어이다.

동적이라는 것은 변수의 자료형을 상황에 맞게 자동으로 결정한다는 뜻.




1.3.4. 리스트


-

[ ] 를 이용해 리스트를 생성한다.

슬라이싱(slicing) 이라는 편리 기법도 준비되어 있다.

인덱스의 -1 은 끝 인덱스, -2 는 끝에서 두번째 인덱스를 의미한다.




1.3.5. 딕셔너리


-

{ } 를 사용하며, : 를 이용해 key value 를 구분한다.

ex) 

{ ‘height’ : 180 }




1.3.6. bool


-

True 와 False 로 값을 나타낸다.

and, or, not 연산자를 사용할 수 있다.




1.3.7.if 문


-

if, elif, else 를 사용한다.

block 은 : 로 시작하고, indentation (들여쓰기) 로 범위를 정한다.

indent 는 space 4개를 주로 사용한다. (tab 을 사용해도 되나 space 를 선호)


ex)

if hungry:

    print(“I’m hungry”)




1.3.8. for 문


-

ex) 

for i in [1,2,3]:

    print(i)




1.3.9. 함수


-

def 함수명(params): 문법을 사용한다.



-

파이썬 인터프리터 종료는 리눅스와 맥에서는 Ctrl + D, 윈도우에서는 Ctrl + Z 입력 후 Enter 이다.





1.4. 파이썬 스크립트 파일


1.4.1. 파일로 저장하기


-

python <pythonFile.py> 로 실행한다.




1.4.2. 클래스


-

아래와 같이 정의한다.


class className:

    def __init__(self, param1, param2, …): #생성자

    def method1(self, param1, … )

    …



-

string concat 은 + 로 한다.



-

self.varName 으로 하면 instance 변수(member 변수) 로 사용 가능하다.






1.5. 넘파이


-

딥러닝을 구현하다 보면 배열이나 행렬 계산이 많이 등장한다.

넘파이의 배열 클래스인 numpy.array 에는 편리한 메서드가 많이 준비되어 있다.




1.5.1. 넘파이 가져오기


-

import numpy as np




1.5.2. 넘파이 배열 생성하기


-

np.array() 로 생성한다. 이 친구는 파이썬의 리스트를 인수로 받아 넘파이 lib 이 제공하는 특수 형태의 배열 numpy.ndarray 를 반환한다.


ex)

x = np.array([1.0, 2.0, 3.0])

type(x) # output : <class ‘numpy.ndarray’>




1.5.3. 넘파이의 산술 연산


-

ex)

x = np.array([1.0, 2.0, 3.0])

y = np.array([2.0, 4.0, 6.0])

x + y # 원소별 덧셈

x * y # 원소별 곱셈


x, y 의 원소 수가 같을 경우 산술 연산은 각 원소에 대해 행해진다.

원소 수가 다르면 오류가 발생한다.

원소별 이라는 말은 영어로 element-wise 라고 한다.

원소별 곱셈은 element-wise product 라고 한다.



-

넘파이 배열은 원소별 계산뿐 아니라 넘파이 배열과 수치 하나(스칼라값) 의 조합으로 된 산술 연산도 수행할 수 있다.

이 기능을 브로드캐스트라고 한다.


ex)

x = np.array([1.0, 2.0, 3.0])

x / 2.0




1.5.4. 넘파이의 N 차원 배열


-

넘파이는 다차원 배열도 작성할 수 있다.


ex)

A = np.array([[1, 2], [3,4]])

A.shape # (2, 2)

A.dtype # 원소의 자료형, dtype(‘int64’)


형상(shape)이 같은 행렬끼리면 행렬의 산술 연산도 대응하는 원소별로 계산된다.

행렬과 스칼라값의 산술 연산도 가능하다. 이 때도 배열과 마찬가지로 브로드캐스트 기능이 작동한다.



-

수학에서 1차원 배열은 벡터(vector), 2차원 배열은 행렬(matrix), 3차원 배열은 텐서(tensor) 라고 부른다.




1.5.5. 브로드캐스트


-

넘파이에서는 형상이 다른 배열끼리도 계산할 수 있다.

예를 들어 2 X 2 행렬 A 에 스칼라값 10을 곱하면, 10 이라는 스칼라값이 2X2 행렬로 확대된 후 연산이 이뤄진다.

이런 기능을 “브로드캐스트(broadcast)” 라고 한다.



-

ex)

A = np.array([[1,2,], [3,4,]])

B = np.array([10, 20])

A * B


위의 경우도 브로드캐스트로 B 가 [[10, 20], [10, 20]] 으로 변환되어 연산이 이루어진다.




1.5.6. 원소 접근


-

ex)

X = np.array([ [51,55], [14,19], [0,4] ])

X[0] # 0행, array([51, 55])

X[0][1] # 0행의 1번 원소, 55


for row in X:

    print(row) # 0행, 1행, 2행이 출력


X = X.flatten() # X 를 1차원 배열로 변환

X[np.array([0, 2, 4])] # 인덱스가 0, 2, 4인 원소 얻기 -> array 안에 ndarray 를 주면 그 index 들의 value 가 array 형태로 나옴


X > 15 # bool 형태의 배열로 나옴

X[X>15] # 조건을 만족하는 조건의 값들이 나옴, array([51, 55, 19]) -> array 안에 true, false array 를 주면 조건에 맞는 value 가 array 형태로 나옴



-

파이썬 같은 동적 언어는 C, C++ 같은 정적 언어(컴파일 언어)보다 처리 속도가 느리다고 한다.

실제로 무거운 작업을 할 때는 C, C++ 로 작성한 프로그램을 쓰는 것이 좋다.

그래서 파이썬에서 빠른 성능이 요구될 경우 해당 부분을 C, C++ 로 구현하곤 한다.

그 때 파이썬은 중개자 역할을 한다.

넘파이도 주된 처리는 C, C++ 로 구현했다.

그래서 성능을 해치지 않으면서 파이썬의 편리한 문법을 사용할 수 있다.






1.6. matplotlib


1.6.1. 단순한 그래프 그리기


-

그래프를 그릴 떄는 pyplot 모듈을 이용한다.


ex)

import matplotlib.pyplot as plt


x = np.arange(0, 6, 0.1) # 0 부터 6 까지 0.1 간격으로 생성

y = np.sin(x)


plt.plot(x, y)

plt.show()




1.6.2. pyplot 의 기능


-

ex)

import matplotlib.pyplot as plt


x = np.arange(0, 6, 0.1) # 0 부터 6 까지 0.1 간격으로 생성

y1 = np.sin(x)

y2 = np.cos(x)


plt.plot(x, y1, label=“sin”)

plt.plot(x, y2, linestyle="--“, label=“cos”) # cos 는 점선으로 그림

plt.xlabel(“x”) # x축 이름

plt.ylabel(“y”)

plt.title(‘sin & cos’) # 제목

plt.legend() # legend 는 범례, 기호 설명표 라는 의미, - sin, -- cos 라는 설명표(박스)가 나온다

plt.show()




1.6.3. 이미지 표시하기


-

pyplot 에는 이미지를 표시해주는 메서드인 imshow() 도 준비되어 있다.

이미지를 읽을 떄는 matplotlib.image 모듈의 imread() 메서드를 이용한다.


ex)

import matplotlib.pyplot as plt

from matplotlib.image import imread


img = imread(‘lena.png’) # 이미지 읽어오기


plt.imshow(img)

plt.show()





1.7. 정리


-

파이썬은 간단하고 익히기 쉬운 언어이다.

파이썬은 오픈 소스여서 자유롭게 사용할 수 있다.

이 책은 딥러닝 구현에 파이썬3 버전을 이용한다.

외부 lib 로는 numpy 와 matplotlib 을 이용한다.

파이썬을 실행하는 방식에는 인터프리터와 스크립트 파일 두 가지가 있다.

파이썬에서는 함수와 클래스 같은 모듈로 구현을 정리할 수 있다.

넘파이는 다차원 배열을 다루는 편리한 메서드를 많이 제공한다.




반응형