- 분류 : 샘플을 몇개의 클래스 중 한가지로 분류(확인 해내는것)
- 회귀 : 기존 데이터를 통해 임의의 데이터를 예측하는것
분류 문제를 통달했으니, 회귀 문제로 넘어가보자.
바나나의 길이에 따른 바나나의 무게를 예측하는 코드를 한번 작성해보자
1). 바나나 길이와 무게 데이터를 정의한다.
그래프로 확인
2). 사이킷런을 사용하려면 데이터의 형태가 2차원이어야함으로, 우리가 가지고있는 데이터를 2차원 데이터로 변환한다.
Train set = 42개의 데이터
Test set = 14개의 데이터
3). K-최근접알고리즘 적용 및 훈련 => 정확도 확인
테스트세트와 훈련세트에대한 정확도가 아주 높게 나왔다.
하지만 회귀에서는 분류와는 다르게 정확한 예측 숫자를 맞추는것은 불가능 하기 때문에, 결정계수라는 것으로 평가를 하게된다.
결정계수 = R²
SSE = (타깃-예측)²
SST = (타깃-평균)² 으로 구할수 있다.
하지만 타깃과 예측한 값의 차이를 구해서 얼마나 예측이 벗어났는지 확인하는것이 더 간단하다.
그래서 사이킷런에서 제공하는 mean_absolute_error(테스트타깃,예측데이터) 를 사용하여 확인한다.
mean_absolute_error(테스트타깃,예측데이터) = 타깃과 예측의 절대값 오차를 평균낸다.
4). 만들어진 모델로 테스트 세트를 예측해본다
=> 결과 : 우리가 설계한 모델이 예측한 무게가 타깃값과 평균적으로 19g정도 차이난다 라는것을 확인 할 수 있다.
여기까지 우리가 만든 모델이 k-최근접 이웃 회귀 모델을 통해 바나나의 길이,무게를 예측하는 것을 만들어보았다.
순서
데이터 형태 변경
-> KNeighborRegressor로 훈련
-> 데이터 세트를 통한 정확도 확인
-> 테스트세트를 입력하여 예측데이터 만들기
-> 테스트 타깃에 대한 평균 절대값 오차 계산
오차를 구하는 방법으로 생각
여기까지 진행했고, 지금 우리가 만든 모델의 정확도를 다시한번 보자
여기서 과대적합, 과소적합이라는 개념이 나온다.!!!!
기본 K-이웃 회귀 알고리즘을 통해 모델을 훈련시켜 테스트세트와, 훈련세트에 대한 정확도를 봤을때,
각각 0.9928 / 0.9698 이라는 것을 확인 할 수있다.
하지만 테스트세트 정확도가 훈련세트 정확도보다 높다는것은 뭔가 이상하지 않는가?
우리는 훈련세트로 모델을 훈련시켰는데, 정확도가 더 낮다니...?
이런 상황이 과소 적합 = 모델이 너무 단순하여 훈련세트가 제대로 훈련되지 않은 경우이다.
그럼 반대로 훈련세트가 마냥 테스트세트정확도 보다 높다? 좋은결과인가!?
결론은 아니다 훈련세트에만 잘맞춰진 모델이라고 평가 할 수 있다.
그렇다면 우리는 과소 적합 상황이 발생하였으니 이것을 해결해 보자.
- 과소적합 해결
1). 과소적합은 모델이 너무 단순할때 발생한다고 한다. 그래서 우리는 모델을 조금더 복잡하게 만들어줘야하는데, 간단하게 K-최근접 이웃 알고리즘의 이웃의 갯수를 줄여 훈련세트에 국지적인 패턴을 민감하게 만들어야한다.
우리 코드는 기본 neighbor가 5로 훈련하였는데, 이 값을 조금 줄여 3으로 만들어보자.
=>결과 : 테스트세트의 정확도와 훈련세트의 정확도가 거의 비슷해진것을 볼수있다. => 좋은 결과
또한 훈련세트의 정확도가 조금 더 높은것을 보니 과소적합이 해결되었다.
2). 테스트 세트로 다시 예측
=> 결과 : 35g
우리가 만든 모델의 예측오차는 35g정도 나오는것 같다. 더 정확하게 예측하는 모델을 만드려면 ...?
같이 계속 공부해보자..
'AI > Machine Learning' 카테고리의 다른 글
[Python] 머신러닝 기초-6 다중회귀(Multiple Regression) 알고리즘을 통한 연습 / 다중회귀란? (0) | 2021.01.18 |
---|---|
[Python] 머신러닝 기초-5 선형회귀(Linear Regression) 알고리즘을 통한 연습 / 선형회귀란? 다항회귀란? (0) | 2021.01.18 |
[Python] 머신러닝 기초-3 K-Neighbors (최근접)알고리즘을 통한 연습- 분류 (0) | 2021.01.15 |
[Python] 머신러닝 기초-2 K-Neighbors (최근접)알고리즘을 통한 연습- 분류 (0) | 2021.01.15 |
[Python] 머신러닝 기초-1 Scikit-learn을 사용하여 물고기 예측 (0) | 2021.01.15 |