카테고리 없음
머신러닝과 딥러닝(3)_선형회귀
teminam
2023. 6. 13. 10:43
1. Rent 데이터셋 살펴보기
import numpy as np
import pandas as pd
import seaborn as sns
rent_df = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/8. 머신러닝과 딥러닝/rent.csv')
rent_df
- Posted On: 매물 등록 날짜
- BHK: 베드, 홀, 키친의 개수
- Rent: 렌트비
- Size: 집 크기
- Floor: 총 층수 중 몇층
- Area Type: 공용공간을 포함하는지, 집의 면적만 포함하는지
- Area Locality: 지역
- City: 도시
- Furnishing Status: 풀옵션 여부
- Tenant Preferred: 선호하는 가족형태
- Bathroom: 화장실 개수
- Point of Contact: 연락할 곳
2. 선형 회귀(Linear Regression)
- 데이터를 통해 가장 잘 설명할 수 있는 직선으로 데이터를 분석하는 방법
- 단순 선형회귀(단일 독립변수를 이용)
- 다중 선형회귀(다중 독립변수를 이용)
선형 회귀(Linear Regression)는 종속 변수와 한 개 이상의 독립 변수 간의 선형
관계를 모델링하는 회귀 분석 기법입니다. 선형 회귀는 데이터의 분포를 가장 잘
표현하는 최적의 직선을 찾는 것을 목표로 합니다. 이 때, 선형 회귀 모델은
독립 변수와 종속 변수 사이의 선형 관계를 가정합니다.
선형 회귀 모델은 다음과 같은 수학적 형태를 가집니다:
y = β₀ + β₁x₁ + β₂x₂ + ... + βᵣxᵣ
여기서,
- y는 종속 변수(예측하고자 하는 값)입니다.
- x₁, x₂, ..., xᵣ은 독립 변수(예측에 사용되는 변수)입니다.
- β₀, β₁, β₂, ..., βᵣ은 모델의 계수(파라미터)입니다.
선형 회귀 모델은 주어진 훈련 데이터를 이용하여 회귀 계수(β₀, β₁, β₂, ...,
βᵣ)를 추정하고, 이를 활용하여 새로운 독립 변수 값에 대한 종속 변수 값을
예측합니다. 이때, 회귀 계수는 주어진 데이터와 예측값 간의 오차(잔차)를
최소화하는 방향으로 추정됩니다. 가장 일반적으로 사용되는 최소 제곱법(Least
Squares)을 통해 이러한 회귀 계수를 추정할 수 있습니다.
선형 회귀 모델은 변수 간의 선형 관계를 가정하므로, 비선형적인 관계가 있는
데이터에 대해서는 제한적인 예측 능력을 가질 수 있습니다. 이러한 경우에는
비선형 회귀 모델을 고려해야 합니다.
선형 회귀는 간단하면서도 효과적인 모델링 기법으로 널리 사용됩니다. 예를
들어, 주택 가격 예측, 판매량 예측, 수익 예측 등 다양한 예측 문제에 활용될
수 있습니다. 또한, 선형 회귀 모델은 해석력이 높아 결과를 해석하고 설명하기
쉬운 장점이 있습니다.
머신러닝의 가장 큰 목적은 데이터로부터 패턴이나 규칙을 학습하여 문제를
해결하고 예측하는 것입니다. 이를 통해 머신러닝은 다음과 같은 목적을 가지고
있습니다:
1. 예측: 머신러닝은 과거 데이터를 기반으로 미래의 결과를 예측하는 데
사용됩니다. 예를 들어, 주식 시장에서 주가 예측, 날씨 예보, 고객의 구매 예측
등 다양한 예측 작업에 활용됩니다.
2. 분류: 머신러닝은 데이터를 여러 개의 클래스 또는 범주로 분류하는 작업에
사용됩니다. 스팸 메일 필터링, 질병 진단, 이미지 분류 등 다양한 분류 작업에
적용됩니다.
3. 군집화: 머신러닝은 데이터를 비슷한 특성이나 패턴을 가진 그룹으로
군집화하는 작업에 사용됩니다. 고객 세분화, 이미지 분할, 소셜 미디어 분석
등에서 군집화는 유용하게 활용됩니다.
4. 회귀: 머신러닝은 입력 변수와 출력 변수 사이의 관계를 모델링하여 연속적인
값을 예측하는 회귀 작업에 사용됩니다. 주택 가격 예측, 수요 예측, 판매량
예측 등에 활용됩니다.
머신러닝은 이러한 목적을 달성하기 위해 다양한 알고리즘과 기법을 사용합니다.
데이터의 특성과 문제의 성격에 따라 적합한 알고리즘을 선택하고, 모델을
학습하고 훈련시켜 문제를 해결하고 예측합니다. 따라서, 머신러닝은 데이터
기반의 지능적인 결정과 예측을 가능하게 하여 다양한 분야에서 혁신과 개선을
이끌어내는 주요한 목적을 가지고 있습니다.
선형 회귀(Linear Regression)는 선형대수(linear algebra)의 범주에 속합니다.
선형 회귀는 종속 변수와 독립 변수 간의 선형 관계를 모델링하는 회귀 분석
기법입니다. 독립 변수들의 선형 조합으로 종속 변수를 예측하는 선형 함수를
사용합니다. 이 때, 선형 함수는 독립 변수들의 가중치와 상수항으로 이루어져
있습니다.
수학적으로는 선형 회귀 문제를 행렬과 벡터를 이용하여 표현할 수 있습니다.
독립 변수들을 특징 행렬(feature matrix)로 표현하고, 가중치를 가지는 회귀
계수 벡터(coefficient vector)와 종속 변수를 예측하는 선형 방정식을 선형
대수적으로 표현할 수 있습니다.
선형 회귀는 선형대수의 기본 개념과 연산을 활용하여 최적화 기법을 이용하여
회귀 계수를 추정하고 예측을 수행합니다. 선형 회귀는 선형 연립 방정식을 푸는
데 사용되는 선형 대수의 원리와 기법을 기반으로 합니다.
따라서, 선형 회귀는 선형대수의 범주에 속하는 분석 기법으로 간주됩니다.
3. 평가 지표 만들기
3-1. MSE(Mean Squared Error)
3-2. MAE(Mean Absolute Error)
위의 코드는 MAE(Mean Absolute Error)를 계산하는 함수인 `my_mae`를 정의하고,
이를 사용하여 예측값 `pred`와 실제값 `actual`의 평균 절댓값 오차를
계산합니다.
MAE는 예측값과 실제값 간의 차이를 절댓값으로 변환하여 평균을 구하는
방식으로 오차를 측정하는 지표입니다. MAE는 예측 오차의 크기를 나타내며,
작을수록 예측 성능이 좋다고 평가됩니다.
위의 코드에서는 `np.abs(pred - actual)`를 사용하여 예측값과 실제값의 차이의
절댓값을 계산하고, 그 평균을 구하는 `.mean()` 함수를 호출하여 MAE를
계산합니다.
함수를 호출할 때는 `my_mae(p, act)`와 같이 예측값 `p`와 실제값 `act`를
인자로 전달하여 사용합니다. 함수는 계산된 MAE 값을 반환합니다.
MAE는 회귀 모델의 성능을 평가하는 지표로 사용되며, 오차를 절댓값으로
계산하기 때문에 이상치에 영향을 덜 받는 특징이 있습니다. 이를 통해 모델의
예측 성능을 평가하고, 다른 모델들과의 비교 등에 활용할 수 있습니다.
Q1. 순전파와 역전파란?
순전파(Forward Propagation)와 역전파(Backward Propagation)는 신경망(neural
network)에서 사용되는 핵심 개념입니다.
1. 순전파:
순전파는 입력 데이터가 신경망을 통과하여 출력까지 전파되는 과정을 말합니다.
신경망의 입력층부터 출력층까지 각 층의 뉴런들이 입력값을 받아 가중치와
활성화 함수를 적용한 후, 다음 층으로 전달합니다. 이러한 과정을 반복하여
최종적인 출력값을 얻습니다. 순전파는 데이터의 흐름이 입력층에서 출력층으로
단방향으로 진행되기 때문에 순차적인 계산으로 간단하게 구현할 수 있습니다.
2. 역전파:
역전파는 순전파의 결과와 실제값 사이의 오차를 역으로 전파하여 각 층의
가중치를 조정하는 과정입니다. 역전파는 신경망의 출력값과 실제값의 차이에
따라 오차를 계산하고, 이 오차를 이전 층으로 전달하여 역방향으로 오차를
계산하고 가중치를 갱신합니다. 이 과정은 오차를 최소화하기 위해 경사 하강법
(gradient descent)을 사용하여 가중치를 업데이트하는 최적화 알고리즘입니다.
역전파를 통해 각 층의 가중치를 조정하면서 신경망이 학습하고 예측 성능을
향상시킬 수 있습니다.
순전파와 역전파는 신경망의 학습과정에서 상호작용하며, 순전파는 입력에서
출력까지의 데이터 전달을 처리하고, 역전파는 출력과 실제값의 오차를 이용하여
가중치를 업데이트하여 학습하는 과정을 수행합니다. 이를 통해 신경망은 입력과
출력 사이의 복잡한 관계를 학습하고, 최적의 가중치를 찾아 원하는 예측을
수행할 수 있습니다.
Q2. MAE는 절댓값이 쓰여서 역전파에서 미분이 불가하여 잘 쓰이지 않는거야?
MAE(Mean Absolute Error)는 절댓값을 사용하여 오차를 측정하는 지표입니다.
MAE를 역전파에 사용할 때는 일반적으로 미분이 불가능하다는 이유로 잘 쓰이지
않는 경우가 있습니다.
역전파를 통해 가중치를 업데이트하기 위해서는 손실 함수(오차 함수)를
가중치로 미분해야 합니다. 그러나 MAE는 0을 기준으로 대칭적인 형태를 갖기
때문에 미분하면 0 또는 미분이 존재하지 않는 점들이 발생할 수 있습니다. 이는
경사 하강법과 같은 최적화 알고리즘에서 문제가 될 수 있습니다.
따라서 MAE 대신에 주로 MSE(Mean Squared Error)가 사용됩니다. MSE는 제곱을
사용하여 오차를 계산하는 지표로, 제곱 연산은 미분이 가능하므로 역전파에
사용하기 용이합니다. MSE를 사용하면 역전파를 통해 미분값을 구할 수 있고,
이를 기반으로 가중치를 업데이트하여 모델을 학습시킬 수 있습니다.
하지만 MAE는 이상치에 민감하지 않은 특징이 있고, 직관적으로 해석하기 쉬운
장점이 있기 때문에 특정 문제에 적합한 경우에는 여전히 사용될 수 있습니다.
또한, 일부 최적화 알고리즘을 조정하여 MAE를 사용할 수도 있습니다. 그러나
일반적으로는 MSE가 더 많이 사용되며, MSE를 사용한 경우에도 제곱 오차의
문제를 완전히 해결하지는 못합니다.
3-3. RMSE(Root Mean Squared Error)
Q. 머신러닝과 딥러닝에서 루트를 사용하면 좋은 이유?
머신러닝과 딥러닝에서 루트(제곱근)를 사용하는 이유는 주로 다음과 같습니다.
1. 오차의 크기 보정: 제곱 오차를 사용하는 경우에는 오차의 크기가 실제
오차보다 크게 반영될 수 있습니다. 제곱 오차는 제곱 연산으로 인해 오차의
크기가 제곱되기 때문에, 큰 오차에 더 큰 가중치를 부여하는 경향이
있습니다. 이로 인해 모델이 큰 오차에 더 민감하게 반응하게 됩니다. 반면에
루트를 적용하면 오차의 크기를 조정할 수 있어서 모델이 더 안정적으로
학습되고, 오차의 크기가 작은 부분에도 주의를 기울일 수 있습니다.
2. 이상치에 덜 민감: 제곱 오차는 이상치(outlier)에 매우 민감합니다.
이상치는 다른 데이터와 큰 차이를 갖기 때문에 제곱 연산으로 인해 큰 오차가
발생하게 됩니다. 이는 모델의 학습에 부정적인 영향을 줄 수 있습니다.
루트를 적용하면 제곱 오차의 크기를 줄이기 때문에 이상치에 덜 민감하게
학습할 수 있습니다.
3. 목적 함수 최적화: 일부 최적화 알고리즘은 제곱 오차 대신 루트를
사용하는 경우에 더 잘 동작할 수 있습니다. 제곱 오차는 볼록(convex) 최적화
문제로 간주되어 경사 하강법과 같은 알고리즘이 잘 작동합니다. 그러나 특정
문제에서는 루트를 적용하면 목적 함수가 더 부드럽고 더 많은 지역 최소값을
탐색할 수 있습니다.
물론, 루트를 사용하는 것이 항상 좋은 것은 아닙니다. 문제의 특성이나 목적에
따라서 적절한 평가 지표를 선택해야 합니다. 또한, 루트를 사용하면 계산
비용이 더 많이 들어갈 수 있으므로, 효율적인 계산을 고려해야 합니다.
3-4. 평가지표 적용하기
4. log 활용하기
주어진 결과에서 RMSE(Root Mean Squared Error)를 통해 비선형 데이터와 선형
데이터에서 로그를 사용하는 경우의 차이를 살펴볼 수 있습니다.
1. 1837 데이터를 삭제하기 전 RMSE: 41438.9403701652
이 경우에는 데이터에 1837이라는 이상치 데이터가 존재하고, 해당 데이터를
삭제한 후 RMSE를 계산한 결과입니다. 이상치 데이터의 영향으로 인해 모델의
예측이 왜곡되어 오차가 증가한 것을 확인할 수 있습니다.
2. 1837 데이터를 삭제한 후 RMSE: 41377.57030234839
이 경우에는 이상치 데이터를 삭제한 후 RMSE를 계산한 결과입니다. 이상치
데이터의 영향이 제거되어 예측이 개선되었으며, 오차가 감소한 것을 확인할
수 있습니다.
3. 로그를 활용하여 비선형으로 변경한 후 RMSE: 70418.55375574114
이 경우에는 데이터의 분포가 비선형적인 형태를 가지고 있을 때 로그 변환을
적용한 후 RMSE를 계산한 결과입니다. 비선형 데이터에 대해 로그 변환을
적용하면 데이터의 스케일을 조정하거나 비선형 관계를 선형 관계로
근사화하여 모델의 예측력을 개선하려는 시도입니다. 그러나 이 경우에는 로그
변환을 적용한 후 오차가 크게 증가한 것을 확인할 수 있습니다. 이는 로그
변환으로 인해 데이터의 패턴이 왜곡되어 예측이 제대로 이루어지지 않은
것입니다.
따라서, 데이터의 분포가 비선형적인 형태를 가질 때는 로그 변환을 적용하여
선형 관계로 근사화하는 것이 유리할 수 있지만, 데이터가 이미 선형적인 형태를
가지고 있다면 로그 변환을 적용하지 않는 것이 더 나은 결과를 가져올 수
있습니다. 로그 변환은 데이터의 특성과 모델의 목적에 따라 적절하게
선택되어야 합니다.