좌충우돌 개발자의 길

7강 : 선형회귀 본문

STUDYING/머신러닝&딥러닝

7강 : 선형회귀

sustronaut 2021. 7. 18. 22:48

최근접 이웃의 문제점 : 50cm-1kg 농어를 1.5kg 이 아닌 1kg으로 판단한다??

→ 위 그래프 : 다이아몬드가 이웃인데 아래 그래프인 이웃으로만 나타낸 그래프를 보면 길이가 차이가 나도 이웃들로 판단하기 때문에 정확한 값이 예측되지 않음

 

선형회귀

  • 위의 문제를 해결할 수 있는 방법

→ 세번째 직선이 가장 좋은 직선

 

선형회귀 - 사이킷런에서 사용법

y = ax +b 꼴의 직선 방정식으로 이루어짐

from sklearn.linear_model import LinerRegression을 이용해 불러옴

→ ls.coef_ 처럼 _ 를 사용하는 이유 :

사이킷런에서는 학습한 어떤 데이터들을 저장시, 다른 속성과 구분하기 위해 사용 ⇒ 아 이 모델은 내가 작성한 것이 아닌 어떤 학습을 해서 나온 데이터구나

→ coef, intercept : 각각 x절편(==a), y절편(==b)

 

학습한 직선 그리기

→ 그래프 : 늘어나는 길이와 무게 데이터의 추세를 잘 접근하고 있다는 것을 알 수 있음

→ 하지만, 음수가 나오는 구간이 있기에 이차방정식으로 이 부분을 해결해야함

→ score 구한 값들 보면 위아래 두개는 과대적합이고 최근접과 첫번째 score 비교했을 때는 과소적합되었다.

 

 

다항 회귀

  • 위 그래프 해결방안

  • 길이를 제곱한 항이 훈련세트에 적용해야 이차방정식이 만들어짐

→ 제곱한 것과 안제곱한 것을 붙이는 방법 : column_stack

 

→ 결과 : 1573g으로 더 근접하게 나왔음

 

학습한 직선 그리기

  • 직선의 그래프를 잘게 잘라서 합치면 곡선처럼 그래프가 나옴 (15~49까지 잘게 잘라 붙여줌)
  • 앞선 그래프에서 구한 a b c 들을 이용해 이차방정식 그래프를 그림
  • 농어의 길이와 무게를 넣은 값을 삼각형으로 그래프에 표기함

결과 : 0.970 0.977 로 전보다 R제곱이 올라갔지만 과소적합되어 있어 이 문제를 해결해야한다.

 

주의점 : 이번 문제는 length 하나만 다루고 있기에 그래프로 확인하면서 조절할 수 있었지만 여러 데이터를 한번에 다루어야할 때는 score의 값을 보면서 고치고 다른 알고리즘으로 만든 score값과 상대적으로 비교해가며 최적의 알고리즘을 찾아야한다.