728x90

결국 머신러닝에서 기본이 되는 것은 '선형회귀' 와 '로지스틱회귀'. (물론 이 외에 다른 기본기가 여러개 있긴함)
무언가를 예측하기 위한 방정식을 풀어나가는 과정이기 때문에 그 방정식을 다양한 관점에서 풀 수 있는 방법을 단순 선형회귀에서부터 로지스틱회귀까지 딥러닝 기법을 사용해가면 될 것 같다.
문과 석사 쓸모없는 줄 알았는데, 그래도 통계 열심히 배워두길 잘한 듯 ... 과거의 나야 잘햇다 ...
#2. 예측 모델의 기본 원리 - 4. 가장 훌륭한 예측선
딥러닝을 포함한 머신러닝의 예측은 결국 기존 데이터(정보)를 가지고 어떤 선이 그려질 지 예측한 후, 아직 답이 나오지 않은 그 무언가를 그 선에 대입해 보는 것.
[최소 제곱법]
- 주어진 데이터를 가장 잘 설명할 수 있는 가장 정확한 선을 구하기 위한 방법 중 하나 (ax+b 에서 a,b를 구하는 것)
- a = {(x편차)*(y편차)의 합} / (x편차)**2
- b = y의 평균 - (x의 평균 * 기울기 a)
→ 해당 데이터를 가장 잘 설명하는 선을 그릴 수 있게 됨
파이썬에서 최소제곱법
##데이터 만들기 # x는 공부한 시간, y는 시험점수를 의미
import numpy as np
x = np.array([2,4,6,8])
y = np.array([81,93,91,97])
#각 원소의 평균값 구하기
mx = np.mean(x)
my = np.mean(y)
#최소제곱근의 분모 만들기
divisor = sum([(i - mx)**2 for i in x])
#최소제곱근의 분자 만들기. 편차 곱의 합(시그마)를 위해 반복문 사용
def top(x,mx,y,my) :
d = 0
for i in range(len(x)):
d += (x[i] - mx) * (y[i] - my)
return d
dividend = top(x,mx,y,my)
# a 기울기 구하기
a = dividend / divisor
b = my - (mx*a)
print(a,b)
→ 2.3 79.0 |
[평균제곱오차]
- 최소제곱법의 한계
- x가 한개일 때엔 단순하지만, 여러개가 되면 처리하는 것에 무리가 있음
- 대안
- 일단 예측선을 그리고 조금씩 수정해 나가자
- 나중에 그린 선이 먼저 그린 선 보다 정말 나은지 선의 오차를 계산하고 오차를 작은 쪽으로 바꿔야 함
- 평균제곱오차 (MSE)
- 주어진 선의 오차(관측한 데이터값 - 예측값)를 평가하는 방법
- 각 오차를 제곱(음수 제거)한 후 합한 것을 관측값의 개수 n으로 나눈 것
- 더 작은 평균제곱오차를 가진 직선을 찾아나가면 됨
평균제곱오차 파이썬으로 구하기 #평균제곱오차 만드는 식
n = len(x)
def mse(y, y_pred):
return (1/n) * sum((y-y_pred)**2)
print("평균제곱오차 : " + str(mse(y,predict_result)))
predict_result = []
#예측값 넣어주기
for i in range((len(x))) :
predict_result.append(predict(x[i]))
#print("공부시간 =%.f, 실제점수 =$.f, 예측점수 =%.f" %(x[i], y[i], predict(x[i]))) >> 수식엔 문제 없으나 에러가 계속 남
#평균제곱오차 만드는 식
n = len(x)
def mse(y, y_pred):
return (1/n) * sum((y-y_pred)**2)
print("평균제곱오차 : " + str(mse(y,predict_result)))
|
'👩💻LEARN : ML&Data > Book Study' 카테고리의 다른 글
[모두의 딥러닝] #2-6. 로지스틱 회귀 모델 (0) | 2023.02.11 |
---|---|
[모두의 딥러닝] #2-5. 선형회귀모델 : 먼저 긋고 수정하기 (0) | 2023.02.10 |
[모두의 딥러닝] #1-3. 딥러닝을 위한 기초 수학 (0) | 2023.02.09 |
[머신러닝을 위한 수학 with 파이썬, R] #7. 선형 회귀 분석과 모형 확장 (0) | 2023.02.03 |
[머신러닝을 위한 수학 with 파이썬, R] #6. 상관분석과 분산분석 (0) | 2023.02.03 |