글과 사진, 그리고 이야기

IE & SWCON/Machine Learning

[혼공머딥] chapter3

뱃놀이가자 2023. 8. 8. 11:28
728x90

* 혼자공부하는 머신러닝+딥러닝의 교재의 학습 요약 내용입니다
 
https://hongong.hanbit.co.kr/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D/

 

혼자 공부하는 머신러닝+딥러닝

혼자 공부하는 머신러닝 딥러닝, 무료 동영상 강의, 머신러닝+딥러닝 용어집을 다운로드 하세요. 포기하지 마세요! 독학으로 충분히 하실 수 있습니다. ‘때론 혼자, 때론 같이’ 하며 힘이 되겠

hongong.hanbit.co.kr

* 경희대학교 데이터분석 동아리 KHUDA의 2023년 8월 기초세션 1주차 학습내용입니다.
https://cafe.naver.com/khuda

 

KHUDA : 네이버 카페

경희대학교 데이터 분석 동아리 KHUDA

cafe.naver.com

* 2차배포 및 상업적의도로의 사용 목적 및 의도가 없습니다
* 모든 저작권은 책 출판사 한빛미디어에 있습니다 !
 


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

지도학습 알고리즘은 크게 분류와 회귀로 나뉜다. 앞서 배웠듯 지도학습이란 입력과 출력값이 존재하는 경우에 사용하는 머신러닝 학습 방법이다. 그 중에서 회귀란 클래스 중 하나로 분류하는 것이 아닌 임의의 어떤 숫자를 예측하는 문제이다. 

 

 

k-최근접 이웃 알고리즘이 거리(유클리드, 맨해튼)로 판단하는 알고리즘이라면 회귀 알고리즘에서는 샘플의 타깃이 어떤 클래스가 아니라 임의의 수치인 것이다. 이외의 과정은 유사하다

 

다른점이란 회귀에서는 점수로서 평가를 하는데 이 점수를 결정계수(coefficient of determination)라고 부른다. R^2으로 부른다. 

이 점수에서 알 수 있듯이 타깃과 예측값의 차이가 작을 수록 결정 계수의 값이 높아질 것임을 추론할 수 있다. 점수를 높이기 위해서는 평가하는 데이터를 잘 셔플하기, 훈련과 테스트 데이터 세트를 적절히 분리하기, 데이터의 이상치 및 전처리를 확인해야한다. 다만 이럴 경우 과대적합의 경우를 주의해야 한다. 

 

과대적합이란 훈련세트와 테스트 세트의 점수를 비교했을 때 훈련 세트가 너무 높으면 과대적합이고, 반대거나 두 점수가 모두 낮으면 과소적합일 수 있다. 과대적합은 훈련세트에만 너무 잘 맞도록 fit 한 경우에 발생하고 과소적합이란 데이터 세트의 크기가 너무 작을 때 발생하기도 한다. 

따라서 과소적합을 해결하기 위해서는 모델을 덜 복잡하게 하는 것이다. 교재의 예시처럼 k의 값을 5->3정도로 하향조정하는 방법이 있을 수 있다. 당연하게도 과대적합을 해결하기 위해서는 모델을 더 복잡하게 즉 k의 값을 상향조정하는 것이 방법일 수 있겠다. 

 

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

reshape( ) 메서드를 사용하는 방법이 있다. (42, )의 배열 형태를 2차원인 (42,1)로 만들기 위해서 reshape(42,1)로 사용할 수 있다. 물론 (21,2)이렇게도 가능하긴 하겠지만 그럼 데이터에 변환이 생기니까 학습에 부적절하겠다. 데이터의 크기는 알 수 없을 경우가 많기 때문에 나머지 원소개수로 체우면서 두번째 크기를 1로 함으로 적절한 reshape 메서드 사용 방법을 알려준다. 

 

 

chapter 03-2 선형 회귀

k-최근접 이웃 알고리즘은 한계가 있다. 바로 x, y 좌표로서 예측을 하는 것이 아닌 말 그대로 기준으로 가까운 점들의 평균값을 나타내는 것이다. 그렇기에 50으로 마커를 찍어도, 과장하여 100으로 마커를 찍어도 기준에서 가장 가까운 주황생 다이아몬드 마커의 무게 평균을 나타낼 것이다.

따라서 이런 한계가 존재함으로 비교적 선형 관계를 가지는 예시처럼 (길이, 무게) 에서는 선형회귀 Linear Regression을 사용하고는 한다. 모든 점을 비교하며 대표할 수 있는 특수성을 가장 잘 나타낸 임의의 직선을 찾아내는 머신러닝 알고리즘 방법이라고 생각하면 되겠다.

이를테면 이렇게. 

선형회귀 역시 사이킷런의 모델 클래스이므로 fit, score, predict의 메서드는 동일하게 사용한다. 

우리가 직선이라 함은 기억을 떠올려봤을 때 중학교 1학년때 배웠다, x의 기울기와 y절편을 활용하여 직선의 방정식을 만들 수 있다. 선형회귀에서는 이런 기울기를 보통 lr.coef  로 y절편에 해당하는 값은 lr.intercept_ 로 나타낸다. 

 

물론 직선형태로만 회귀가 가능한 것 만은 아니다. 직선형태에서는 아무래도 정비례관계이므로 불가능한 일이 존재하기도 한다. 이를테면 예시처럼 무게가 음수가 나온다던지...처럼!

 

이를 해결하기 위해 최적의 곡선형태를 찾을 수 있고 이는 다항 회귀이다. 변수의 종류는 동일한 상태로 길이과 무게이기만 직선 형태가 아닌 제곱 이상의 곡선 형태로 최대한 근사화 시키는 것이다. 

 

이러한 형태로 2차항의 그래프를 그리려면 제곱된 항이 훈련 세트에 추가되어야 한다. 넘파이를 사용하면 아주 간단히 만들 수 있다. 길이 제곱의 데이터를 column에 추가하는 것이다. 길이^2에 해당하는 변수를 간단히 다른 왕길이 정도로 변수를 잡아서 무게를 길이와 왕길이의 선형회귀로 표현 할 수 있다는 점에서 선형회귀로 판단한다. 다항식을 활용한 선형회귀를 앞으로 다항회귀로 부르겠다. 

선형회귀

 

다항회귀

 

두가지의 점수차이를 비교하면 다항회귀를 하는 이유를 짐작할 수 있겠다. 

chapter 03-3 특성 공학과 규제

맞다. 회귀에서는 특성이 많을수록 엄청난 효과를 낸다. 따라서 농어의 예시처럼 길이랑 무게에 더해 높이, 두께 등을 안다면 그 성능은 배가 될 수 있다. 다만 이럴 경우 다중회귀로 문제를 풀어야 한다. 2차원 평면에서가 아닌 3차원 혹은 그 이상으로 접근하므로 매우 복잡해진다는 특징도 가진다. 만약 무게를 길이, 높이, 두께로 표현한다면 4차원이 되겠지만 4차원을 머릿속으로 생각하기란 몹시 어렵다, 따라서 기존의 특성을 사용해 새로운 특성을 뽑아냄으로 차원도 축소하며 성능을 높이는 방법이 존재한다. 여기서는 농어 길이x농어 높이를 새로운 특성으로 만드는 것이다. 이런 작업을 특성 공학 (feature engineering)이라고 부른다. 

특성이란 결국 분석가가 판단하는 영역이므로 적절한 근거가 필요하겠다. 또한 어려울 수도 있다. 

한편, 사이킷런에서는 특성을 만들거나 전처리하기 위한 다양한 클래스를 제공한다. 이를 변환기라고 부르고 fit transform  메서드를 제공한다. PolynomialFeatures( ) 클래스를 변환기로 사용한다. 

2와 3으로 만들수 있는 숫자, 이항분포를 생각하시면 될듯? 

당연하겠지만 특성의 개수를 늘리면 선형 모델을 아주 강력해진다. 훈련 세트에 대해 거의 완벽하게 학습을 할 수 있겟지만 테스트 세트에 대해서는 형편없는 점수를 만든다. 따라서 특성을 늘리는 것이 능사가 아니다, 

이렇게 테스트 세트의 점수를 높이기 위한 규제를 함과 동시에 스케일에 따른 정규화도 동시에 해줘야 한다. 

(놀랍게도 제공해줌)

규제를 가하는 모델은 릿지와 라쏘 두가지가 크게 존재하는데 릿지는 계수를 제곱한 값을 기준으로, 라쏘는 절댓값을 기준으로 적용한다. 

 


질문사항 

 

1. 다항 회귀에서 항의 갯수를 올리는 정도와 스코어의 차이가 얼마나 차이가 날까요?

2. 특성공학에 대해 추가 설명 및 다른 사용 방법(논문 예시)이 있을까요?

3. 선형회귀에서 사람이 선택하는 하이퍼 파라미터에는 무엇이 있을까요? 

728x90

'IE & SWCON > Machine Learning' 카테고리의 다른 글

[혼공머딥] chapter 6  (0) 2023.08.29
[혼공머딥] chapter 5  (1) 2023.08.22
[혼공머딥] chapter 4  (0) 2023.08.15
[혼공머딥] chapter 1,2  (0) 2023.07.30
[선형대수학] 벡터  (0) 2023.07.15