- 여러 개의 특성(독립변수)을 사용한 선형 회귀 (독립 변수가 하나인 선형회귀의 확장으로 불 수 있음)
- 직선으로 표현 가능하던 선형회귀의 회귀식과 다르게 복수의 독립변수의 일차식의 선형결합으로 표현된다.
- 다중 회귀 모델을 훈련하는 것은 선형 회귀 모델을 훈련하는 것과 같음. 다만 여러 개의 특성을 사용해 선형 회귀를 수행함. (사이킷런의 LinearRegression 클래스 임포트하고 앞에서 만든 train_poly를 사용해 모델 훈련)
- 특성이 늘어나면 선형 회귀의 능력은 매우 강해지나 특성의 개수를 크게 늘리면 훈련 세트에 너무 과대적합되어 테스트 세트에서는 형편없는 점수를 만듦.
#훈련세트에 대해서는 높은 점수를 얻으나 테스트 세트에 대한 점수는 아주 큰 음수가 나오는 코드 -> 규제로 해결 poly = PolynomialFeatures(degree=5, include_bias=False) # degree 매개변수를 사용해 필요한 고차항의 최대 차수를 5제곱으로 지정 poly.fit(train_input) train_poly = poly.transform(train_input) test_poly = poly.transform(test_input) print(train_poly.shape)
- 기존의 특성을 사용해 새로운 특성을 뽑아내는 작업
- EX) '농어길이 X 농어 높이'를 새로운 특성으로 만드는 것
- 직접 특성을 제곱하고 특성끼리 곱해서 새로운 특성을 추가할 수도 있지만 사이킷런에서 제공하는 편리한 도구 사용함. (변환기 클래스)
- fit(), transform() 메서드를 제공
- fit()메서드는 새롭게 만들 특성 조합을 찾고 transform()메서드는 실제로 데이터를 변환함.
- 두 메서드를 하나로 붙인 fit_transform 메서드도 있음.
- 입력 데이터를 변환하는 데 타깃 데이터가 필요하지 않음. -> 메서드에 입력 데이터만 전달
- 교재에서는 PolynomialFeatures 클래스 사용함
- 이 클래스는 기본적으로 각 특성을 제곱한 항을 추가하고 특성끼리 서로 곱한 항을 추가함.
- 이 클래스는 sklearn.preprocessing 패키지에 포함되어 있음.
from sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(include_bias=False) # 선형방정식의 절편이 항상 값이 1인 특성과 곱해지는 계수라고 볼 수 있는데 사이킷런의 선형모델은 자동으로 절편을 추가하기 때문에 굳이 특성을 만들 필요가 없어서 False로 지정함. -> 절편을 위한 항이 제거되고 특성의 제곱과 특성끼리 곱한 항만 추가됨. 꼭 지정할 필요는 없음. poly.fit([[2,3]]) # transform 전에 꼭 poly.fit을 사용해야 함! 훈련을 해야 변환이 가능하기 때문. print(poly.transform([[2,3]]))
- 특성이 어떻게 만들어졌는지 확인하는 좋은 방법 제시함. -> 'get_feature_names()'메서드 호출
- 머신러닝 모델이 훈련 세트를 너무 과도하게 학습하지 못하도록 훼방하는 것(모델이 훈련 세트에 과대적합되지 않도록 함.
- 선형 회귀 모델의 경우 특성에 곱해지는 계수(또는 기울기)의 크기를 작게 만드는 일임. -
- 특성의 스케일이 정규화되지 않으면 곱해지는 계수 값도 차이나게 되므로 규제를 적용하기 전에 먼저 정규화를 해야함. -> 사이킷런의 StandardScaler 클래스 사용, StandardScaler 클래스도 변환기의 하나임.
- 훈련세트로 학습한 변환기를 사용해 테스트 세트까지 변환해야 함@
- 선형 회귀 모델에 규제를 추가한 모델
- 두 모델은 규제를 가하는 방법이 다름
- 릿지는 계수를 제곱한 값을 기준으로 규제를 적용
- 라쏘는 계수의 절댓값을 기준으로 규제를 적용
- 일반적으로 릿지를 조금 더 선호함
- 두 알고리즘 모두 계수의 크기를 줄이지만 라쏘는 아예 0으로 만들 수도 있음.
- 사이킷런은 두 알고리즘을 모두 제공함.