파이썬&기계학습 입문 1

Joel Lee·2023년 5월 5일
0

AI & DS

목록 보기
1/14
post-thumbnail

Notes

본 글은 Kikagaku의 무료 강좌 파이썬&기계학습 입문의 강의 노트 중 첫 번째 노트입니다.
아래의 리스트는 해당 강좌의 커리큘럼이며, 본 노트는 "1. 도입"부터 "7. 단회귀분석 구현"까지의 내용을 간단하게 정리한 글입니다.

Curriculum (401/548)
1. 도입 (42 min)
2. 미분 (49 min)
3. 선형대수 (55 min)
4. 단회귀분석 (52 min)
5. 중회귀분석 (56 min)
6. Python 속성 강의 (101 min)
7. 단회귀분석 구현 (51 min)


  1. 중회귀분석 구현 (27 min)
  2. 연습문제 (52 min)
  3. 통계 (32 min)
  4. 중회귀분석 2 (31min)

Intro

인공지능・기계학습・딥러닝이란?

  • 인공지능 (AI) ⊃ 기계학습 ⊃ 딥러닝

기계학습에 필요한 수학

  • 미적분, 선형대수, 확률통계
  • 처음부터 이 세 수학을 전부 공부하는 건 힘들다.
  • 처음은 미분과 선형대수로 시작하고, 베이즈 통계를 공부하는 단계부턴 적분과 확통.

기계학습의 3 대 토픽

  • 교사 학습: 입력 x 와 출력 y 일반적인 비즈니스 현장에 쓰임
    • 회귀: " 수치 " 예측
    • 평수와 월세와의 관계

분류: " 카테고리 " 예측

  • 백포도주 or 적포도주
  • 비교사 학습: 입력 x만 존재
    - 클러스터링: 눈대중으로 덩어리를 구분하는 느낌. 정확한 분류, 출력 y 가 존재하지 않음.
    - 차원축소: 입력 변수 (차원) 을 줄임. 수학적으로 변수가 많으면 모델이 잘 움직이지 않는 경우가 있음.
  • 강화 학습 데이터가 아예 없거나 거의 없음
    - 청소 로봇: 첫 기동 시는 방의 구조를 모르지만, 점점 방의 구조를 파악해감
    - 알파고: 스스로 기보를 만들어서 학습.

간단한 기계학습과 내삽・외삽

입력데이터 1데이터 2예측 1데이터 3예측 2
x12345
y246810
내삽외삽
  • 사람은 y=2xy=2x 를 예측하기 쉽지만, 컴퓨터는 예측하기 어려움
  • 기계학습에선 데이터 범위 내, 즉, 내삽은 보장하지만, 외삽은 보장하지 않음.
    • 그렇다면 미래의 값을 예측하는 주식 예측은 어떠한가?
    • 시계열을 기준으로 두면 범위 밖을 예측하지만, 가격을 기준으로 두면 범위를 어느 정도 정할 수 있음.
    • 하지만 범위를 벗어나는 가격에 대해선 외삽이 되므로 모델을 새로 만들어야 함.

미분

미분은 어디에 쓰이는가

  • 미분으로 접선의 기울기를 구할 수 있다.
  • 접선의 기울기=0를 이용하는 것으로 어떤 함수가 최소 (혹은 최대) 가 되는 점을 구할 수 있다.

미분 (도함수) 1, 미분 (도함수) 2, 미분의 공식, 편미분

도함수나 공식, 편미분은 다 아는 거니 패스하고 쓰임새만 요약


선형대수

스칼라・벡터・행렬

  • 스칼라 → 벡터 → 행렬 → 텐서 (행렬의 집합)

행렬의 연산, 연습문제

간단한 더하기, 빼기, 내적

사이즈감

  • xTyx^T y = 스칼라, XyXy = 벡터, xTAyx^TAy = 스칼라
  • 앞으로 나올 수식의 사이즈감을 익히기 위한 간단한 설명.

전치, 단위행렬, 역행렬

역시 쉬우니 패스

벡터로 미분

x(C)=0x(bTx)=bx(xTAx)=(A+AT)x\frac{\partial}{\partial x}(C) = \mathbf{0} \\ \frac{\partial}{\partial x}(b^{T}x) = b \\ \frac{\partial}{\partial x}(x^{T}Ax) =(A+A^{T})x

단회귀분석

입력 변수가 하나. 여러 개를 이용할 경우 중회귀분석.

문제 설정: 월세 예측

  1. 학습: 넓이 - 월세 데이터셋으로 모델을 학습
  2. 추론: 학습된 모델에 새로운 넓이 xx 를 넣어, 월세 예측값 y^\hat{y} 을 추론

Step1: 모델을 정하자

  • 모델을 고르는 건 사람이 할 일
  • 목표: 데이터셋에 기반해 적절한 파라미터를 결정하자.
  • 데이터의 중심화 (Centering): 구해야 할 파라미터가 적어짐.

Step2: 평가함수를 정하자

  • 적절을 정하자 → 평가함수 (손실함수) L\mathcal{L} 을 정하자
  • MSE(Mean Squared Error)
MSE=1Ni=1N(yiy^i)2=(yy^)T(yy^)MSE = \frac{1}{N}\sum_{i=1}^{N}(y_i - \hat{y}_{i})^{2}\\ = (y-\hat{y})^{T}(y-\hat{y})
  • RMSE(Root Mean Squared Error)
RMSE=1Ni=1N(yiy^i)2RMSE = \sqrt{\frac{1}{N}\sum_{i=1}^{N}(y_i - \hat{y}_i)^2}
  • MAE(Mean Absolute Error)
MAE=1Ni=1Nyiy^iMAE = \frac{1}{N}\sum_{i=1}^{N}\left|y_i - \hat{y}_i\right|
  • (비밀) Latex 문법 스스로 쓰는 게 귀찮아서 ChatGPT 한테 맡겼더니 훌륭한 결과물이 나왔다!

Step3: 평가함수를 최소화하자

aT(L)=0\frac{\partial}{\partial a^{T}} (\mathcal{L}) = 0
  • Step3-1: 식변형, yi^=axi\hat{y_{i}}= ax_{i} 를 평가 함수에 대입
  • Step3-2: 최적인 파라미터 aa 를 구한다.

중회귀분석 1

Step1: 모델을 정하자

y^=ω1x1+ω2x2++ωMxM+b=ω0x0+ω1x1++ωMxM(b=ω0x0)=[ω0ω1ωM][x0x1xM]=ωTx=[x0x1xM][ω0ω1ωM]=xTω=Xω\hat{y} = \omega_{1}x_{1} + \omega_{2}x_{2} + \cdots + \omega_{M}x_{M} + b\\ = \omega_{0}x_{0} + \omega_{1}x_{1} + \cdots + \omega_{M}x_{M} \quad (b=\omega_{0}x_{0}) \\ = \begin{bmatrix} \omega_{0} & \omega_{1} & \cdots & \omega_{M} \end{bmatrix} \begin{bmatrix} x_{0} \\ x_{1} \\ \vdots \\ x_{M} \end{bmatrix} = \omega^{T}x \\ =\begin{bmatrix} x_{0} & x_{1} & \cdots & x_{M} \end{bmatrix} \begin{bmatrix} \omega_{0} \\ \omega_{1} \\ \vdots \\ \omega_{M} \end{bmatrix} = x^{T}\omega = X\omega

Step2: 평가함수를 정하자

  • 파라미터는 ω\omegabb: M+1M+1
  • 평가함수는 단회귀 분석과 동일.
L=(yy^)T(yy^)\mathcal{L} = (y-\hat{y})^{T}(y-\hat{y})

Step3: 평가함수를 최소화하자

  • Step3-1: 식변형, y^=Xω\hat{y}= X\omega 를 평가 함수에 대입
L=yTy2yTXω+ωTXTXω=C+bTω+ωTAω(스칼라  C=yTy,  b=2XTy,  A=XTX)\mathcal{L} = y^{T}y - 2y^{T}X\omega + \omega^{T}X^{T}X\omega \\ = C + b^{T}\omega + \omega^{T}A\omega \quad (\text{스칼라}\; C=y^{T}y,\; b=-2X^{T}y,\; A=X^{T}X )
  • Step3-2: 최적인 파라미터를 구하자
ω(L)=0=b+(A+AT)ω=2XTy+2XTXω\frac{\partial}{\partial\omega} (\mathcal{L}) = \mathbf{0} \\ = b + (A+A^{T})\omega \\ = -2X^{T}y + 2X^{T}X\omega
XTXω=XTyω=(XTX)1XTyX^{T}X\omega = X^{T}y \\ \omega = (X^{T}X)^{-1}X^{T}y
  • 굳이 ω=X1y\omega = X^{-1}y 로 안 쓰는 이유는 XX 가 정방행렬이 아닐 수도 있기 때문에. 역행렬의 필요 조건이 정방행렬.
    * 엄밀하게 말하면 정방행렬이어도 역행렬이 존재하지 않을 수도 있음.

파이썬 속성 강좌

환경구축

  • 파일 업로드 시 주의사항
    - 런타임이 12 시간을 넘어 종료되면 재연결 후 재업이 필요.
    - 런타임 유형을 바꿀 경우에도 재연결이 되므로 재업이 필요.

변수

  • 수치: int, float
  • 문자열: str, 덧셈 가능
  • 리스트 [ ]
    - .append()
  • 터플 ( ): 요소 변경 불가능
  • 사전 {key : value }
    - 사전 요소 추가: results[key] = value
  • Bull

기본 구문

  • 비교연산자
  • Escape sequence: \n (newline), \t (tab)

제어 구문

  • for 문 (반복)
    - range(), len()
    - zip(a, b): 각각에서 요소를 하나 씩 꺼내옴.
numbers = [1,2,3]
animals = ['dog', 'cat', 'bird']
for number, animal in zip(numbers, animals):
	print(number)
	print(animal)
  • if 문 (조건분기)

함수

  • { }와 .format( )
def say_hello(name):
	print("안녕하세요. {}입니다.".format(name))
  • f 와 { }
def say_hello(name):
	print(f"안녕하세요. {name}입니다.")
  • 디폴트 값 설정
def calc(a=2, b=3):
	return a + b

calc()
calc(3)
calc(b=4)

클래스 기초

  • init 함수: 초기화
  • call 함수: 인스턴스에 대해 인수를 넣는 것으로 실행 가능.
class Person:
	
	# 초기화
	def __init__(self, name, nationality, age):
	    self.name = name
	    self.nationality = nationality
	    self.age = age
	# 함수
	def say_hello(self, name):
		print(f'안녕하세요, {name} 씨. 저는 {self.name}입니다')

단회귀분석 구현

  • 단회귀분석의 기울기를 구하는 식
    a=n=1Nxnynn=1Nxn2=xyx2a = \frac{\displaystyle\sum_{n=1}^{N} x_{n}y_{n}}{\displaystyle\sum_{n=1}^{N} x_{n}^{2}} = \frac{xy}{|x|^{2}}
  • 사용하는 샘플의 데이터
xy
12
23.9
36.1

NumPy 속성 강좌

  • 벡터: np.array( [[ ]] )
    - 전치시킬 때 쓰기 편하게 대괄호를 2중으로.
  • 평균 .mean()
  • 데이터 중심화
  • aa의 산출
    - 요소곱과 합계 .sum()

Pandas / Matplotlib 속성 강좌

Pandas

import pandas as pd
# df = dataframe
df = pd.read_csv('/content/drive/MyDrive/1. Projects/Kikagaku/1. Python&機械学習入門/sample.csv')
df.head(3) # 선두부터 ~행 표시
df.tail(3) # 뒤부터 ~행 표시
df[2:10] # 리스트랑 동일
df.iloc[1,1] # .iloc[행, 열] 행과 열으로 잘라서 표시
# column명을 지정해서 취득
x = df['x']
y = df['y']

Matplotlib

import matplotlib.pyplot as plt

fig = plt.figure(figsize = (10,8))
ax = fig.add_subplot(1,1,1)

ax.scatter(x,y, c='red');

ax.set_title('first scatter')

ax.set_xlabel('x')
ax.set_ylabel('y')

Numpy 구현

df.describe() # 각종 계산값 표현
df.mean() # 평균
plt.legend() # 범레 표시

예측

y  y^ = a(xx^)  y = a(xx^) + y^y - \hat{y} = a(x-\hat{x}) \\ \rightarrow y = a(x-\hat{x}) + \hat{y}
profile
개발자 전직을 향해 나아가고 있는 Technical Sales Engineer

0개의 댓글