일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 테스트세트
- predict메소드
- HTML
- LENGTH_INDEFINITE
- 스낵바
- 웹사이트 공개
- score메소드
- K최근접이웃 회귀
- 머신러닝
- 버튼 상속
- 넘파이
- position
- kneighbors()
- relative
- fit메소드
- JavaScript
- 표준화 z
- 데이터 전처릴
- 선택자 조건
- 픽셀 깨짐
- Absolute
- 외부css
- hover
- 메모리 객체화
- 레이아웃
- apapter
- 훈련세트
- 지도학습
- CSS
- 스크롤뷰
- Today
- Total
베짱이와 노는 개미
ML#6 - K최근접 이웃 회귀 본문
머신러닝에서의 학습은 지도학습과 비지도학습이 있다
지도학습은 다시 회귀와 분류로 나뉜다
오늘은 회귀를 공부해보자
회귀는 임의의 어떤 숫자를 예측하는 것이다.
내년도 경제성장률 예측, 배달 도착 시간 예측 등등이 예시에 포함된다
오늘은 회귀방법 중에 K최근접 이웃 회귀에 대해서 알아보겠다
일단 K최근접이웃알고리즘의 원리를 다시한번 보면
예측하련느 샘플에 가장 가까운 샘플 K개 를 선택한다.
이 샘플들의 무리(클래스)를 확인하고 다수 클래스를 새로운 샘플의 클래스로 예측한다.
예를들어 삼각형과 사각형모양의 샘플이 여러개있는 산점도에서
우리가 예측하려는 샘플 주변에 사각형2개 삼각형 1개가 있다면 사각형이 2개로 다수이기 때문에
예측하려는 샘플의 클래스는 사각형이 되는것이다.
K최근접이웃 회귀는 K최근접이웃 알고리즘과 다른점이 무엇이냐면 '회귀'이기 떄문에 클래스가 아니라 임의의 수치를 예측한다는 것이다.
그렇다면 예측하는 수치는 과연 무엇일까? 바로 평균값으로 예측하는것이다.
예측하려는 샘플 주변에 100, 80, 60 이라는값이 있다면 이 3 수치의 평균인 80으로 예측하는 것이다.
자 이제 코드로 한번 알아보자 직접 구현해보자
농어라는 물고기의 무게를 예측해볼것이다.
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsRegressor
perch_length = np.array([8.4, 13.7, 15.0, 16.2, 17.4, 18.0, 18.7, 19.0, 19.6, 20.0, 21.0,
21.0, 21.0, 21.3, 22.0, 22.0, 22.0, 22.0, 22.0, 22.5, 22.5, 22.7,
23.0, 23.5, 24.0, 24.0, 24.6, 25.0, 25.6, 26.5, 27.3, 27.5, 27.5,
27.5, 28.0, 28.7, 30.0, 32.8, 34.5, 35.0, 36.5, 36.0, 37.0, 37.0,
39.0, 39.0, 39.0, 40.0, 40.0, 40.0, 40.0, 42.0, 43.0, 43.0, 43.5,
44.0])
perch_weight = np.array([5.9, 32.0, 40.0, 51.5, 70.0, 100.0, 78.0, 80.0, 85.0, 85.0, 110.0,
115.0, 125.0, 130.0, 120.0, 120.0, 130.0, 135.0, 110.0, 130.0,
150.0, 145.0, 150.0, 170.0, 225.0, 145.0, 188.0, 180.0, 197.0,
218.0, 300.0, 260.0, 265.0, 250.0, 250.0, 300.0, 320.0, 514.0,
556.0, 840.0, 685.0, 700.0, 700.0, 690.0, 900.0, 650.0, 820.0,
850.0, 900.0, 1015.0, 820.0, 1100.0, 1000.0, 1100.0, 1000.0,
1000.0])
print(perch_weight.shape) #1차원 배열임을 확인
train_input, test_input, train_target, test_target = train_test_split(perch_length, perch_weight, random_state=42) #모두다 1차원 배열
train_input=train_input.reshape(-1,1) #사이킷런에 훈련세트를 사용하기위해서는 훈련세트가 2차원 배열이어야함
test_input=test_input.reshape(-1,1) #그래서 reshape메소드를 이용하여 2차원으로 바꿔줌
knr = KNeighborsRegressor()
knr.fit(train_input, train_target)
print(knr.score(test_input, test_target)) #R제곱 값(결정계수) 1에 가까울수록 타겟과 비슷하게 예측한 것
처음 보는 함수가 보인다 reshape() 이다.
reshape()는 배열의 크기를 지정할수 있는 메소드이다.
reshape(원하는 행 수, 원하는 열 수)로 매개변수를 전달한다.
예를들어 arr=[1,2,3,4,5,6]이라는 배열이 있을때
arr.reshape(3,2)라고 하면 3행 2열의 2차원 배열로 변형해준다
[[1,2]
[3,4]
[5,6]]
이렇게 나온다
여기서 하나의 매개변수에 -1 값을 넣으면 알아서 배정해라 라는 뜻이다
예를들어 같은 배열 arr에 arr.reshape(-1,3)이라고 하면
행의개수 -1에 열의 개수 3
다시말해서 열의 개수 3개를 맞추기 위해서 행의 개수는 알아서 맞춰라 가 되는것이다.
그럼 원소의 개수가 총 6개이므로 열이 3개라면 행은 2개여야한다.
이 행의 개수 2개 라는값을 알아서 찾아라 라는 말이 -1이다
원소의 개수가 너무 많거나 모를때 사용하기 유용한 스킬이다.
'AI(머신러닝+딥러닝) 프로젝트' 카테고리의 다른 글
ML#5 - 데이터 전처리 (0) | 2021.08.06 |
---|---|
ML#4 - 파이썬 함수 정리(수시 업데이트) (0) | 2021.08.06 |
ML#3-테스트세트,훈련세트 (0) | 2021.08.04 |
AI#2-지도학습 (0) | 2021.07.31 |
AI#1 - 머신러닝과 딥러닝은 무엇인가? (0) | 2021.07.30 |