특성이 하나인 경우 어떤 직선을 학습하는 알고리즘이다. KNN의 경우 새로운 샘플이 훈련 세트의 범위를 벗어나면 엉뚱한 값을 예측할 수 있었는데, Linear Regression의 경우 만족하는 직선을 학습하는 것이므로 해당 문제를 해결할 수 있다.
사용 방법은 다음과 같다.
from sklearn.linear_model import LinearRegression
# Fitting
lr = LinearRegression()
lr.fit(train_input, train_target)
# Model evaluation
target_score = lr.score(train_input, train_target)
test_score = lr.score(test_input, test_target)
Poly Regression
Linear Regression의 경우 직선을 학습하는 것인데, 직선이 아니라 다른 형태의 형태가 모델에 더 적합할 수 있다. 이러한 상황에서 Poly Regression을 사용해주면 된다. 새로운 Class를 활용하지 않고 PolynomialFeatures를 활용해서 Linear Regression을 진행해주면 된다.
그러나 특성의 개수를 늘릴수록 훈련 세트에 대해 거의 완벽하게 학습하게 되므로 Overfitting 문제가 발생할 수 있다. 따라서 무조건 특성의 개수가 높을수록 유리하지 않고, 적절한 규제를 통해 Overfitting 문제를 해결해야 한다.
Regularization
훈련 세트를 너무 과도하게 학습하지 못하도록 훼방하는 역할을 수행하게 된다. 예를 들어 Linear Regression의 경우 특성에 곱해지는 계수(or 기울기)의 크기를 작게 만든다.
다만 이 작업을 잘 수행하기 위해서는 standardize를 거친 후 진행해야한다. 왜냐하면, 스케일이 차이나게 되면 영향받는 정도가 상이해지기 때문이다.
선형 회귀 모델에 규제를 추가한 모델은
릿지(Ridge)
라쏘(Lasso)
가 존재하는데 각각 계수를 제곱한 값과 계수의 절댓값을 기준으로 규제를 적용한다.
또한, Ridge와 Lasso는 규제의 양을 조절할 수 있다. 이는 모델 객체를 만들 때 alphaparameter를 통해 조절할 수 있는데, 해당 값이 크면 규제 강도가 커지므로 보다 훈련 모델에 과소적합 되도록 유도하게 된다.(KNN에서 n_neighbors 값을 키운 것과 비슷한 효과라고 이해하면 된다.)