[혼자 공부하는 머신러닝 + 딥러닝] 8강_특성 공학과 규제 알아보기
8강_특성 공학과 규제 알아보기
- 여러 특성을 사용한 다중 회귀에 대해 배우고 사이킷런의 여러 도구를 사용해 봄.
- 복잡한 모델의 과대적합을 막기 위한 릿지와 라쏘 회귀를 배움
- <혼자 공부하는 머신러닝+딥러닝>의 코드 저장소
다중 회귀
- 여러 개의 특성을 사용한 선형 회귀
- 특성이 2개면 선형 회귀는 평면을 학습함.
- 특성이 많은 고차원에서는 선형 회귀가 매우 복잡한 모델을 표현할 수 있음.
- 선형 회귀를 단순한 직선이나 평면으로 생각하여 성능이 무조건 낮다고 오해하면 안됨.
데이터 준비
- 판다스: 데이터 분석 라이브러리
- 데이터 프레임: 판다스의 핵심 데이터 구조
- read_csv()
- to_numpy()
사이킷런의 변환기
- 사이킷런에는 변환기라 부르는 특성을 만들거나 전처리하는 클래스가 있음.
- fit(), transform()
- PolynomialFeatures (sklearn.preprocessing)
- 각 특성을 제곱한 항을 추가하고 특성끼리 서로 곱한 항을 추가함.
- 훈련(fit: 새롭게 만들 특성 조합을 찾음)을 해야 (transform: 실제로 데이터를 변환)이 가능함. 사이킷런의 일관된 api 때문에 두 단계로 나뉘어져 있음. 두 메서드를 하나로 붙인 fit_transform 메서드도 있음.
- 변환기는 타깃 데이터 없이 입력 데이터를 변환함.
- get_feature_names()
- 특성이 어떻게 만들어졌는지 확인하는 메서드
- include_bias = False 를 꼭 지정해야 하는지? include_bias = False 로 지정하지 않아도 사이킷런 모델은 자동으로 특성에 추가된 절편 항을 무시함. 하지만 혼돈을 피하기 위해 명시적으로 지정하는 경우 있음.
- 꼭 훈련 세트에 적용했던 변환기로 테스트 세트를 변환해야 하는지? 따로 변환해도 됨. 하지만 항상 훈련 세트를 기준으로 테스트 세트를 변환하는 습관을 들이는 것이 좋음.
다중 회귀 모델 훈련하기
- LinearRegression 클래스 임포트
- Train_poly 사용해 모델 학습
- 과소적합 해결
- 특성의 개수를 크게 늘일 때
- 선형 모델 강력해짐
- 거의 완벽 학습
- 하지만 훈련 세트에 너무 과대적합되므로 테스트 세트에서는 형편없는 점수 나옴
규제
- 규제는 머신러닝 모델이 훈련 세트를 너무 과도하게 학습하지 못하도록 훼방하는 것을 말함.
- 즉 모델이 훈련 세트에 과대적합되지 않도록 만드는 것.
- 선형 회귀 모델의 경우 특성에 곱해지는 계수(또는 기울기)의 크기를 작게 만드는 일.
- 특성의 스케일 고려해야함 (정규화 필요)
- 훈련 세트로 학습한 변환기를 사용해 테스트 세트까지 변환해야함
- 선형 회귀 모델에 규제를 추가한 모델을 릿지와 라쏘라고 부름. (sklearn.linear_model 패키지)
릿지 회귀
- 계수를 제곱한 값을 기준으로 규제를 적용.
- 규제의 양을 임의로 조절 가능 (alpha 매개변수로 규제의 강도 조절)
- alpha 값이 크면 규제 강도가 세지므로 계수 값을 더 줄이고 조금 더 과소적합되도록 유도
- allpha 값이 작으면 계수를 줄이는 역할이 줄어들고 선형 회귀 모델과 유사해지므로 과대적합될 가능성이 큼.
- 적절한 alpha 값을 찾는 한 가지 방법은 alpha 값에 대한 결정계수 값의 그래프를 그려보는 것
라쏘 회귀
- 계수의 절대값을 기준으로 규제를 적용.
- 라쏘는 계수의 크기를 아예 0으로 만들 수 있음.
- 라쏘 모델 훈련할 때 ConvergenceWarning 이란 경고가 발생할 수 있음.
- 최적의 계수를 찾기 위해 반복적인 계산을 수행하는데, 지정한 반복 횟수가 부족할 때 이런 경고가 발생함.
- 반복 횟수를 충분히 늘려줌.
- 릿지와 마찬가지로 과대적합을 잘 억제하고 테스트 세트의 성능을 크게 높임.
- coef_속성 (계수 설정)
모델의 과대적합을 제어하기
- 과소적합 제어를 위해 다른 특성들을 활용하고 다중 회귀 모델을 훈련시킴.
- 다항 특성을 많이 추가하여 훈련세트에서 거의 완벽에 가까운 점수를 얻는 모델을 훈련.
- 강력한 성능, 하지만 선형회귀 모델 제약 도구 필요.
- 사이킷런을 사용해 다중 회귀 모델과 릿지, 라쏘 모델을 훈련시킴.
- 규제 양을 조절하기 위해 alpha 값 찾음.
키워드로 끝내는 핵심 포인트
- 다중 회귀
- 여러 개의 특성을 사용하는 회귀 모델.
- 특성이 많으면 선형 모델은 강력한 성능을 발휘함.
- 특성 공학 (사이킷런 도구 사용)
- 주어진 특성을 조합하여 새로운 특성을 만드는 일련의 작업 과정.
- 릿지
- 규제가 있는 선형 회귀 모델 중 하나
- 선형 모델의 계수를 작게 만들어 과대적합을 완화시킴.
- 릿지는 비교적 효과가 좋아 널리 사용하는 규제 방법.
- 라쏘
- 또 다른 규제가 있는 선형 회귀 모델.
- 릿지와 달리 계수 값을 아예 0으로 만들 수도 있음.
- 하이퍼파라미터
- 머신러닝 알고리즘이 학습하지 않는 파라미터
- 사람이 사전에 지정해야 함
- 대표적으로 릿지와 라쏘의 규제 강도 alpha 파라미터
핵심 패키지와 함수
- pandas
- read_csv()
- CSV 파일을 로컬 컴퓨터나 인터넷에서 읽어 판다스 데이터프레임으로 변환하는 함수 (sep / header / skiprows / nrows)
- scikit-learn
- PolynomiaFeatures
- 주어진 특성을 조합하여 새로운 특성을 만듬 (degree / interaction_only / include_bias)
- Ridge
- 규제가 있는 회귀 알고리즘인 릿지 회귀 모델을 훈련 (alpha / solver / random_state)
- Lasso
- 규제가 있는 회귀 알고리즘인 라쏘 회귀 모델을 훈련
- 최적의 모델을 찾기 위해 좌표축을 따라 최적화를 수행해가는 좌표 하강법을 사용 (alpha / random_state / max_iter)
확인문제
- a, b, c 특성으로 이루어진 훈련 세트를 PolynomialFeatures (degree = 3) 으로 변환. 다음 중 이 변환된 데이터에 포함되지 않는 특성은?!
- 다음 중 특성을 표준화하는 사이킷런 변환기 클래스는 ?
- 다음 중 과대적합과 과소적합을 올바르게 표현하지 못한 것은?
댓글
댓글 쓰기