[혼공학습단 9기] 혼자 공부하는 머신러닝 + 딥러닝 Ch 03

수빈·2023년 1월 15일
0

03-1 k-최근접 이웃 회귀

k-최근접 이웃 회귀

지도 학습 알고리즘은 크게 분류(Classification)와 회귀(Regression)로 나뉜다. 회귀는 앞에서 한 것처럼 클래스 중 하나로 분류하는 것이 아니라 임의의 어떤 숫자를 예측하는 문제이다. 예를 들면 경제 성장률이나 배달이 도착할 시간 등을 예측하는 것이다.

두 변수 사이의 상관관계를 분석하는 방법을 회귀라고 부른다.

k-최근접 이웃 알고리즘을 회귀에도 적용시킬 수 있다. 이웃한 샘플들의 수치들의 평균을 사용해 새로운 샘플 X의 예측 타깃값을 구하는 것이다.

데이터 준비

사이킷런에서 사용할 훈련 세트는 2차원 배열이어야 한다.

넘파이 배열은 크기를 바꿀 수 있는 reshape() method를 제공한다. reshape() 메서트에서는 바꾸려는 배열의 크기를 지정할 수 있다. 하지만 크기가 바뀐 새로운 배열을 반환할 때 지정한 크기가 원본 배열에 있는 원소의 개수와 같아야 한다.

크기에 -1을 지정하면 나머지 원소 개수로 모두 채우라는 의미이다.
ex) train_input.reshape(-1,1)

결정계수(R^2)

훈련을 하고, score()함수를 사용해 점수를 확인한다. 그런데 분류의 경우 이 점수는 테스트 세트에 있는 샘플을 정확하게 분류한 개수의 비율이다(=정확도). 하지만 회귀의 경우에는 이 점수를 결정계수(coefficient of determination)라고 부른다.

R^2 = 1-((타깃-예측)^2의 합/(타깃-평균)^2의 합)

그러므로 예측이 타깃에 아주 가까워지면 분자가 0에 가까워지므로 결정계수 값은 1에 가까운 값이 된다.

사이킷런은 sklearn.metrics 패키지 아래, mean_absolute_error()이라는 함수를 제공하는데, 이것은 타깃과 예측의 절댓값 오차를 평균하여 반환한다.

과대적합 vs 과소적합

지금까지는 훈련 세트를 사용해 모델을 훈련한 뒤, 테스트 세트로 모델을 평가하였다.

모델을 훈련 세트에 훈련하면 훈련 세트에 잘 맞는 모델이 만들어진다. 그러므로 이 모델을 훈련 세트와 테스트 세트에서 모두 평가한다면 훈련 세트의 점수가 조금 더 높게 나온다.

만약 훈련 세트에서의 점수가 굉장히 좋았는데 테스트 세트에서 점수가 굉장히 나쁘다면 모델이 훈련 세트에 과대적합(overfitting)되었다고 말한다. 즉 훈련 세트에만 잘 맞는 모델이고, 테스트 세트나 실전에 투입되어 새로운 샘플에 대한 예측을 만들 때 잘 동작하지 않을 것이다.

반대로 훈련 세트보다 테스트 세트의 점수가 높거나 두 점수가 모두 낮은 경우, 모델이 훈련 세트에 과소적합(underfitting)되었다고 말한다. 즉, 모델이 너무 단순하여 훈련 세트에 적절히 훈련되지 않은 경우이다. 훈련 세트는 전체 데이터를 대표한다고 가정되기 때문에, 훈련 세트를 잘 학습하는 것이 중요하다. 이 때, 모델을 더 복잡하게, 즉 훈련 세트에 더 잘 맞게 만들면 되는데, k-최근접 이웃 알고리즘의 경우에는 이웃의 개수 k를 줄이는 방법이 한 가지이다.

[2주차 기본미션 : 확인문제 2번]


03-2 선형 회귀

k-최근접 이웃의 한계

k-최근접 이웃 회귀는 가장 가까운 샘플을 찾아 타깃을 평균한다. 그러므로 새로 들어온 샘플이 훈련 세트의 범위를 벗어나면 엉뚱한 값을 예측할 수 있다.

그러므로 k-최근접 이웃 말고 다른 알고리즘을 이용하여 보자.

선형 회귀

선형 회귀 (linear regression)은 널리 사용되는 대표적인 회귀 알고리즘이다.
선형이라는 말에서 짐작할 수 있듯이, 특성이 하나인 경우 어떤 직선을 학습하는 알고리즘이다.

[2주차 선택미션]

사이킷런은 sklearn.linear_model 패키지 아래, LinearRegression 클래스로 선형 회귀 알고리즘을 구현해 놓았다. 이 클래스의 객체를 만들어 훈련한다. 이때 선형 회귀는 직선을 학습하게 된다. 직선에는 기울기(coefficient)와 절편(intercept)가 있는데, 머신러닝 알고리즘이 찾은 값이라는 의미로 모델 파라미터 (model parameter)라고 부른다. 많은 머신러닝 알고리즘의 훈련 과정은 최적의 모델 파라미터를 찾는거나 다름 없다. 이를 모델 기반 학습이라고 부른다. 참고로 k-최근접 이웃은 모델 파라미터가 없으므로 사례 기반 학습이라고 부른다.

다항 회귀

선형 회귀에서 학습한 직선대로 예측하면 나중에는 값이 0 이하로 떨어지게 된다. 그러므로 최적의 직선을 찾기보다는 최적의 곡선을 찾아보자는 의견이 나오게 된다.
직선은 일차 방정식이었고, 곡선은 다항식을 사용한다. 다항식을 사용한 선형회귀를 다항 회귀라고 부른다.

03-3 특성 공학과 규제

다중 회귀

이전까지는 하나의 특성을 사용해 선형 회귀 모델을 훈련시켰다. 여러 개의 특성을 사용한 선형 회귀를 다중 회귀(multiple regression)라고 부른다. 1개의 특성을 사용했을 때 선형 회귀 모델은 직선을 학습하였다. 2개의 특성을 사용하면 선형 회귀는 평면을 학습한다.

특성이 많은 고차원에서는 선형 회귀가 매우 복잡한 모델을 표현할 수 있다. 하지만 선형 회귀를 단순한 직선으로 평면으로 생각하여 성능이 무조건 낮다고 오해하면 안된다.

각 특성을 제곱하여 추가하거나, 각 특성을 서로 곱해서 또 다른 특성을 만드는 등 기존의 특성을 사용하여 새로운 특성을 뽑아내는 작업을 특성 공학(feature engineering)이라고 부른다.

데이터 준비

판다스(pandas)는 유명한 데이터 분석 라이브러리이다. 데이터프레임(dataframe)은 판다스의 핵심 데이터 구조이다. 판다스를 사용하면 인터넷에서 데이터를 바로 다운로드하여 사용할 수 있다.

사이킷런의 변환기

사이킷런은 특성을 만들거나 전처리하기 위한 다양한 클래스를 제공한다. 사이킷런에서는 이런 클래스를 변환기(transformer)라고 부른다. 앞서 배운 LinearRegression같은 사이킷런의 모델 클래스는 추정기(estimator)라고도 부른다.

규제

특성의 개수를 크게 늘리면 선형 모델은 아주 강력해진다. 훈련 세트에 대해 거의 완벽하게 학습될 수 있기 때문이다. 하지만 이런 모델은 훈련 세트에 너무 과대적합되므로 테스트 세트에서는 형편 없는 점수를 만든다. 규제(regularization)는 머신러닝 모델이 훈련 세트를 너무 과도하게 학습하지 못하도록 훼방하는 것을 의미한다. 즉, 모델이 훈련 세트에 과대적합되지 않도록 만드는 것이다. 선형 회귀 모델의 경우, 이것은 특성에 곱해지는 계수(기울기)의 크기를 작게 만드는 일이다.

선형 회귀 모델에 규제를 추가한 모델을 릿지(ridge)와 라쏘(lasso)라고 부른다. 두 모델은 규제를 가하는 방식이 다르다. 릿지는 계쑤를 제곱한 값을 기준으로 규제를 적용하고, 라쏘는 계수의 절댓값을 기준으로 규제를 적용한다. 일반적으로 릿지를 조금 더 선호한다. 두 알고리즘 모두 계수의 크기를 줄이지만, 라쏘는 아예 0으로 만들 수도 있다.

릿지 회귀

릿지와 라쏘 모델을 사용할 때 규제의 양을 임의로 조절할 수 있다. 모델 객체를 만들 때 alpha 매개변수로 규제의 강도를 조절한다. alpha값이 크면 규제 강도가 세지므로 계수 값을 더 줄이고 조금 더 과소적합되도록 유도한다. alpha값이 작으면 계수를 줄이는 역할이 줄어들고 선형회귀 모델과 유사해지므로 과대적합될 가능성이 크다.

alpha값은 릿지 모델이 학습하는 것이 아닌, 우리가 지정해야 하는 값이다. 이렇게 머신러닝 모델이 학습할 수 없고 사람이 알려줘야 하는 파라미터를 하이퍼파라미터(hyperparameter)라고 부른다. 사이킷런과 같은 머신러닝 라이브러리에서 하이퍼파라미터는 클래스와 메서드의 매개변수로 표현된다.

라쏘 회귀

라쏘 모델도 릿지 회귀와 마찬가지로 alpha 매개변수로 규제의 강도를 조절할 수 있다.

profile
CS공부 하고 있는 수빈입니다.

0개의 댓글