예측 값 구하기
def predict(alpha, beta, x_i):
return beta * x_i + alpha
알파와 베타에 대한 오류 계산
def error(alpha, beta, x_i, y_i):
return y_i - predict(alpha, beta, x_i)
SSE
def sum_of_squared_errors(alpha, beta, x, y):
return sum(error(alpha, beta, x_i, y_i) ** 2
for x_i, y_i in zip(x, y))
최소자승법
def least_squares_fit(x,y):
"""x와 y가 학습 데이터로 주어졌을 때
오류의 제곱 값을 최소화해 주는 알파와 베타를 계산"""
beta = correlation(x, y) * standard_deviation(y) / standard_deviation(x)
alpha = mean(y) - beta * mean(x)
return alpha, beta
총변동
def total_sum_of_squares(y):
"""평균을 기준으로 v_i의 변화량을 제곱한 값의 총합"""
return sum(v ** 2 for v in de_mean(y))
결정계수
def r_squared(alpha, beta, x, y):
"""모델이 잡아낼 수 있는 변화량의 비율은
1 - 모델이 잡아내지 못하는 변화량의 비율로 계산할 수 있다"""
return 1.0 - (sum_of_squared_errors(alpha, beta, x, y) /
total_sum_of_squares(y))
경사하강법
def squared_error(x_i, y_i, theta):
alpha, beta = theta
return error(alpha, beta, x_i, y_i) ** 2
def squared_error_gradient(x_i, y_i, theta):
alpha, beta = theta
return [-2 * error(alpha, beta, x_i, y_i), # 알파에 대한 편미분
-2 * error(alpha, beta, x_i, y_i) * x_i] # 베타에 대한 편미분
random.seed(0)
theta = [random.random(), random.random()
alpha, beta = minimize_stochastic(squared_error,
squared_error_gradient,
num_friends_good,
daily_minutes_good,
theta,
0.0001)
print("alpha", alpha)
print("beta", beta)
댓글