다항회귀 모델로 예측해봐도 여전히 남아있는 과소적합이 찜찜한데... 도와주세요ㅠ
김 팀장🗣️ "뭐야, 높이랑 두께 데이터도 있으면서 왜 안 썼어? 선형회귀는 특성이 많을수록 효과가 뛰어나니까, 여러 개의 특성을 함께 적용해 봐!"
pandas
라이브러리 활용!pd.read_csv()
: 외부의 csv 파일을 데이터프레임으로 받아오는 함수.to_numpy()
: 넘파이 배열로 바꿔주는 메소드PolynomialFeatures()
: 다항 특성을 만들어주는 변환기 클래스.transform()
: 변환기로 데이터를 변환해주는 메소드 (❗.fit()
쓰고 써야 함)include_bias=False
: 절편 항을 무시해주는 옵션.get_feature_names_out()
: 변환된 특성 종류를 확인할 수 있는 메소드LinearRegression()
쓰면 됨!degree
: PolynomialFeatures로 특성 추가할 때, 고차항의 최대차수를 지정하는 매개변수 (기본값 = 2)StandardScaler()
: '표준점수(z)'로 표준화해주는 변환기 클래스Ridge()
: 선형회귀에 규제를 추가한 모델. 계수를 제곱한 값을 기준으로 적용하는 L2 규제로, 라쏘보다 릿지를 더 선호하는 경향이 있음.alpha
: 규제의 강도를 조절하는 매개변수로, 값이 커질수록 강도가 세짐.Lasso()
: 선형회귀에 규제를 추가한 모델. 계수의 절댓값을 기준으로 적용하는 L1 규제로, 릿지와 달리 계수를 아예 0으로 만들 수도 있음❗alpha
값을 바꿔가며 규제 강도 조절 가능.np.sum()
: 배열을 모두 더한 값을 반환하는 함수. T/F는 1/0으로 인식하여 계산함.= 즉, 40개의 특성은 계수가 0이 되어버렸고, 실질적으로 사용한 계수는 15개뿐이라는 것!
poly = PolynomialFeatures()
poly.fit([[2,3]]) # 2,3으로 이루어진 샘플을 변환기에 넣고
print(poly.transform([[2,3]])) # 변환을 돌리면
---------------------------------------------------------------
[[1. 2. 3. 4. 6. 9.]] # 이렇게 새로운 특성들 추가됨!
alpha
이고, 우리가 했던 것처럼 일일이 설정해보면서 최적의 값을 찾아야 한다. (*이 때, 보통 로그 스케일 간격으로 하는 것이 일반적이다)156p. test_poly 는 왜
.fit()
안 해주나요?target_poly (훈련세트)로
.fit()
해놨으니 그걸 그대로 쓰는 겁니다! 항상 훈련세트를 기준으로 테스트세트도 변환하는 습관을 들이는 게 좋아요!
🆗= 테스트세트를 따로.fit()
해주는 경우는 없다고 보자!
더 높은 결정계수 값을 구하려고 특성의 개수를 늘림 (=다중회귀) → 묻고 더블로 특성공학까지 사용해서 특성을 더 다양하게 늘림 → 결과 굿! → 특성 많을수록 좋아보여서 55개까지 늘려봄 → 심각한 과대적합... → 줄이기 위한 규제 방법 (릿지, 라쏘)을 배움 + 최적의 alpha
값 찾기!
오늘은 진짜 새롭게 배운 것들이 꽤 있었다! 앞으로 '과대적합'이 뜨면 릿지 규제, 라쏘 규제가 자연스럽게 떠오르길..!!
(p.171~173 부분 기록 추가하자)