-
Notifications
You must be signed in to change notification settings - Fork 25.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
120 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
|
||
|
||
# TIL: 선형 회귀 분석 (Linear Regression) | ||
|
||
## 📌 오늘 배운 내용 | ||
선형 회귀는 독립 변수와 종속 변수 간의 선형 관계를 모델링하는 기법입니다. 머신러닝의 기초가 되는 중요한 알고리즘입니다. | ||
|
||
## 1. 단순 선형 회귀 (Simple Linear Regression) | ||
|
||
### 개념 | ||
- 하나의 독립 변수(X)로 종속 변수(y)를 예측하는 방법 | ||
- y = wx + b 형태의 직선 방정식을 찾는 것이 목표 | ||
- w: 가중치(weight) 또는 기울기(slope) | ||
- b: 편향(bias) 또는 y절편(intercept) | ||
|
||
### 구현 예시 | ||
```python | ||
import pandas as pd | ||
from sklearn.linear_model import LinearRegression | ||
|
||
# 데이터 준비 | ||
dataset = pd.read_csv('LinearRegressionData.csv') | ||
X = dataset['hour'].values | ||
y = dataset['score'].values | ||
|
||
# 모델 학습 | ||
reg = LinearRegression() | ||
reg.fit(X.reshape(-1, 1), y) | ||
|
||
# 예측 | ||
prediction = reg.predict([[9]]) # 9시간 공부했을 때의 예상 점수 | ||
``` | ||
|
||
### 학습 내용 | ||
- `.reshape(-1, 1)`이 필요한 이유: scikit-learn은 2D 배열 형태의 입력을 요구 | ||
- `.fit()`은 모델 학습을, `.predict()`는 예측을 수행 | ||
- `reg.coef_`로 기울기, `reg.intercept_`로 y절편 확인 가능 | ||
|
||
## 2. 데이터셋 분리 | ||
|
||
### 개념 | ||
- 과적합(Overfitting) 방지를 위해 데이터를 훈련셋과 테스트셋으로 분리 | ||
- 보통 8:2 또는 7:3 비율로 분리 | ||
|
||
### 구현 | ||
```python | ||
from sklearn.model_selection import train_test_split | ||
|
||
X_train, X_test, y_train, y_test = train_test_split( | ||
X, y, | ||
test_size=0.2, # 테스트셋 20% | ||
random_state=0 # 재현성을 위한 시드값 | ||
) | ||
``` | ||
|
||
## 3. 경사 하강법 (Gradient Descent) | ||
|
||
### 개념 | ||
- 비용 함수(Cost Function)를 최소화하는 파라미터를 찾는 최적화 알고리즘 | ||
- 학습률(Learning Rate)에 따라 수렴 속도와 정확도가 달라짐 | ||
|
||
### 구현 | ||
```python | ||
from sklearn.linear_model import SGDRegressor | ||
|
||
sgd = SGDRegressor( | ||
max_iter=200, # 최대 반복 횟수 | ||
eta0=1e-4, # 학습률 | ||
random_state=0 | ||
) | ||
``` | ||
|
||
## 4. 다중 선형 회귀 (Multiple Linear Regression) | ||
|
||
### 개념 | ||
- 여러 개의 독립 변수로 종속 변수를 예측 | ||
- 범주형 변수는 원-핫 인코딩으로 처리 필요 | ||
|
||
### 원-핫 인코딩 예시 | ||
```python | ||
from sklearn.compose import ColumnTransformer | ||
from sklearn.preprocessing import OneHotEncoder | ||
|
||
ct = ColumnTransformer( | ||
transformers=[('encoder', OneHotEncoder(drop='first'), [2])], | ||
remainder='passthrough' | ||
) | ||
``` | ||
|
||
## 5. 모델 평가 지표 | ||
|
||
### MAE (Mean Absolute Error) | ||
- 실제값과 예측값의 차이 절대값의 평균 | ||
- 이해하기 쉽고 이상치의 영향이 적음 | ||
|
||
### MSE (Mean Squared Error) | ||
- 실제값과 예측값의 차이 제곱의 평균 | ||
- 큰 오차에 더 민감하게 반응 | ||
|
||
### RMSE (Root Mean Squared Error) | ||
- MSE의 제곱근 | ||
- 실제 값과 같은 단위로 해석 가능 | ||
|
||
### R² (결정계수) | ||
- 모델이 데이터의 분산을 얼마나 설명하는지 나타냄 | ||
- 1에 가까울수록 좋은 모델 | ||
|
||
## 🤔 오늘의 고민 | ||
1. 언제 단순 선형 회귀와 다중 선형 회귀를 선택해야 할까? | ||
2. 과적합을 방지하기 위한 다른 방법은 무엇이 있을까? | ||
3. 각 평가 지표의 특성에 따른 적절한 사용 상황은? | ||
|
||
## 📚 참고자료 | ||
- scikit-learn 공식 문서 | ||
- Python Machine Learning (Sebastian Raschka) | ||
|
||
## 💡 다음에 학습할 내용 | ||
- 다항 회귀 (Polynomial Regression) | ||
- 정규화 (Regularization) | ||
- 교차 검증 (Cross Validation) |