ML_AI/Inflearn 머신러닝 이론 및 파이썬 실습

4. Linear regression, 선형 회귀

안정민 2024. 2. 8. 13:54

1. 선형 회귀

 

- 수퍼바이저 머신 러닝의 두 가지 기법

(1) Classification : 분류기에 먼저 미리 트레이닝을 시킴, 이후에 테스트 데이터를 입력 시, 학습이 된 클래스 (red, green, blue)로만 대답을 하게 되는 머신러닝 방법

(2) Regression : 선형 (직선) 회귀 -> 일차함수 개념, y=ax+b와 같은 일차 함수적인 접근을 통해 인풋에 대한 아웃풋의 예측값을 반환하는 머신러닝 방법

-모든 점들이 선상에 있기 때문에 왼쪽이 더 나은 모델이라고 할 수 있음

-오른쪽 값에서 선 밖으로 벗어난 점들의, 직선으로의 정사영을 에러라고 함 (e)

-에러란, 실제 데이터와 선상의 데이터 사이의 거리, 수직거리는 아니고 정사영 거리를 에러라고 함

-즉, 왼쪽은 에러가 없는 모델, 오른쪽은 에러가 존재하는 모델이라고 할 수 있음

-에러에 대한 개념을 일차적인 선이 아니라, 넓이로 보자는 취지에서 고안된 square error

-넓이로 보는 이유 : 가시성이 좋고, 작은 에러도 값을 증폭시킴으로써 큰 에러와 작은 에러의 값을 쉽게 비교할 수 있게 해 주며, gradiant decent 에서 제곱의 값이 있으면 계산이 매우 편리해진다는 장점이 있기 때문이다

-Maximum Likelihood : 최대 발생할 가능성이 높은 쪽으로 선을 그려야 하는 것이 선형 회귀의 베스트 케이스가 된다

 

 

-그렇다면 역의 관점으로, 여러 개의 점이 주어졌을 때 어떻게 최적의 직선해를 구할 수 있을지 이에 대해 코딩으로 접근 !

-Least Mean Square(LMS) Error의 개념을 활용해 컴퓨팅을 할 것!

 

-에러는 일차함수 식과 실제 점 사이의 거리, 스퀘어에러는 에러의 제곱값,

-Mean Square Error란 그 스퀘어 에러의 값을 평균 낸 값을 의미한다

 

**Cost function : 비용함수, 여기서는 mean square error가 비용함수가 된다, 실제 값과 가설값 간의 차이

**우리의 목표는 위의 케이스에서 비용함수의 값을 가장 최저로 만드는 것이다 -> Objected Function, 목표함수

 

** 머신러닝에서는 파라미터의 값을 세타(θ)로 표현 (y=ax 대신 y=θx 로 표현)

 

-우리가 할 일은, 가장 알맞는 세타 값을 찾는 일

-Gradient Decent : 첫 번째 세타값고 지정된 러닝레이트(학습률) 를 조정

**학습률 (Learning rate)
학습률(learning rate)은 인공 신경망 모델이 학습을 진행할 때 각각의 가중치(weight)를 얼마나 업데이트할지 결정하는 하이퍼파라미터
학습률은 매개변수 업데이트 시의 크기를 조절하여 모델이 적절한 방향으로 수렴할 수 있도록 도와줍니다.
딥 러닝에서 모델은 입력 데이터를 통해 예측을 수행하고, 예측 결과와 실제 결과 사이의 오차를 계산합니다. 이 오차를 최소화하기 위해 학습 알고리즘은 가중치를 업데이트합니다. 학습률은 이 가중치 업데이트의 크기를 결정하는 요소입니다.
학습률을 조절함으로써 가중치 업데이트의 정도를 조절할 수 있습니다. 작은 학습률은 안정적으로 모델을 수렴시킬 수 있지만, 수렴까지 오랜 시간이 걸릴 수 있습니다. 반대로 큰 학습률은 빠르게 수렴할 수 있지만, 최적값을 지나치거나 발산할 가능성이 있습니다. 따라서 적절한 학습률을 선택해야 합니다.

 

 

-점점 갈 수록 세타값이 이전의 세타값보다 줄어드는 것을 확인할 수 있음 (아래 그림에서 세타값 1 -> 0.7로 감소)

 

-언제까지 저 연산을 반복하느냐 -> 세타의 값이 converge(수렴) 될 때까지, 즉 gradient 값이 0이라는 local minimum 값에 가까워질 때까지 반복하여 연산해 세타 값을 추출해낸다

 

-오른쪽 그래프가 converge가 되었을 때의 최적해를 갖는 linear combination 그래프

-값을 용이하게 예측할 수 있게 된다

 

** 추가 **

일차함수가 아닌 다른 차원의 값들은 어떻게 gradient decent로 풀이할 수 있을까?

-세타 0과 세타 1을 바꿔가면서 최저점을 찾아감

 

 

 

**추가2**

러닝레이트를 어떤 방식으로 정할 것인가?

 

-가장 많이 사용되는 방법은, 러닝레이트를 너무 높게 또는 너무 낮게 설정하지 않는 것이다

-너무 작게 설정 -> 시간이 너무 오래 걸림

-너무 크게 설정 -> 훨씬 안 좋은 결과 초래, 정확도가 떨어지게 됨, 최저점으로 수렴하지 않을 수가 있음