해당포스팅은 coursera의 andrew ng의 강의와 개인적으로 공부한 내용을 정리한 포스팅입니다. 문제가 될 경우 비공개 처리될수 있음 전반적인 내용(꼭 알아야할 내용)들을 정리해 놓았으며, 좀더 심층적인 내용은 개별적으로 포스팅 할 예정
0.기계학습
data를 이용해 데이터 특성과 패턴을 학습하여, 그 결과를 바탕으로 특정 데이터에 대한 미래 결과(값, 분포)를 예측
기본 개념
데이터 준비 : 데이터를 입력 데이터(feature)와 출력데이터(target)로 구분
모델 선택 및 학습 : 모델 = 데이터의 패턴을 학습하기 위한 알고리즘 -> 현실 세계에서 발생하는 일들을 수학적으로 계산.
학습 = 주어진 데이터를 사용해 모델의 파라미터(수학으로 치면 변수(기울기))를 조정.
모델을 학습하면 모델이 입력데이터와 출력데이터 사이 관계를 출력
모델 평가 : 미리 나누어둔 테스트 데이터로 성능 평가
예측 : 학습된 모델은 새로운 입력 데이터를 받아 해당하는 출력 데이터를 예측하거나 결정
유형
지도 학습(Supervised learning)
비지도 학습(Unsupervised learning)
준지도 학습(Semi-supervised Learning)
강화 학습(Reinforcement Learning)
0-1.기본적인 용어 정리
옵티마이저 : 비용 함수/손실함수 를 최소화하는 매개변수인 w,b를 찾기 위한 작업에 사용되는 알고리즘 -> 최적화 알고리즘 이라고도 한다.
가설 : x와y, 즉 입력값과 출력값의 관계를 유추하기 위해 세운 수학적인 식
상관 관계 : 두 변수가 선형 관계가 있는 범위를 표현하는 측도(1과 -1 사이 값을 가짐, 0에 가까울수록 선형 관계가 약해진다.)
하이퍼 파라미터
초매개변수라고 불린다
모델의 학습과정을 제어하고 조정하기 위해 사람이 직접 설정해야하는 매개변수 들을 말한다
값에 따라서 모델의 성능ㅔ 영향을 주는 매개변수
종류 : 학습률, 배치크기, 에포크수 은닉층과 뉴런의 개수
매개변수
모델이 학습되는 동안 업데이트 되는 값
모델은 초기에 랜덤하게 초기와된 매개변수를 데이터에 맞게 조정하면서 학습
종류 : 가중치 편향
가중치와 편향(weight & bias)
가중치
입력 데이터의 특성과 연결된 뉴런의 강도
입력 데이터가 출력 데이터에 미치는 중요도를 조절하는 매개변수
입력으로 들어온 데이터중 어떤 feature를 많이 반영하고 덜 반영할지 결정
활성화 함수에 따라 기울기 증가(기울기가 커질수록 모델에 영향을 더준다)
편향
뉴련의 활성화 조건을 결정하는 매개변수
모델이 데이터의 패턴을 더 정확하게 학습할 수 있도록 도와주는 상수 (일종의 보정값)
노드의 민감도를 조절해주는 역활
가중치와 편향이 헷갈린다면 y =Wx + b라는 단순 선형회귀 수식에서 W가 가중치 b가 편향이다.
활성화 함수
신경망의 output를 결정하는 식
타입 : 이진 함수, 선형 함수, 비선형 함수
과적합 / 과소적합
과적합
모델이 훈련데이터에 너무 많이 적합되어 새로운 데이터에 대한 성능이 저하되는 것
모델이 훈련데이터의 노이즈나 이상치까지 학습해 실제 데이터에서 예측 능력이 낮아지는 경우
과소 적합
모델이 훈련 데이터에 적합하지 않아 실제 데이터와도 일반화 되지 못한것
선형성 : 독립변수와 종속변수 사이에 선형 관계가 있어야 한다. 위에서 말했듯 직선을 맞춰야 한다는 것을 의미
통계학 용어
잔차의 독립성 : 잔차는 예측값과 실제값의 차이를 의미. 에러라고도 함
정규성 : 통계학에서 가설검증이 정규분포를 따른다는 성질을 전제하는 주요한 가정 중 하나
정규분포 : 대칭을 이루는 종모양의 분포
연속확률분포 : 확률 밀도 함수를 이용해 분포를 표현 할 수 있는 경우
확률 분포 : 확률 변수가 특정한값을 가질 확률
확률 밀도 함수 : 연속 확룰 변수를 나타내는 함수
정규성 검정 : 정규분포를 따르는 모집단에서 관측값들이 취해져 있는지 검정하는 것
등분산성 : 모든 확률변수가 같은 유한 분산을 가지는 성질을 가정 -> 모든 분산이 동일하다
독립성 : 다중 회귀분석에서 나오는 기본 가정. 독립변수 x 간에 상관관계가 없이 독립한 것을 의미
잔차의 자기 상관성, 독립변수와 잔차의 독립성, 예측값과 잔차간의 독립성
분산 : 확률 변수가 기대값으로 부터 얼마나 떨어진 곳에 분포하는지 가늠하는 숫자
확률변수 : 특정 확률로 발생하는 각각의 결과를 표현하는 변수
1. 손실함수/비용함수(loss function/Cost Function)
머신러닝 혹은 딥러닝 모델의 출력값과 사용자가 원하는 출력값의 오차
손실함수는 정답과 예측을 입력으로 하여 실수값의 점수를 만든다.
loss나 cost function이라고 하면 그냥 손실함수 또는 비용 함수라고 알아들으면 된다. 똑같은 말
점수가 높을수록 모델의 성능이 낮다
종류 : RMSE, MSE,Binary Crossentropy, Categroical Crossentropy등
보통 j(w,x)라고 한다.
y^=f(w,b)(x(i))
f(w,b)(x(i))=wx(i)+b
이때 질문은 에측값인 y^(i)가 모든 학습예제인 xi,yi에 대한 실제 목표 yi에 근접할 것인지를 구하는 것 -> w,b값을
1-1) MSE(Mean Squared Error)
예측한값과 실제값 사이의 평균 제곱오차로 정의
차가 커질수록 제곱의 연산으로 인해 값이 뚜렷해진다
하지만 제곱을 하기에 외곡이 발생할 수도 있다
수식
모델이 f(w,b)(x(i))=wx(i)+b라고 하고, mse라고 한다면
J(w,b) = 2n1i=0∑nf(w,b)(x(i)−y(i))2 (1/n을 1/2n로 해도됨 여기서는 편하게 2n이라고 한다)
선형회귀에서는 이것의 목표를 w,b값을 찾는 것을 수식으로 minimize(w,b)J(w,b) 라고한다
import pandas as pd
import numpy as np
import pandas as pd
import numpy as np
# 데이터프레임 생성
data ={'predicted':[2.5,3.0,4.2,5.1,6.2],'actual':[2.0,2.8,3.8,4.9,5.5]}
df = pd.DataFrame(data)# MSE 계산
mse = np.mean((df['predicted']- df['actual'])**2)
b = b−α∂w∂cost(w) =w−αm1i=0∑mf(w,b)(x(i)−y(i)) 여기서 α는 학습률
새로운파라미터 = 현재파라미터 - 학습률 *
->w₀-α x 기울기 = 학습률 x 기울기
* 학습률은 경사하강법에서 사용되는 파라미터로 파라미터를 업데이트 할떄 얼마나 크게 업데이트 할지 결정한다.
하지만 local minimum에 빠지기 쉬우며, 안장점을 벗어나지 못한다
-> 의미는 볼록함수 즉, 이러한 형태일 경우 최소점이 하나이기에 상관이 없지만 비볼록 형태(울퉁불퉁한 형태) 일 경우 한곳의 최저점에 도달하면 값을 최적화하지 못한다. (여기서 local minimum이란 한 지역의 최저점)
import numpy as np
## 코드 1# 학습 데이터 생성 (단순한 선형 모델 y = 2x + 3을 생성)
np.random.seed(42)
X =2* np.random.rand(100,1)
y =3+2* X + np.random.rand(100,1)# 경사 하강법 관련 설정
learning_rate =0.1
n_iterations =1000
m =len(X)
theta = np.random.randn(2,1)# 초기 파라미터# 경사 하강법 수행for iteration inrange(n_iterations):
gradients =2/m * X.T.dot(X.dot(theta)- y)# 기울기 계산
theta = theta - learning_rate * gradients # 파라미터 업데이트# 학습된 파라미터 출력print("학습된 파라미터:", theta)## 코드 2## x = 입력 데이터 y = 정답 데이터, w,b는 랜덤defRMSE(a, b):
mse =((a - b)**2).mean()# 두 값의 차이의 제곱의 평균
rmse = mse **0.5# MSE의 제곱근return rmse
defloss(x, w, b, y):
predictions = model(x, w, b)
L = RMSE(predictions, y)return L
defgradient(x, w, b, y):
dw =(loss(x, w +0.0001, b, y)- loss(x, w, b, y))/0.0001
db =(loss(x, w, b +0.0001, y)- loss(x, w, b, y))/0.0001return dw, db
LEARNING_RATE =1# 상수(학습률)for i inrange(1,2001):
dw, db = gradient(x, w, b, y)# 3, 4번: 모델이 prediction을 예측하고, 손실함수값을 계산함과 동시에 기울기 계산
w -= LEARNING_RATE * dw # 5번: w = w - η * dw 로 업데이트
b -= LEARNING_RATE * db # 5번: b = b - η * db 로 업데이트
L = loss(x, w, b, y)# 현재의 loss 값 계산
losses.append(L)# loss 값 기록if i %100==0:print('Iteration %d : Loss %0.4f'%(i, L))
요약 하자면
1. 데이터를 준비하고, 가중치와 편향을 랜덤으로 선택
2. 현재 w,b로 prediction(예측 결과)을 예측하고, 그를 통해 손실함수 계산
3. 손실함수 계산 값을 계산-> 기울기 계산 -> 계산된 기울기를 통해 w,b 업데이트 (2,3 반복)
4.지도학습
지도학습은 정답이 있는 데이터셋을 통해서 우리가 원하는 값을 찾아내려는 학습 방법
즉, 여러 특징(feature)들과 그에 맞는 정답(label)을 알려주고, 알고싶은 feature 조건에 대한 답을 예측하는것
x에서 y 또는 입력에서 출력 매핑을 학습하는 알고리즘
학습할 예제를 제공(올바른 답변을 추가하는 것을 의미 -> input에 대한 label을 제공)
보통 의사결정트리, 랜덤 포레스트 및 gradient boosting machine을 사용해 작동
지도학습은 regression과 classification으로 나뉜다.
4-1 회귀(Regression)
연속적인 값(그래프)을 label(답)로 두고 예측하는 것 -> 예측 결과값의 연속성이 있는 경우로 생각 할 수 있다
feature를 토대로 값을 예측하는 것
종속 변수가 수치형(float)
무한히 많은 가능한 숫자 중에서 숫자를 예측하는 방법
i) 선형 회귀(Linear Regression
알려진 다른 데이터 값을 사용해 알 수 없는 데이터의 값을 예측하는 데이터 분석 기법
종속 변수(알수 없는 변수)와 독립 변수(알려진 변수)를 선형 방정식으로 모델링
데이터를 직선에 맞추는 것을 의미
조건 : 선형성, 잔차 독립성, 잔차 정규성, 등분산성
주어진 입력 변수(또는 특성)와 가중치(weight)의 조합을 사용하여 종속 변수(예측값)를 예측하는 선형 모델을 찾는 것을 목적으로 한다.
단순 선형회귀와, 다중선형회귀로 나뉜다.
i-1) 단순 선형 회귀(simple Linear Regression)
univariate linear regression이라고도 한다.
수식 : f(w,b)=wx+b (여기서 f(w,b) 는 종속변수 = 예측값, x는 독립변수, w는 가중치, b는 편향)
i-2) 다중 선형 회귀(Multiple Linear Regression)
독립 변수가 여러개인 분석기법 -> 특성들이 여러개 즉, x가 여러개
표기할 용어들
x(j) : j번째 특성
n = 특성의 수
x(i) : i번째 학습 데이터의 모든 특성들(벡터라고 부른다)
multivariate Linear Regresstion(다변량 선형 회귀)이 아니다
수식 : fw,b(x)=w⋅x+b
여기서 w와 x는 행백터이다. 또한 ⋅은 선형대수적 내적을 의미한다.
import numpy as np
f = np.dot(w,x)+ b
4-2 분류(Classification)
주어진 데이터를 정해진 categry에 따라 분류하는 것
범주를 예측(범주는 반드시 숫자일 필요는 없다.)
숫자를 예측할 경우 회귀와 다르게 만드는 것은 분류는 작은 유한한 집합을 예측(중간의 값들은 예측 불가)
f(p)=logit(p) = log(odds) = log1−P(y=1∣x)P(y=1∣x) = w0+w1x1+... = WtX (행렬적으로 표현한것)을 역함수로 해석하였을떄 p = f−1(WTX) = p1−p = eWTX -> p에 대해서 정리를 하면 p=eWtX−peWtX 이것을 eWtX 묶고 p에 대해서 정리를 하면 p = 1+eWtXeWtX
p(y=1∣x) = 1+eWtXeWtX = 1+e−WtX1
따라서 선형회귀랑 sigmoid결합
시그모이드 함수는 y =1+e−x1인데 -x 부분에 WTX가 대입된 형태이기 때문
그래프
x에 대해서 y가 라벨이 1일 확률이 0~1 까지 숫자로 연결이 되는 것
로지스틱 회귀 모델은 로지스틱 함수 형태의 회귀 모델
위에 그래프에서 x축이 wtX로 바뀌어진것
p(y^=1∣x) = 1+e−WtX1
wX값에 따라 예측값이 달라진다
손실함수 정의
경사하강법을 사용하지만 그안에 L(즉, 로스 함수)에 대한 내용
베이즈 정리
p(w∣x)=p(x)p(w,x) -> 조건부 확률은 w가 x인 조건이 들어왔을때는 w,x가 둘다 존재할 확률/x일 확률이다 이따 p(w,x) = p(x)p(w∣x) 또한 w가 조건으로 들어왔을경우에는 p(w)p(w∣x)형태가 된다
p(w∣x)=P(x)p(X∣W)p(w)∝ P(X|w)P(w) 여기서 p(x)를 삭제 시킨이유는 x는 데이터로 주어지는 값이기 계산 할수 있는 값이어서 알던지 모르던지 중요하지 않다는 의미
사후확률 (p(w∣x)) : 데이터가 주어졌을때 가설에 대한 확률 분포 즉, 신뢰도
우도확룰 (p(X∣w)) : 가설을 잘 모르지만 안다고 가정했을 경우 주어진 데이터의 분포
모델의 파라미터 값을 모르지만 w로 표현했을 경우 주어진 데이터의 분포 -> 우도 확류은 w에 대한 함수로 데이터의 분포를 표현
i.i.d(독립적이면서 같은 분포를가진다)라고 가정하고, pdf의 곱으로 표현
w : μ (평균), σ (분산)
PDF : σ2π1e2−1(σxiμ)2
즉 우도 확률(likehood) = ∏i=1nσ2π1e2−1(σxiμ)2
사전 확률(p(w)) : 데이터를 보기전, 일반적으로 알고 있는 가설의 확률
이 확률 둘을 통해서 가설(파라미터)를 추정하는 방법으로 mle와 map 두가지가 있다
maximum likelihood estimation
현재의 데이터분포가 나올 확률이 가장 높은 파라미터는 우도 확률을 최대로 만드는 파라미터이기에 이것을 찾는것 방법론
w^=argmaxw(P(X∣w))
가장 간단한 파라미터 추정법이지만 데이터에 따라 값이 민감 (데이터가 많을수록 좋다)
maximum a posterior
데이터에 의존적인 MLE의 단점을 해결하기 위해 사용되는 방법론
주어진 데이터에 대해 최대 확률을 가지는 파라미터를 찾는 방법
w^=argmaxw(P(w∣X))
바론 계산은 불가능(우리가 해결해야할 과제가 x를 주고 최적의 파라미터 w를 구하는 것인데 x를 주고 w가 나올 확률을 구하는 것) 그래서 위에 우도확률과 사전확률의 곱으로 근사할 수 있다고한것
따라서 사전확률의 정확도에 따라 추정의 정확도가 달라진다
베르누이 분포
두가지 결과값만을 가지는 실험(베르누이 시행)에 따라 0또는 1의 값을 대응시키는 확률 변수를 베르누이 확률 변슈라칭하고 이것의 분포를 베르누이 분포라한다.
P(Y=yi)=pyi(1−P)1−yi (파라미터는 p하나이다)
L = ∏i=1nPyi(1−P)1−yi (여기서 L은 우도확률)
로지스틱회귀는 mle로 푼다
P(y^=1∣X) =1+e−x1 = σ(WTX) (여기서 σ는 시그모이드) -> 여기서 p값이 σ(WTX)을 베르누이 분포로 해석 가능 (즉,(WTX)가 0.7이면 y가 1일 확률이 0.7이기에 1이라고 판단한것 )
로지스틱 함수에서의 우도함수
L=∏iσ(WTXi)yi(1−σ(WTXi))1−yi (로지스틱 회귀는 이진분류이기에 베르누이분포와 연결해서 해석하고 표현한것 -> 어떤 값이 주어졌을때 σ(WTXi)yi는 y가 1일 확률 (1-\sigma(W^TX_i))^{1-y_i}$는 y가 0이었을때 값) 이것을 maximize하는 것이 목표
따라서 로그함수를 취하는데 log는 단조 증가이기에 ln L을 최대로 만드는 w는 동일 -> 편하게 하기위해서 ln값을 취해 지수함수를 내려서 계산
유익해요