티스토리 뷰

  • 선형회귀란? (linear regression)

    • "데이터를 반복적으로 관찰하면 어떤 패턴으로 회귀한다"는 것을 의미한다. 선형 회귀는 이 패턴이 직선의 모습을 하고 있는데 'y = wx + b'라는 1차 방정식으로 표현된다. 예를 들어, 거리에 따른 택시요금 데이터가 있을때 이를 사용하여 방정식의 w와 b값을 구한다. 그러면 새로운 거리인 x가 주어졌을때 택시요금 y를 추정할 수 있다.

    • 방법

      • 최소제곱법:

        • 유명한 수학자인 가우스가 1795년 발견하였는데 특정 공식을 사용하여 w와 b를 계산한다.
        • 가능한 모든 가중치의 조합을 계산하는 방식은 데이터의 크기가 방대할 경우, 연산 속도가 너무 느려지기 때문에 현실적으로 구현하기에는 어렵다. 하지만 error surface에서 global minimum이 존재한다는 사실을 기반으로 효율성을 높이기 위해 경사하강법 (gradient descent)를 사용한다.
      • 경사하강법 (gradient descent):

        • 예측값이 y'고 실제값이 y라면 오차인 (y' - y)^2을 더하여 비용함수(cost function)를 만든다. 이는 w와 b의 2차 함수의 U자 모양 그래프로 나타낼 수 있는데 각각을 편미분 하여 기울기를 구하면 파라미터가 어느 방향으로 이동해야 오차를 줄일 수 있는지 알 수 있다.
        • MSE (mean squared error)
    • 선형회귀를 적용하여 할 수 있는 것

      • 추세 분석
        추세선은 데이터를 시간 축으로 놓고 봤을 때, 데이터의 값이 장기적으로 어떻게 변하는지 직선으로 표현한 것이다. 추세선은 특정 데이터 집합(GDP, 원유 가격 또는 주식 가격 등)에서 값이 증가세에 있는지 감소세에 있는지 보여준다. 이러한 데이터의 추세는 데이터를 눈으로 확인하는 것만으로도 추정 가능하지만, 더 정확하게는 선형 회귀를 사용해 추세선을 그릴 수 있다. 추세선은 일반적으로 직선이며, 경우에 따라 더 높은 차수의 곡선을 사용하기도 한다. 때로는 경영 분석에서 시간에 따른 데이터 변화를 보고자 추세선을 사용하기도 한다. 추세선을 사용하면 특정 사건이 값에 미치는 영향을 매우 간단하게 확인할 수 있다. 추세선을 그리는 것은 대조군이 필요하지도 않고, 실험 설계가 필요하지도 않으며 간단하다는 장점이 있다. 하지만 과학적인 검증이 부족해, 예상한 것 이외의 요인이 잠재적으로 데이터에 미치는 영향은 놓칠 수 있다.
      • 역학 조사
        흡연률과 사망률, 유병률을 연관이 있다는 증거는 회귀 분석을 적용한 관찰 연구에서 확인되었다. 관찰한 데이터에서 확신할 수 없는 상관 관계를 제거하기 위해, 연구자들은 일반적으로 실제로 관심있는 변수 외에도 여러 개의 변수를 삽입해 회귀 분석 모델을 수립한다. 예를 들어, 흡연률과 수명의 상관관계를 보고싶다고 하자. 연구자들은 실제로 관심있는 독립 변수인 흡연률 외에도 사회경제적 조건 등을 독립 변수에 추가적로 삽입해, 사회경제적 조건이 수명과 연관이 있는지 확인하곤 한다. 하지만 모든 가능한 변수를 추가할 수는 없으므로, 랜덤 통제 실험을 통해 상관관계를 조사하기도 한다.
      • 재무 관리
        자본자산 가격결정 모형에서 체계적 위험을 베타에 대한 선형 회귀로 표현한다.
      • 경제학
        선형 회귀는 경제학에서 경험적인 데이터를 통해 미래를 예측하고자 할 때 주로 사용된다. 비용 예측, 고정 투자 예측, 재고 관리 예측, 필요 유동 자산 예측, 노동 수요 예측, 노동 공급 예측 등에 선형 회귀를 사용할 수 있다.
      • 환경 과학
        선형 회귀는 환경 과학에도 적용할 수 있다. 캐나다의 환경 영향 모니터링 프로그램에서는 제지 공장과 광산이 수질에 미는 영향을 조사하기 위해 물고기와 수질에 대해 선형 회귀를 사용하기도 했다.
    • 텐서플로우

      • 구글
      • 활발한 커뮤니티
      • 데이터 시각화
      • 높은 추상화 레벨
      • 다양한 언어 지원
    • 코드

# X 와 Y 의 상관관계를 분석하는 기초적인 선형 회귀 모델을 만들고 실행해봅니다.
import numpy as np
import tensorflow as tf

# tensorflow logic
# --------------------------------------------------------------
x_data = [1, 2, 3]
y_data = [1, 2, 3]

W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.random_uniform([1], -1.0, 1.0))

# name: 나중에 텐서보드등으로 값의 변화를 추적하거나 살펴보기 쉽게 하기 위해 이름을 붙여줍니다.
X = tf.placeholder(tf.float32, name="X")
Y = tf.placeholder(tf.float32, name="Y")
print(X)
print(Y)

# X 와 Y 의 상관 관계를 분석하기 위한 가설 수식을 작성합니다.
# y = W * x + b
# W 와 X 가 행렬이 아니므로 tf.matmul 이 아니라 기본 곱셈 기호를 사용했습니다.
hypothesis = W * X + b

# 손실 함수를 작성합니다.
# mean(h - Y)^2 : 예측값과 실제값의 거리를 비용(손실) 함수로 정합니다.
cost = tf.reduce_mean(tf.square(hypothesis - Y))
# 텐서플로우에 기본적으로 포함되어 있는 함수를 이용해 경사 하강법 최적화를 수행합니다.
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1)
# 비용을 최소화 하는 것이 최종 목표
train_op = optimizer.minimize(cost)

# 세션을 생성하고 초기화합니다.
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

    # 최적화를 100번 수행합니다.
    for step in range(100):
        # sess.run 을 통해 train_op 와 cost 그래프를 계산합니다.
        # 이 때, 가설 수식에 넣어야 할 실제값을 feed_dict 을 통해 전달합니다.
        _, cost_val = sess.run([train_op, cost], feed_dict={X: x_data, Y: y_data})

        print(step, cost_val, sess.run(W), sess.run(b))

    # 최적화가 완료된 모델에 테스트 값을 넣고 결과가 잘 나오는지 확인해봅니다.
    print("\n=== Test ===")
    print("X: 5, Y:", sess.run(hypothesis, feed_dict={X: 5}))
    print("X: 2.5, Y:", sess.run(hypothesis, feed_dict={X: 2.5}))

  • 용어정리
    • 목적 함수 (target function): 예측 모델링에서는 전형적으로 특정 프로세스를 모델링하게 된다. 즉 어떤 알려지지 않은 함수를 학습 또는 근사하는 것이다. 목적 함수 f(x) = y 는 우리가 모델링 하려고 하는 진짜 함수 f(·) 이다.
    • 가설 (hypothesis): 가설은 우리가 모델링하려는 타깃 함수, 즉 진짜 함수와 비슷할거라 가정하는 함수이다. 스팸 분류에서라면 스팸 이메일을 구분하는 분류 규칙이 된다.
    • 모델 (model): 머신 러닝 분야에서는 가설과 모델이 종종 혼용되어 사용된다. 다른 과학 분야에서는 이 둘이 다른 의미를 가지기도 한다. 가설은 과학자에 의해 성립된 추측이고 모델은 이 가설을 테스트하기 위한 추측의 구현체이다.
    • 학습 알고리즘 (algorithm): 우리의 목표는 목적 함수를 찾거나 근사하는 것이고, 학습 알고리즘은 훈련 데이터셋을 사용해 목적 함수를 모델링하려는 일련의 명령 집합이다. 학습 알고리즘은 가설 공간을 동반하며 미지의 목적 함수를 모델링하기 위해 가능한 가설들을 탐색하여 최종 가설을 만든다.
    • 분류기 (classifier): 분류기는 가설의 (요즘엔 종종 머신 러닝 알고리즘으로 학습된) 특별한 경우이다. 하나의 개개의 데이터 포인트에 (범주형) 클래스 레이블을 지정하는 가설 또는 이산값discrete value을 출력하는 함수이다. 이메일 분류의 경우 스팸 또는 스팸이 아닌 것으로 이메일을 분류하기 위한 하나의 가설이 분류기가 될 수 있다. 그러나 가설이 분류기와 동의로 사용되어서는 안된다. 다른 애플리케이션의 경우엔 가설이 학생의 학습시간과 교육 이력을 (연속형이므로 회귀에 적합한) 앞으로 받을 SAT 점수와 매핑하는 하나의 함수일 수 있다.
    • 하이퍼파라미터 (hyper parameter): 하이퍼파라미터는 머신 러닝 알고리즘의 튜닝 파라미터이다. 예를 들면, 회귀 분석의 평균 제곱 오차mean squared error 비용 함수cost function에서 L2 페널티penalty의 규제regularization 강도나 결정 트리의 최대 깊이 설정 값이다. 반대로 모델 파라미터는 학습 알고리즘이 훈련 데이터에서 학습하는 파라미터이다. 즉 모델 자체가 가지고 있는 파라미터이다. 예를 들어 선형 회귀의 가중치 계수coefficient(또는 기울기)와 편향3(또는 y 축의 절편)이 모델 파라미터이다.

'Programming > Machine Learning' 카테고리의 다른 글

[Scikit-Learn] Cross-validation  (0) 2019.07.07
[Scikit-Learn] Preprocessing  (0) 2019.07.07
[Scikit-Learn] 환경 설정  (0) 2019.07.07
텐서플로우 Docker 설치  (0) 2019.05.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함