티스토리 뷰

[학습노트]는 학습한 강의 내용을 정리해 둔 글입니다.

해당 글은 K-MOOC [파이썬으로 배우는 기계학습 입문 Plus+] 2주차 강의를 수강하며 정리한 내용입니다.
제 임의로 요약 및 정리를 한 글로 정확한 내용은 아래 링크의 강좌를 수강하시는 것을 추천드립니다.

http://www.kmooc.kr/courses/course-v1:HGUk+HGUP01+2022_T2/about

 

파이썬으로 배우는 기계학습 입문 Plus+

본 강의는 수강생이 기계학습(machine learning)의 원리를 이해하고, 그 원리를 적용하여 문제를 해결함으로 기계 학습 문제들을 해결하는 코딩 능력을 기를 수 있도록 합니다. 또한 4차 산업 혁명의

www.kmooc.kr

- 기계학습과 관련된 기초 지식이 없어도 수강 가능한 강좌라 추천받아 수강한 강좌입니다.
- 잘못된 내용이 존재할 수 있으며 본 포스팅은 작성자가 듣고 이해한 강의에 대한 요약 정도로만 참고 바랍니다.
- 강의에 나온 코드는 최대한 따라서 코딩하였습니다.

이전 포스팅
[ 1주차 학습노트 ] 보기

 

[1주차 학습노트] 파이썬으로 배우는 기계학습 입문+

[학습노트]는 학습한 강의 내용을 정리해 둔 글입니다. 해당 글은 K-MOOC [파이썬으로 배우는 기계학습 입문 Plus+] 1주차 강의를 수강하며 정리한 내용입니다. 제 임의로 요약 및 정리를 한 글로 정

ideaspread.tistory.com

2-1. 함수와 뉴론

인공 뉴론 : 코드로 만드는 뉴론
많은 뉴론이 모인 것이 유명한 인공신경망

[함수와 뉴론]
함수 : 입력 x에 따른 출력 y 가 있을 시 x와 y의 관계를 나타내는 식
푸리에 변환 함수 : 시간에 대한 입력 값을 주파수 영역으로 변경하는 함수
이산 코사인 변환함수 : 이미지, 영상을 압축 및 복원을 할 수 있도록 하는 함수

- 과거의 함수
고양이 사진 입력 -> 함수 -> ?

고양이에 대한 묘사 내용을 함수로 정의할 수 있어야 함
- 매우 힘들었음

현재 함수
고양이 사진 입력 -> ? -> 사람처럼 사물 구별 가능
- 기계학습이 이를 가능하게 함

기계 학습 : 만능 함수 제조기
이를 위해서는 많은 자료가 필요함
- 많은 IT 회사에서 무료 저장공간을 주며 자료를 올리는 것을 요구함

뉴론(뇌세포) : 뇌의 기본 단위, 850억 개로 사람의 뇌가 구성되어 있음
신경망 : 뉴론 간의 망으로 연결되어 신경을 전달하며 필요한 연산을 함
사람의 뇌에서 뉴론을 연결하는 시냅스는 100조개가 됨

뉴론 연산자
- 임계값(스레쉬홀드) : 입력에 대한 출력을 즉시 반환하는 것이 아닌 임계값에 도달될 때까지 입력을 축척
- 입력은 다수, 출력은 하나
- 입력의 합산 : 여러 뉴론에서 온 값들은 모두 합산되는데, 합산 값이 스레쉬홀드 이상이어야 출력이 됨
- 신경망 구성 : 여러 뉴론이 서로 연결되어 있어 복잡한 작업이 가능

[뉴론과 신경망]

출처 : https://heung-bae-lee.github.io/2019/12/06/deep_learning_01/

생물학적 뉴론 모델링
시냅스 : 뉴론과 뉴론을 연결, 신호의 강약이 조절됨
수상돌기 : 입력을 받음
축색돌기 : 입력을 출력

인공뉴론 모델링
생물학적 뉴론과 신경망에서 영감을 받아 여러 입력을 받아 연산한 후 출력하는 함수로 모델링
- 스탠퍼드 앤드류 응 교수와 구글 과학자들이 합동 제작 (2012년)

[인공뉴론의 구현]
- 함수를 만든다는 것

mileToKm (mile to kilometer)
- 입력 값 x에 1.61을 곱해서 출력하는 함수
- 인공 뉴론

plotMileToKm
- 뉴론의 계산 과정이나 결과 시각화

x = [0,1,2,3,4]
y = [0,1.61,3.22,4.83,6.44]
plotMileToKm(x,y)

리스트 데이터 만들기 (손코딩 방식)
plt.plot(x,y)
plt.plot(x,y,'ob') : 동그란 파란 점으로 출력
plt.plot(x,y,'-sr') : 점들을 선으로 잇고 빨간 네모로 출력 ( - : 점들을 선으로 잇는다는 의미)

리스트 데이터 '쉽게' 만들기 (arange 사용)
range(start, end, step) : start 이상 end 미만까지 step간격(기본1)으로 숫자를 생성
linspace(start, end, npoints) :

1. for루프로 리스트 y 만들기

y = []
for mile in range(0,5):
y.append(mileToKm(mile))
print(y)

y 값 초기화, 0,1,2,3,4 생성, y에 값추가

2. list comprehension 으로 리스트 만들기

y = [mileToKm(mile) for mile in range(0,5)]

짧고 간결한 방법

3. numpy 로 데이터 만들기

import numpy as np

x = [0,1,2,3,4]
print(x)

xn = np.array(x)
print(xn)

xn = np.array(np.arange(0,5))
print(xn)
import numpy as np

x = np.arange(0,5)
y = mileToKm(x)

print(x)
print(y)
plotMileToKm(x,y)

pythonic(파이써닉) 하다 : 파이썬답다

2-2. 넘파이 튜토리얼 - 배열의 형상

넘파이 : 파이썬에서 행렬 연산을 위한 핵심적인 라이브러리

[넘파이 개요]
- Numpy - Numerical Pyrhon
- 강력한 다차원 배열과 행렬 연산
- 다양한 선형 대수학 함수와 난수
- 간단한 코딩

[Numpy 라이브러리 사용법]
- import numpy
- import numpy as np

개발자들은 대부분 2번째 방법을 선호

[넘파이 사용 이유]
예시 : 일천만 번 곱셈과 합

리스트 사용 시 : 2.21s
numpy 배열 사용시 : 7.44ms = 0.00744s
- 시간이 297배 더 빠름
- 코드 길이도 짧음 : 실수할 기회가 줄어듦
- 기존 방식은 for 문이 매 줄 실행되지만 numpy를 사용할 경우 한 번에 연산이 가능하다는 것이 차이

[numpy 배열의 속성]
- ndarray (넘파이 클래스) 속성
ndim : 차원, axis 개수, rank
shape : 형상, 각 차원의 배열의 크기
size : 배열의 모든 원소의 개수
dtype : 원소의 자료 형식

[배열의 속성 출력]
pprint() 함수

def pprint(arr):
print("type : {}, size : {}".format(type(arr),arr.size))
print("shape : {}, ndim/rank : {}, dtype : {}".format(arr.shape, arr.ndim, arr.dtype))
print("Array's Data : ")
print(arr)
import numpy as np

x = [1,2,3]
xn = np.array(x)

pprint(xn)

교수님이 만든 함수 : 변수의 속성을 출력하고 배열의 모든 내용을 출력
- 배열의 속성을 알면 코딩에 도움이 되고, 디버깅할 때 좋음

[배열의 생성]
- np.array() - 리스트, 튜플 이용
- 배열 생성 함수

reshape 가능

[배열을 형성하는 다양한 함수 존재]
zeros : 모든 원소 0
ones : 모든 원소 1
full : 사용자가 지정한 하나의 값
empty : 임의의 값
eye : 단위행렬

[데이터 생성 함수 존재]
arange, linspace, logspace
- arange([start,] stop[, step,],dtype=None)
: start에서 stop 미만까지, step간격으로 데이터 생성
- linspace(start,stop,num=50,endpoint=True,restep=False,dtype=None)
: start부터 stop의 범위에서 num개의 데이터를 균일한 간격으로 생성
- logspace(start, stop, num=50,endpoint=True,base=10.0,dtype=None)
: start부터 stop의 범위에서 로그 스케일로 num개의 데이터를 생성

0부터 9까지 동그란 마커를 'o' red 색상으로 'r'
'0부터 2*라디안 까지 50개의 포인트의 sin 값

 

10의 0.1제곱부터 10의 2제곱 까지 50개 포인트의 log 값

[배열 인덱싱과 슬라이싱]
- 인덱싱
0부터 시작
-1 배열의 끝 (음수 indexing)
: 범위 지정(start:end) - end 미포함

[2:5] 원소 2,3,4
[:5] 원소 0,1,2,3,4
[5:] 원소 5부터 끝까지
[:] 모든 원소

- 2차원 배열 인덱싱 연습

해당 배열을 인덱싱 해보자
인덱싱 예시들

- 슬라이싱 : 서브배열(subarray)
배열을 자른다는 의미, 잘라서 만들어진 배열은 서브배열

b를 변경했는데 a도 변경됨
- 이를 간과하면 나중에 몇 시간 동안 디버깅할 수 있음
- 슬라이싱 해서 생긴 배열은 원 배열의 view (해당 부분을 가리키고 있는 것) - c언어의 포인터와 유사한 개념

- 여기서도 a의 값이 변경됨
- 슬라이싱과 똑같은 결과 : aa는 a복사본이 아닌 a의 view

[배열을 복사하는 법]
copy() 메서드 사용

a 가 변하지 않음

[불린 배열 인덱싱]
기계학습에서는 불린(Boolean) 값으로 된 배열을 사용하기도 함

7개의 난수를 생성해서 비교
true가 몇개이고, 어디에 있는지 확인 가능

[배열/행렬의 곱]
- 두 열 백터 x, y 가 크기 m으로 같을 때
내적 : x^T y - 스칼라
외적 : x y^T - m * m 행렬

2-3. 넘파이 튜토리얼 - 브로드캐스팅

[브로드캐스팅]
크기가 다른 두 배열의 덧셈이 불가하지만
브로드캐스팅을 사용하여 가능하게 만들 수 있다.

브로드캐스팅 : "널리 전하다", "퍼트리다"
넘파이 브로드캐스팅 : 형상이 다른 배열 간의 덧셈과 뺄셈을 가능하도록 하는 것

[1 0 1] 배열이 확장되어 결과적으로 1,3 열에 1씩 더해졌다

브로드캐스팅 결과
[1 0 1] -> [1 0 1]
[1 0 1]
[1 0 1]
[1 0 1]

[양방향 브로드캐스팅]
shape(3,1) + shape(1,3) = shape(3,3)
A + B = [ 0 ] + [ 0 1 2]
[ 1 ]
[ 2 ]
넘파이 브로드 캐스팅 결과
A + B = [ 0 0 0] + [0 1 2]
[ 1 1 1] [0 1 2]
[ 2 2 2] [0 1 2]
= [0 1 2]
[1 2 3]
[2 3 4]

[배열의 축 (Axis) 다루기]
np.sum(a, axis = 0) = ?
- a배열의 모든 값을 합하라 + axis로 축을 지정

np.sum(a, axis = 0) 계산

sum(axis = 0): [ 3 5 7 ]
형상 : (3,)

np.max(a, axis = 1) = ?
축 1에 대한 2개의 그룹에 대한 최댓값 가지기
max(axis = 1) : [2 5]

[3차원 배열]
3차원 배열을 위한 2차원 배열을 먼저 만들어보자

동일 방식으로 3차원 배열 생성

np.sum(a, axis = 0) =?

7 + 15 + 23 = 45
즉 아래의 결과가 나온다

np.min(a, axis = 1) = ?

np.max(a, axis = 2) = ?

[난수 배열의 생성]
numpy.random 모듈

randint(low, high = None, size = None, dtype = '1')
- 정수 표본을 추출하여 배열을 반환

high가 지정되지 않을시 0부터 low 미만을 의미

normal(loc = 0.0, scale = 1.0, size = None)
- 정규 분포 확률 밀도에서 표본을 추출하여 배열로 변환
- 정규 분표의 평균(loc), 표준편차(scale)를 지정할 수 있음

샘플 100만 개로 히스토그램을 그린 결과

random(size = None)
- [0., 1.) 범위의 난수를 균등 분포에서 표본 추출하여 배열로 반환

0부터 1까지 고르게 분포되는 것을 확인할 수 있음


다음 강의 보기 :
https://ideaspread.tistory.com/7

 

[3주차 학습노트 - 인공뉴런 동작원리] 파이썬으로 배우는 기계학습 입문+

[학습노트]는 학습한 강의 내용을 정리해 둔 글입니다. 해당 글은 K-MOOC [파이썬으로 배우는 기계학습 입문 Plus+] 3주차 강의를 수강하며 정리한 내용입니다. 제 임의로 요약 및 정리를 한 글로 정

ideaspread.tistory.com

이전 강의 보기 :

[1주차 학습노트 - 기계학습과 개발환경] 파이썬으로 배우는 기계학습 입문+

 

[1주차 학습노트 - 기계학습과 개발환경] 파이썬으로 배우는 기계학습 입문+

[학습노트]는 학습한 강의 내용을 정리해 둔 글입니다. 해당 글은 K-MOOC [파이썬으로 배우는 기계학습 입문 Plus+] 1주차 강의를 수강하며 정리한 내용입니다. 제 임의로 요약 및 정리를 한 글로 정

ideaspread.tistory.com



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함