티스토리 뷰
[학습노트]는 학습한 강의 내용을 정리해 둔 글입니다.
해당 글은 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조개가 됨
뉴론 연산자
- 임계값(스레쉬홀드) : 입력에 대한 출력을 즉시 반환하는 것이 아닌 임계값에 도달될 때까지 입력을 축척
- 입력은 다수, 출력은 하나
- 입력의 합산 : 여러 뉴론에서 온 값들은 모두 합산되는데, 합산 값이 스레쉬홀드 이상이어야 출력이 됨
- 신경망 구성 : 여러 뉴론이 서로 연결되어 있어 복잡한 작업이 가능
[뉴론과 신경망]
생물학적 뉴론 모델링
시냅스 : 뉴론과 뉴론을 연결, 신호의 강약이 조절됨
수상돌기 : 입력을 받음
축색돌기 : 입력을 출력
인공뉴론 모델링
생물학적 뉴론과 신경망에서 영감을 받아 여러 입력을 받아 연산한 후 출력하는 함수로 모델링
- 스탠퍼드 앤드류 응 교수와 구글 과학자들이 합동 제작 (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부터 시작
-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) 값으로 된 배열을 사용하기도 함
[배열/행렬의 곱]
- 두 열 백터 x, y 가 크기 m으로 같을 때
내적 : x^T y - 스칼라
외적 : x y^T - m * m 행렬
2-3. 넘파이 튜토리얼 - 브로드캐스팅
[브로드캐스팅]
크기가 다른 두 배열의 덧셈이 불가하지만
브로드캐스팅을 사용하여 가능하게 만들 수 있다.
브로드캐스팅 : "널리 전하다", "퍼트리다"
넘파이 브로드캐스팅 : 형상이 다른 배열 간의 덧셈과 뺄셈을 가능하도록 하는 것
브로드캐스팅 결과
[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로 축을 지정
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')
- 정수 표본을 추출하여 배열을 반환
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
'학습노트 > 인공지능' 카테고리의 다른 글
[3주차 학습노트 - 인공뉴런 동작원리] 파이썬으로 배우는 기계학습 입문+ (0) | 2023.02.21 |
---|---|
[1주차 학습노트 - 기계학습과 개발환경] 파이썬으로 배우는 기계학습 입문+ (0) | 2023.02.10 |
- Total
- Today
- Yesterday
- 언리얼
- 기계학습
- 세팅
- VRchat
- 정보와 지식
- VRChat경로설정
- 브이알쳇
- 유니티
- UE4
- latex
- KMOOC
- 언리얼엔진5
- 언리얼 배우기
- 수식
- 맵 제작
- 학습노트
- 머신러닝
- 인공지능
- VCC
- unity
- 아나콘다
- 파이썬
- UE5
- vrchat creator companion
- 주피터 노트북
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |