본문 바로가기
Python/데이터 분석

단순 회귀 분석

by 지식광부키우기 2019. 9. 2.

예측 값 구하기 

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)

'Python > 데이터 분석' 카테고리의 다른 글

(2) 차원 축소  (0) 2019.08.26
(1) 척도 조절  (0) 2019.08.22

댓글