안녕하세요! 배도리입니다. kNN이후 다뤄볼 내용은 선형회귀분석입니다. 사실 머신러닝은 수학,통계 지식이 매우 중요합니다. 그래서 제가 계획한것은 다른 폴더를 만들어서 수학적인 내용에 대해서 집중적으로 작성하고 여기서는 수학식을 가볍게 살펴보겠습니다. 대신 개념과 코드위주로 다루겠습니다. 수학적지식은 정말 중요하니 머신러닝 모델설계편이 완료되면 그때 더 자세히 다뤄보겠습니다!
선형회귀(Linear Regression)는 통계학과 머신러닝에서 널리 사용되는 예측 모델링 기법입니다. 이는 독립변수(Independent Variable)와 종속변수(Dependent Variable) 사이의 관계를 선형적으로 모델링하는 방식입니다. 여기서 '선형적'이라는 말은 변수들 사이의 관계가 일차 함수 형태로 표현되는 것을 의미합니다. 종속변수는 우리가 예측하려는 대상으로, 때때로 '응답 변수(Response Variable)'라고도 불립니다. 이에 반해, 독립변수는 예측에 사용되는 변수로, 종종 '설명 변수(Explanatory Variable)'라고도 불립니다.
선형회귀는 주어진 데이터로부터 선형모델의 회귀계수를 추정합니다. 이 회귀계수들은 독립변수와 종속변수 사이의 관계를 수량화하며, 이를 통해 새로운 독립변수 값에 대한 종속변수의 값을 예측하는 데 사용됩니다.
선형회귀는 크게 두 가지 유형으로 나눌 수 있습니다
단순선형회귀(Simple Linear Regression): 이는 한 개의 독립변수를 가지고 종속변수와의 관계를 선형적으로 모델링하는 방식입니다. 이러한 관계는 일반적으로 y = a + bx와 같은 형태로 표현되며, 여기서 a는 y절편, b는 기울기(회귀계수), x는 독립변수를 나타냅니다.
다중선형회귀(Multiple Linear Regression): 이는 두 개 이상의 독립변수를 가지고 종속변수와의 관계를 선형적으로 모델링하는 방식입니다. 이는 종속변수가 여러 독립변수에 의해 영향을 받을 때 유용합니다. 다중선형회귀는 y = a + b1x1 + b2x2 + ... + bn*xn와 같은 형태로 표현됩니다.
먼저 단순선형회귀를 통해 선형회귀와 가까워지겠습니다.
단순선형회귀
앞에서 말씀드렸듯이 가장 간단한 형태의 회귀분석으로, 한 개의 독립변수와 한 개의 종속변수 사이의 관계를 모델링합니다. 예를 들어, 주택 가격 예측에 단순선형회귀를 사용할 수 있습니다.
지도학습의 관점에서 볼 때, 단순선형회귀는 학습 데이터로부터 모델의 파라미터를 학습합니다. 이때 학습 데이터는 '정답'을 알고 있는 데이터, 즉 주택 면적(독립변수)과 해당 주택의 가격(종속변수)을 포함하고 있습니다. 우리는 주택 면적과 가격 사이의 관계가 선형적이라고 가정하고, 이를 가장 잘 표현할 수 있는 선형 모델의 파라미터(회귀 계수)를 학습 데이터로부터 추정합니다.
회귀 분석의 관점에서 볼 때, 이렇게 학습된 모델은 주택 면적에 따른 주택 가격을 예측하는 데 사용할 수 있습니다. 즉, 특정 주택 면적에 대한 주택 가격(연속적인 수치, 실수 값)을 예측하는 것을 의미합니다.
단순선형회귀 모델은 y = a + bx와 같은 형태로 표현됩니다(혹은 θ세타를 써서 y= (θ0+ θ1x). 여기서 y는 종속변수(예: 주택 가격), x는 독립변수(예: 주택 면적), a는 y절편, b는 기울기(회귀 계수)입니다. 주어진 학습 데이터를 사용하여 a와 b의 값을 추정하면, 새로운 주택 면적 값 x에 대한 주택 가격 y를 예측할 수 있는 모델을 얻게 됩니다. 이 모델은 새로운 데이터에 대해 예측을 수행할 때 사용됩니다.

학습데이터를 통해 회귀계수가 추정된 모델을 만들고(지도학습의 관점) 이후 새로운 X값에 대한 y를 예측- h(x)값(회귀분석의 관점)
오 그러면 a,b 혹은 θ0, θ1을 추정하는것이 중요하겠군요. 이 값들은 모델의 예측 값 h(x)이 실제 값 y와 가장 가까워지도록 설정되어야 합니다. 그래야 선이 잘그어지면서 오 예측잘하네~ 하니깐요 ㅎㅎ. 이 과정을 '모형 파라미터 추정'이라고 합니다.
모형 파라미터를 추정하기 위한 방법 중 하나로 '최소제곱법(Least Squares Method)'이라는 방법을 사용합니다. 이 방법은 실제값 y와 모델의 예측값 h(x) 사이의 차이를 제곱하여 모두 더한 값, 즉 '제곱 오차(Squared Error)'를 최소화하는 파라미터 값을 찾는 것을 목표로 합니다. 예측값 h(x)와 실제값 y의 차이를 적게해야 "예측을 잘했구나" 하겠죠? 그리고 거기에 또 제곱을 하는 이유는 차이가 양수 혹은 음수가 될 수 있기 때문에 양수로 통일하기 위해서입니다.
정리해봅시다.
1. 일단 m개의 학습데이터 수가 있습니다.
2. m개의 실제값(y)과 m개의 대한 예측값(h(x))이 있습니다.
3. 실제값과 예측값이 얼마나 비슷한지 확인하려고 뺍니다.
4. 그런데 양수랑 음수가 나올 수 있으니까 제곱합니다. 끝
이아니라 좀더 해보겠습니다.
5. 이제 각 차이를 제곱한 m개를 다 더해주고 m으로 나눈값 구합니다.
6. 값들 중 가작 작은 값이 "오 예측을 잘했구나" 소리가 나오게됩니다.
7. 그렇게 만들어주는 θ0, θ1을 찾고싶습니다.
이 모든걸 식으로 한것이 목적함수 혹은 비용함수라고 부릅니다.

너무 기니까 𝐽 (𝜃0, 𝜃1) 으로 쓰겠습니다. 비용함수는 이제 파라미터 𝜃0, 𝜃1에 대한 함수라고 생각해주세요

이 함수는 학습 데이터에 대한 예측 값 hθ(x(i))와 실제 값 y(i) 사이의 차이의 제곱을 모두 합한 후 평균을 내는 것을 목적으로 합니다. 이 차이를 최소화하는 θ0, θ1 값을 찾는 것이 선형 회귀 모델을 학습하는 과정입니다. 잉 근데 왜 2가 갑자기 왜 튀어 나오냐? 라고 저는 궁금했는데 이건 추후 1/2는 미분 계산을 간편하게 하기 위해 사용됩니다. 목적 함수를 θ에 대해 미분하면 2가 앞으로 나오는데, 이 2와 1/2가 상쇄되어 계산이 간편해집니다. 미분시에 편하게 하기 위함입니다.
7. 그렇게 만들어주는 θ0, θ1을 찾고싶습니다. 네 어떻게 찾아야할까요?
이를 위해 경사 하강법(Gradient Descent)와 같은 최적화 알고리즘을 사용할 수 있습니다. 이때 θ0, θ1는 모델의 파라미터이며, 이들을 조절하여 모델의 성능을 향상시킵니다.
경사 하강법(Gradient Descent)은 최적화 문제를 해결하기 위한 반복적인 방법입니다. 이 알고리즘은 함수의 기울기(경사)를 사용하여 함수의 최솟값을 찾아가는 방법입니다.경사 하강법은 시작점을 무작위로 선택한 다음, 각 단계에서 함수의 기울기를 계산하고, 기울기가 가리키는 방향, 즉 함수의 값이 가장 가파르게 감소하는 방향으로 이동합니다. 이 과정을 반복하여 비용함수의 값이 최소가 될 때까지 파라미터(𝜃0, 𝜃1) 값을 동시에 지속적으로 업데이트합니다.

가파르게 감소하는 방향으로 이동하는데 이동의 크기는 우리가 정합니다. 그건 이제 하이퍼파라미터이며 학습률 α라고 칭합니다.
즉 Learning rate(학습률)은 경사 하강법에서 각 단계에서 파라미터를 얼마나 많이 업데이트할지를 결정하는 하이퍼파라미터입니다. 학습률이 너무 크면 최적의 솔루션을 뛰어넘어 갈 수 있고(발산), 너무 작으면 수렴하는데 너무 오랜 시간이 걸리거나 지역 최소값에 갇힐 수 있습니다. 따라서 적절한 학습률을 설정하는 것이 중요합니다.
식은 다음과 같습니다.

Partial derivative(편미분)은 다변수 함수에서 특정 변수에 대해 미분하는 것을 의미합니다. 경사 하강법에서 비용 함수는 모델의 파라미터에 대한 함수이며, 각 파라미터에 대한 비용 함수의 편미분은 해당 파라미터를 증가시킬 때 비용 함수가 얼마나 변하는지를 나타냅니다. 이 편미분 값은 파라미터를 업데이트하는 데 사용됩니다. 아 그리고 여기서 :=는 업데이트를 의미합니다.
아주 혹시 왜 미분하는지 궁금한 분들이 있을텐데 우리의 목표는 비용 함수의 최소값을 찾는 것입니다. 함수의 최소값은 그래프에서 기울기가 0인 지점, 즉 미분 값이 0인 지점에 위치합니다. 따라서 미분을 사용하면 함수의 최소값을 찾을 수 있습니다.
다음 게시글에서는 코드를 통해 한번 확인해보겠습니다.
'Machine Learning_모델설계_Python' 카테고리의 다른 글
| 선형회귀_3 다중선형회귀 및 평가지표 (1) | 2023.05.17 |
|---|---|
| 선형회귀_2 단순선형회귀 실습 (0) | 2023.05.16 |
| kNN_4 회귀 (0) | 2023.05.14 |
| kNN_3 분류 실습(표준화, 결과분석) (3) | 2023.05.13 |
| kNN_2 분류 실습 (3) | 2023.05.10 |