과대적합을 방지하기 위해 Ridge regression 사용하기

2023. 1. 20. 20:14·ML 실습
반응형

1,2,3,9차의 차원(특성)을 가진 input을 통해 과대적합의 그래프의 형태와 Ridge regression을 사용했을 때 어떤 식으로 변화하는지 알아보자 

 

### 1차원 그래프 ###

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
 
### 1차원 그래프 ###
 
X = np.arange(1,11).reshape(10,1) # 넘파이 arange 함수 : 배열 만들기 
y = np.array([1,7,3,5,13,9,8,11,19,16]).reshape(10,1) 
#  w.reshape(a, b) : w 배열을 a행, b열 배열로 바꿈
 
plt.scatter(X,y) # 산점도 만들기
#plt.show()
 
reg = LinearRegression()
reg.fit(X,y)
 
y_hat = reg.predict(X)
 
plt.plot(X, y, 'ro') # 'ro' : 점 그래프(?)
plt.plot(X, y_hat) # 그래프 형식을 명시하지 않으면 선 그래프
 
plt.show()
 
Colored by Color Scripter
cs

 

그래프가 직선으로 표현되고 데이터를 정확히 표현하지는 못하지만 나쁘지 않다.

 

 

 

 

### 2차원 그래프 ###

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
### 2차원 그래프 ###
 
from sklearn.preprocessing import PolynomialFeatures
# 차원을 변환해주는 라이버러리 임포트
 
polynomial = PolynomialFeatures(degree=2, include_bias=False)
X_2_poly = polynomial.fit_transform(X) # 특성 X를 2차원으로 변환(특성 한 개 추가)
 
reg = LinearRegression()
reg.fit(X_2_poly, y) # 두 개의 특성인 X로 모델 훈련
y_2_hat = reg.predict(X_2_poly)
 
plt.plot(X, y, 'ro')
plt.plot(X, y_2_hat)
plt.show()
 
Colored by Color Scripter
cs

 

1차원 그래프에 비해 2차원 그래프는 상대적으로 데이터를 잘 표현하고 있다.

 

 

 

 

 

 

### 3차원 그래프 ###

1
2
3
4
5
6
7
8
9
10
11
12
13
14
### 3차원 그래프 ###
 
polynomial = PolynomialFeatures(degree=3, include_bias=False)
X_3_poly = polynomial.fit_transform(X) # 특성 X를 3차원으로 변환(특성 두 개 추가)
 
reg = LinearRegression()
reg.fit(X_3_poly, y) # 세 개의 특성을 가진 X로 모델 훈련
y_3_hat = reg.predict(X_3_poly)
 
plt.plot(X, y, 'ro')
plt.plot(X, y_3_hat)
plt.show()
 
 
Colored by Color Scripter
cs

앞선 두 개의 그래프보다 더 낫다고 할 수 있따. 지금의 상황에서는 최선으로 보인다.

 

 

 

 

 

 

### 과대적합이 된 경우 ###

1
2
3
4
5
6
7
8
9
10
11
12
### Overfitting 된 경우 ###
polynomial = PolynomialFeatures(degree=9, include_bias=False)
X_9_poly = polynomial.fit_transform(X) # 특성 X를 9차원으로 변환
 
reg = LinearRegression()
reg.fit(X_9_poly, y) # 아홉 개의 특성인 X로 모델 훈련
y_9_hat = reg.predict(X_9_poly)
 
plt.plot(X, y, 'ro')
plt.plot(X, y_9_hat)
plt.show()
 
Colored by Color Scripter
cs

과대적합된 상황을 표현하기 위해서 특성이 9개로 훈련하였다.

그래프에서 볼 수 있듯이 예측값과 데이터의 오차는 0에 수렴한다. 하지만 너무 지금의 상황에만 맞춰져 있어서 새로운 예측을 했을 때 틀릴 가능성이 매우 높다. 이것이 과대적합된 상황이다.

 

 

 

 

 

 

### Ridge regression ###

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
### Overfitting 방지 ###
### 규제, Ridge regression 사용 ###
 
from sklearn.linear_model import Ridge
#Ridge 라이브러리
 
ridge = Ridge(alpha=1.0) # alpha = 하이퍼파라미터 람다, 클수록 규제가 강함
ridge.fit(X_9_poly, y)
y_hat_ridge = ridge.predict(X_9_poly)
 
plt.plot(X, y, 'ro')
plt.plot(X, y_9_hat)
plt.plot(X, y_hat_ridge)
plt.show()
 
Colored by Color Scripter
cs

앞서 과대적합된 상황 (특성이 9개)과 동일한 상황이지만 Ridge regression을 사용하였다.

노란색으로 표시된 부분이 규제를 사용한 부분인데 기존의 상황(파란색)과 차이를 보인다.

규제를 사용한 부분은 예측값과 데이터의 오류는 기존의 상황보다는 많지만 좀 더 일반화된 모델로 생각할 수 있다.

반응형

'ML 실습' 카테고리의 다른 글

Performance metrics를 통해 모델 성능 평가하기 - 정확도(Accuracy), 재현율(Recall), 정밀도(Precision), F1 score  (0) 2023.01.26
선형 회귀를 이용해서 특성이 두 개 이상인 데이터 예측하기  (0) 2023.01.14
'ML 실습' 카테고리의 다른 글
  • Performance metrics를 통해 모델 성능 평가하기 - 정확도(Accuracy), 재현율(Recall), 정밀도(Precision), F1 score
  • 선형 회귀를 이용해서 특성이 두 개 이상인 데이터 예측하기
김천종
김천종
  • 김천종
    김천종
    김천종
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • 파이썬 (6)
      • Pandas (24)
      • 자료구조 (14)
      • 알고리즘 (4)
      • 아무거나 (16)
      • 머신러닝 (20)
      • ML 실습 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
김천종
과대적합을 방지하기 위해 Ridge regression 사용하기
상단으로

티스토리툴바