Chapter 03 회귀 알고리즘과 모델 규제 ▶ 농어의 무게를 예측하라!
03-1 k-최근접 이웃 회귀 ▶ 회귀 문제를 이해하고 k-최근접 이웃 알고리즘으로 풀어 보기
회귀와 분류
- 회귀: 임의의 어떤 숫자를 예측하는 문제
- 회귀 알고리즘의 시작, Francis Galton 그는 키가 큰 사람의 아이가 부모보다 더 크지 않는다는 사실을 관찰하고 이를 ‘평균으로 회귀한다’라고 표현. → 그 후 두 변수 사이의 상관관계를 분석하는 방법 = 회귀라 명명.
- 분류: 클래스 중 하나로 분류하는 문제
k-최근접 이웃 회귀
k-최근접 이웃 분류 알고리즘
- 예측하려는 샘플에 가장 가까운 샘플 k개를 선택
- 그다음 이 샘플들의 클래스를 확인하여 다수 클래스를 새로운 샘플의 클래스로 예측
k-최근접 이웃 회귀
- 예측하려는 샘플에 가장 가까운 샘플에 k개를 선택
- 이웃 샘플의 수치를 사용해 새로운 샘플 x의 타깃을 예측
- 방법: 이 수치들의 평균 이용
데이터 준비
- 사이킷런에 사용할 훈련 세트 = 2차원 배열
- 차원 변경: reshape() 활용
reshape() 사용 주의사항
- 크기가 바뀐 새로운 배열을 반환할 때
- 지정한 크기 ≠ 원본 배열에 있는 원소의 개수 ⇒ 에러 발생
- e.g. (4,) → (2, 3) | 원본 배열 원소(4개) ≠ 지정한 크기(2x3 = 6개)
reshape() 추가 기능
- 크기에 -1을 지정하면 나머지 원소 개수로 모두 채울 수 있음.
결정계수(R²)
(분류) 정확도 / (회귀) 결정 계수
- 분류: 정답을 맞힌 개수의 비율, 정확도
- 회귀: 예측하는 값이나 타깃 모두 임의의 수치이므로, 결정 계수(coefficient of determination)이라 명명.
- 결정계수 값은 직감적으로 얼마나 좋은지 이해 하기 힘듬
- So, 타깃과 예측한 값 사이의 값을 추가로 구해본다.
- R^2 = (타깃 - 예측)^2의 합 / (타깃 - 평균)^2의 합
사이킷런의 score() 점수
- score() 메서드가 출력하는 값은 높을수록 좋은 것
과대적합 vs. 과소적합
- 과대적합(overfitting): 훈련 세트에서 점수가 굉장히 좋았는데, 테스트 세트에서는 점수가 굉장히 나쁜 경우, 훈련 세트가 과대적합
- 훈련 세트 점수 Good ≠ 테스트 세트 점수 Bad
- 과소적합(underfitting): 훈련 세트보다 테스트 세트의 점수가 높거나 두 점수가 너무 낮은 경우
- 발생원인: 훈련 세트와 테스트 세트의 크기가 매우 작아서
과소적합 문제 해결
- k-최근접 이웃 알고리즘에서 이웃의 개수 k를 줄여서 해결
sickit-learn
- KNeighborsRegressor: k-최근접 이웃 회귀 모델을 만드는 사이킷런 클래스
- mean_absolute_error(): 회귀 모델의 평균 절댓값 오차를 계산
- mean_squared_error: 평균 제곱 오차 계산
numpy
- reshape(): 배열의 크기를 바꾸는 메서드
확인 문제
- k-최근접 이웃 회귀에서는 새로운 샘플에 대한 예측을 어떻게 만드나요?
- 정답: 2번 / 이웃 샘플의 타깃값의 평균
- 과대적합과 과소적합에 대한 이해를 돕기 위해 복잡한 모델과 단순한 모델을 만들겠습니다. 앞서 만든 k-최근접 이웃 회귀 모델의 k 값을 1, 5, 10으로 바꿔가며 훈련해 보세요. 그다음 농어의 길이를 5에서 45까지 바꿔가며 예측을 만들어 그래프로 나타내 보세요. 이 커짐에 따라 모델이 단순해지는 것을 볼 수 있나요?
03-2 선형 회귀 ▶ 사이킷런으로 선형 회귀 모델 만들어 보기
선형 회귀(linear regression)
- 어떤 직선을 학습하는 알고리즘
- 모델 파라미터
- coef_
- intercept_
- 모델 기반 학습
- 최적의 모델 파라미터를 찾는 것
- 훈련 기반 학습
- 훈련 세트를 저장하는 것이 훈련의 전부
다항 회귀(ploynomial regression)
- 다항식(ploynomial)을 사용한 선형 회귀
scikit-learn
- LinearRegression: 사이킷런의 선형 회귀 클래스
- fit_intercept 매개변수를 False로 지정 시 절편 학습 X (기본값 True)
- 학습된 모델의 coef_속성: 특성에 대한 계수를 포함한 배열
- 이 배열의 크기는 특성의 개수와 동일
- intercept_속성: 절편이 저장
확인 문제
- 선형 회귀 모델이 찾은 방정식의 계수를 무엇이라고 부르나요?
- 정답: 4번 / 모델 파라미터
- 사이킷런에서 다항 회귀 모델을 훈련할 수 있는 클래스는 무엇인가요?
- 정답: 1번 / LinearRegression
03-3 특성 공학과 규제 ▶ 특성 공학과 규제 알아보기
선형 회귀
- 특성이 많을 수록 효과가 좋다.
다중 회귀(multiple regression)
- 1개의 특성 사용: 직선
- 2개의 특성 사용: 평면
특성 공학(feature engineering)
- 기존의 특성을 사용해 새로운 특성을 뽑아내는 작업
데이터 준비
- csv 파일 → 판다스 데이터 프레임 → 넘파이 배열
- csv 파일 → pd.read_csv() → to_numpy()
사이킷런의 변환기(transformer)
- 특성을 만들거나 전처리하기 위한 클래스 제공
- 사이킷런의 모델 클래스(공통)
- fit(), score(), predit()
- 변환기 클래스(공통)
- fit(), transform()
- 훈련(fit) 해야 변환(transform) 가능
다중 회귀 모델 훈련하기
PolynomialFeatures 클래스의 degress 매개변수를 사용하여 고차항의 최대 차수 지정
규제(regularization)
- 머신러닝 모델이 훈련 세트를 너무 과도하게 학습하지 못하도록 훼방하는 것
- 즉, 모델이 훈련 세트에 과대적합되지 않도록 만드는 것
- 선형 회귀 모델의 경우 특성에 곱해지는 계수(또는 기울기)의 크기를 작게 만드는 일
릿지(ridge)와 라쏘(lasso)
- 선형 회귀 모델에 규제를 추가한 모델
- 모델 규제 가하는 방법
- 릿지: 계수를 제곱한 값을 기준으로 규제
- 라쏘: 계수의 절댓값을 기준으로 규제
- 계수의 크기를 아예 0으로 만들 수 있음.
규제의 강도 조절 방법 | alpha 값
- alpha 값이 크면 규제의 강도 세짐
- 계수 값을 더 줄이고 과소적합 쪽으로
- alpha 값이 작으면 규제의 강도 작아짐
- 계수 값을 더 키우고 과대적합 쪽으로
- 적절한 alpha 값을 찾는 법
- 결정계수 R^2 값의 그래프 그려보기
- 훈련 세트와 테스트 세트의 점수가 가장 가까운 지점 = 최적의 alpha 값
하이퍼파라미터
- 머신러닝 모델이 학습할 수 없고 사람이 알려줘야 하는 파라미터
pandas
- read_csv(): csv 파일 읽기
- 매개변수
- sep: csv 파일의 구분자
- header: 데이터프레임의 열 이름으로 사용할 csv 파일의 행 번호 지정
- skiprows: 건너뛸 행의 개수 지정
- nrows: 파일에서 읽을 행의 개수 지정
- 매개변수
scikit-learn
- PolynomialFeatures: 주어진 특성을 조합하여 새로운 특성 만듦.
- Ridge: 릿지 회귀 모델 훈련
- Lasso: 라쏘 회귀 모델 훈련
확인 문제
- a, b, c 특성으로 이루어진 훈련 세트를 PolynomialFeatures(degree=3)으로 변환했습니다. 다음 중 이 변환 데이터에 포함되지 않는 특성은 무엇인가요?
- 정답: 4번 / a * b^3
- 해설: 최고차수가 3이므로 추가되는 특성은 1, a, b, c, a², b², c², ab, bc, ac, abc, ab², ac². bc², ba², ca², cb², a³ , b³ , c³
- 다음 중 특성을 표준화하는 사이킷런 변환기 클래스는 무엇인가요?
- 정답: 3번 / StandardScaler
- 다음 중 과대적합과 과소적합을 올바르게 표현하지 못한 것은 무엇인가요?
- 정답: 2번 / 과대적합인 모델은 테스트 세트의 점수
도 높습니다. 크게 낮다.
- 정답: 2번 / 과대적합인 모델은 테스트 세트의 점수
혼공학습단 2주차 소감
선형대수학을 처음 배웠던 옛날 그때처럼 선형 회귀도 단어만 보고는 와닿지 않았다. 하지만, 실제 matplotlib을 이용해 그래프를 그려봄으로써 이해도를 높힐 수 있었다.
1가지 특성을 가지고 훈련시키던 단계에서 2가지 이상의 특성을 가지고 훈련시키는 다항, 다중 회귀로 확장하면서 더 많은 종류의 데이터를 다룰 수 있게 되었다.
작년에 ADsP를 취득하면서, 릿지와 라쏘 모델을 무작정 외운적이 있었다. 회귀 모델에는 릿지와 라쏘 모델이 있어! 라고 주입만 했었는데, 이번 주 학습을 통해 해당 모델들의 차이점과 왜 사용하는지를 명확히 알 수 있었다.
이 밖에도 하이퍼파라미터라는 용어도 많이 들어보긴 했는데, 모호했던 개념을 정리할 수 있었다.
손 코딩 자료
반응형
'코딩 | 개념 정리 > Machine Learning & Deep Learning' 카테고리의 다른 글
[혼공머신] 6주차_딥러닝을 시작합니다. (0) | 2024.02.11 |
---|---|
[혼공머신] 5주차_비지도 학습 (0) | 2024.02.03 |
[혼공머신] 4주차_트리 알고리즘 (0) | 2024.01.27 |
[혼공머신] 3주차_다양한 분류 알고리즘 (0) | 2024.01.20 |
[혼공머신] 1주차_인공지능 기초와 데이터 처리 (3) | 2024.01.06 |