과대적합과 과소적합은 데이터 모델을 사용할 때 어느정도 신뢰성이 있는지 판단할 수 있도록 돕는 개념이다.
과대적합 (Overfitting)
과대적합은 모델이 학습 데이터에 너무 잘 맞춰져서, 새로운 데이터에 대해 일반화하지 못하는 경우를 말한다. 즉, 모델이 학습 데이터의 노이즈와 세부사항까지 학습하여 복잡한 패턴을 잡아내지만, 실제로는 이 패턴이 새로운 데이터에는 적용되지 않는 경우이다.
ex) 출처 : ChatGPT
- 시험 준비:
- 학생이 특정 시험의 기출문제만 집중적으로 공부하여, 기출문제에서는 높은 점수를 받지만, 시험에서 예상하지 못한 새로운 유형의 문제가 나오면 점수가 낮아지는 경우. 이 학생은 기출문제의 패턴에 너무 맞춰져 있지만, 시험 전체에 대한 이해가 부족한 상황입니다.
- 요리 레시피:
- 어떤 요리사가 특정 요리책의 레시피만을 그대로 따라해 요리를 합니다. 이 요리사는 그 레시피에서는 완벽한 요리를 만들 수 있지만, 재료가 조금만 바뀌거나 다른 레시피를 시도하면 요리를 잘 못하는 경우. 이 경우, 요리사는 특정 레시피에만 과도하게 맞춰져 있어 다양한 상황에 대처할 능력이 부족합니다.
과소적합 (Underfitting)
과소적합은 모델이 학습 데이터의 중요한 패턴을 충분히 학습하지 못하는 경우를 말합니다. 즉, 모델이 너무 단순해서 데이터의 구조를 제대로 파악하지 못하고, 학습 데이터와 테스트 데이터 모두에서 성능이 좋지 않은 경우입니다.
ex) 출처 : ChatGPT
- 시험 준비:
- 학생이 시험 공부를 너무 대충해서 기본적인 개념조차 이해하지 못하고 시험에서 낮은 점수를 받는 경우. 이 학생은 시험의 주요 개념과 패턴을 충분히 학습하지 못한 상황입니다.
- 운전:
- 운전 연습을 너무 적게 한 초보 운전자가 기본적인 교통 규칙이나 운전 기술조차 제대로 익히지 못한 상태에서 실제 도로에 나가게 되면, 운전도 제대로 하지 못하고 사고의 위험이 높아집니다. 이 경우, 운전자는 충분히 연습하지 않아서 기본적인 패턴조차 익히지 못한 상황입니다.
보통 과대적합을 감지하는 방법은 데이터셋을 train과 test를 나누어 성능을 비교하는 방법을 주로 사용한다.
학습데이터에는 높은 정확도를 보이지만, 검증 데이터에서는 정확도가 낮다면 과대적합을 의심할 수 있다.
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 예제 데이터
X, y = DATA_data, DATA_target # 여기서 DATA는 데이터셋을 의미하고 모델에 교육 할 전처리가 완료된 이후를 말한다.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 모델 학습
model = RandomForestClassifier()
model.fit(X_train, y_train)
# 예측
train_predictions = model.predict(X_train)
test_predictions = model.predict(X_test)
# 정확도 계산
train_accuracy = accuracy_score(y_train, train_predictions)
test_accuracy = accuracy_score(y_test, test_predictions)
print(f"Train Accuracy: {train_accuracy}")
print(f"Test Accuracy: {test_accuracy}")
# 과대적합 여부 확인
if train_accuracy > test_accuracy:
print("모델이 과대적합되었습니다.")
과대적합을 해결하는 방법에는 크게 다섯가지가 있다.
1. 더 많은 데이터를 수집하게 된다면 다양한 경우의 수를 학습할 수 있기 때문에 과대적합이 해결된다.
2. 가중치를 규제한다.
아래 출처 : R, Python 분석과 프로그래밍의 친구 (by R Friend)
Lasso 정규화는 맨하탄 거리라고 알려져 있으며, 특정 방향으로만 움직일 수 있는 조건이 있을 때, 두 벡터 간의 최단 거리를 찾는데 사용된다.loss는 실제 값과 예측 값 오차들의 절대값들에 대한 합을 나타낸다.
Ridge 정규화는 유클리드 거리라고 하며, 두 점 사이의 최단 거리를 측정한다. loss는 실제 값과 예측 값 오처들의 제곱의 합을 나타낸다.
L1, L2 설명 출처: ChatGPT
L1 정규화 (Lasso 정규화)
- 정의: L1 정규화는 가중치의 절대값의 합을 최소화하는 정규화 방법입니다.
- 특징: L1 정규화는 일부 가중치를 정확히 0으로 만듭니다. 이로 인해 모델의 희소성(sparsity)을 증가시키고, 가중치가 0인 특징을 자동으로 선택하지 않게 됩니다.
- 수식: L1 = λ * Σ|w_i|, 여기서 λ는 정규화 강도를 조절하는 하이퍼파라미터입니다.
L2 정규화 (Ridge 정규화)
- 정의: L2 정규화는 가중치의 제곱합을 최소화하는 정규화 방법입니다.
- 특징: L2 정규화는 모든 가중치를 0에 가깝게 만듭니다. 즉, 가중치를 작게 만들어 모델의 복잡도를 줄이지만, 모든 가중치를 완전히 0으로 만들지는 않습니다.
- 수식: L2 = λ * Σ(w_i^2), 여기서 λ는 정규화 강도를 조절하는 하이퍼파라미터입니다
from sklearn.linear_model import Lasso, Ridge
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 데이터 로드
X, y = DATA_data, DATA_target # 데이터셋을 로드합니다.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# L1 정규화 (Lasso)
lasso_model = Lasso(alpha=0.1) # alpha는 λ를 나타냅니다.
lasso_model.fit(X_train, y_train)
lasso_predictions = lasso_model.predict(X_test)
lasso_mse = mean_squared_error(y_test, lasso_predictions)
# L2 정규화 (Ridge)
ridge_model = Ridge(alpha=0.1) # alpha는 λ를 나타냅니다.
ridge_model.fit(X_train, y_train)
ridge_predictions = ridge_model.predict(X_test)
ridge_mse = mean_squared_error(y_test, ridge_predictions)
print(f"Lasso MSE: {lasso_mse}")
print(f"Ridge MSE: {ridge_mse}")
3. 드롭아웃 기법을 사용한다.
드롭아웃이란 딥러닝 인공신경망에서 일부 노드를 무작위로 학습에 참여시키지 않음으로써 과대적합을 방지한다.
출처 : ChatGPT
model = Sequential()
model.add(Dense(64, activation='relu', input_shape=(X_train.shape[1],)))
model.add(Dropout(0.5)) # 드롭아웃 레이어 추가
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5)) # 드롭아웃 레이어 추가
model.add(Dense(1, activation='sigmoid'))
4. 모델 학습 도중 데이터의 성능이 개선되지 않고 일정한 점수로 유지가 된다면 학습을 중단한다.
5. 모델의 변수를 줄이거나 노드를 줄여 단순한 모델로 만들어 과대적합을 방지한다.
출처 : https://rfriend.tistory.com/199
[R 군집분석 (Cluster Analysis) ] 유사성(Similarity), 비유사성(Dis-similarity), 거리(Distance) 척도
지난번 포스팅에서는 군집분석(Cluster Analysis)의 개념과 유형에 대해서 알아보았습니다. 군집분석은 데이터를 유사한 혹은 동질의 군집(cluster)으로 묶어주는 것이라고 했었는데요, 그렇다면 "유
rfriend.tistory.com
https://seongyun-dev.tistory.com/52
[최적화] 가중치 규제 L1, L2 Regularization의 의미, 차이점 (Lasso, Ridge)
1. 수학적 최적화(Optimization)와 과적합 (Overfitting) 수학에서 최적화란, 특정 집합에 대한 목적 함수(Objective Function)를 최소화 혹은 최대화시키는 최적해 (파라미터)를 찾는 것을 말합니다. 머신러닝
seongyun-dev.tistory.com
'Scientist > ML.DL' 카테고리의 다른 글
[ML/DL] NLP BERT 감정분석 (0) | 2024.07.15 |
---|---|
[ML/DL] NLP 단어 가방 모형 (0) | 2024.07.15 |
[ML/DL] Boosting 알고리즘 - XGBoost (1) | 2024.07.12 |
[ML/DL] 선형회귀분석 변수선택법 + 다중공선성, VIF (0) | 2024.07.12 |
[Python] 가상환경 생성 및 쥬피터 커널 연결방법 (1) | 2024.07.10 |