Ridge

  • 일반 Linear Regression은 모델의 복잡도를 제어할 방법 없음(파라미터가 없기 때문)
  • 릿지 회귀에서의 가중치 선택은 train data 에 대한 것 뿐만 아니라 추가 제약조건을 만족시키는 방향으로 진행
  • 방법 : 가중치의 절대값을 가능한 작게 만듦 -> 모든 feature의 가중치를 0에 가깝게 만들어서 기울기를 최대한 작게 만든다 -> 규제
  • Regularization : 모델이 과대적합 되지 않도록 강제로 제한 -> L2 규제
  • 매개변수 조정 -> alpha 값을 높이면 규제를 강하게 하는 것 -> 계수를 더 0에 가깝게 만듦

 

 

앞에서 공부한 단순선형, 다중선형을 이어 Ridge 를 공부해보겠습니다.

낮은 train, test 점수를 보면서 더 높일 수 있는 방법이있지 않을까 생각이 들겁니다.

Ridge는 가중치를 조절하여 그래프의 기울기를 0으로 만들도록 하는 방식으로 모델에 있어 규제를 하는 방식입니다.

 

from sklearn.linear_model import Ridge


# 1. diabetes dataset loading 및 데이터 분할
diab = datasets.load_diabetes()
X = diab.data
y = diab.target
X_train , X_test , y_train, y_test = train_test_split(X , y , test_size=0.2,random_state=0)


# 2 object for modelling
rdg = Ridge()
rdg.fit(X_train, y_train)


# 3 훈련 결과 확인 
print("훈련 세트 점수 : {:.3f}".format(rdg.score(X_train,y_train)))
print("테스트 세트 점수 : {:.3f}".format(rdg.score(X_test,y_test)))
# 결과 : 훈련 세트 점수 : 0.465 테스트 세트 점수 : 0.341

# 4 parameter tuning
rdg01 = Ridge(alpha=0.1)  
# alpha 낮게 -> 규제 약하게 한다 -> 데이터에 더 많은 피팅 시켜라 -> 과대적합 방향으로 진행해라 
# alpha 높게 -> 규제 강하게 한다 -> 모든 계수 값  0에 가깝게 -> 과소적합
rdg01.fit(X_train, y_train)


# 4-1 훈련 결과 확인 
print("훈련 세트 점수 : {:.3f}".format(rdg01.score(X_train,y_train)))
print("테스트 세트 점수 : {:.3f}".format(rdg01.score(X_test,y_test)))
# 결과 : 훈련 세트 점수 : 0.548 테스트 세트 점수 : 0.342


# 5 parameter tuning
rdg02 = Ridge(alpha=0.01)  
rdg02.fit(X_train, y_train)


# 5-1 훈련 결과 확인 
print("훈련 세트 점수 : {:.3f}".format(rdg02.score(X_train,y_train)))
print("테스트 세트 점수 : {:.3f}".format(rdg02.score(X_test,y_test)))
# 결과 : 훈련 세트 점수 : 0.553 테스트 세트 점수 : 0.330


# 6 parameter tuning
rdg03 = Ridge(alpha=10)  
rdg03.fit(X_train, y_train)


# 6-1 훈련 결과 확인 
print("훈련 세트 점수 : {:.3f}".format(rdg03.score(X_train,y_train)))
print("테스트 세트 점수 : {:.3f}".format(rdg03.score(X_test,y_test)))
# 결과 : 훈련 세트 점수 : 0.176 테스트 세트 점수 : 0.141



# 그래프 확인
plt.plot(rdg.coef_,"^", label="alpha=0")
plt.plot(rdg01.coef_,"^", label="alpha=0.1")
plt.plot(rdg02.coef_,"^", label="alpha=0.01")
plt.plot(rdg03.coef_,"o", label="alpha=10")
plt.xlabel("coef list")
plt.ylabel("coefficient")
plt.hlines(0,0,len(lr.coef_))
plt.ylim(-500,500)
plt.legend()
plt.show()

 

 

 

그래프를 해석하면, 가중치를 조절하기 위해 alpha를 조정하게 된다.

alpha는 클 수록 규제가 많이 들어가며, 복잡해진다. 또한,  커질수록 계수의 크기가 줄어들게 되며, 영향을 끼치는 변수가 줄어들게 됩니다.(alpha = 10을 보면 확인 가능)

 

+ Recent posts