SERi
훈련세트와 테스트세트 본문
'혼자 공부하는 머신러닝+딥러닝'의 유투브 강의 및 도서를 통해 공부한 내용입니다.
머신러닝 알고리즘은⭐ 지도 학습 과 비지도 학습 으로 나뉜다.
데이터와 정답을 입력과 타깃이라고 부르며, 이것을 훈련데이터라고 부른다.
1️⃣ 지도 학습
- 입력(데이터)와 타깃(정답)으로 이루어진 훈련데이터가 필요
- 입력과 타깃을 전달하여 모델을 훈련한 다음 새로운 데이터를 예측하는데 활용
2️⃣ 비지도 학습
- 입력(데이터)만 있을 경우 비지도 학습 알고리즘을 사용
- 타깃 데이터가 없음. 따라서 무엇을 예측하는것이 아니라 입력 데이터에서 어떠한 특증을 찾는데 주로 활용
머신러닝 알고리즘의 성능을 제대로 평가하려면 훈련 데이터와 평가에 사용할 데이터가 각각 달라야 한다.
📁 평가를 위해 또 다른 데이터를 준비
📁 이미 준비된 데이터 중에서 일부를 떼어내어 활용
일반적으로 후자의 경우 가 많음
3️⃣ 훈련 세트
- 모델을 훈련할 때 사용하는 데이터
- 훈련세트가 클수록 좋음
- 전체 데이터에서 테스트세트를 제외한 모든데이터를 사용
4️⃣ 테스트 세트
- 평가에 사용하는 데이터
- 전체 데이터에서 20 ~ 30% 를 테스트 세트로 주로 사용
훈련 테스트와 테스트 세트.ipynb¶
In [1]:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
In [2]:
fish_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0,
31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0,
35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0, 9.8,
10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0]
fish_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0,
500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0,
700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0, 6.7,
7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9]
In [3]:
fish_data = [[l,w] for l, w in zip(fish_length, fish_weight)]
fish_target = [1]*35 + [0]*14
In [4]:
train_input = fish_data[:35]
train_target = fish_target[:35]
test_input = fish_data[35:]
test_target = fish_target[35:]
In [5]:
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()
In [6]:
kn = kn.fit(train_input, train_target)
kn.score(test_input, test_target)
Out[6]:
0.0
-> 샘플링 편항으로
train_input 데이터에는 빙어가 없고, test_input 데이터는 도미가 없으므로 score가 0으로 나오고 있음
In [7]:
# 데이터를 배열로 변환
input_arr = np.array(fish_data)
target_arr = np.array(fish_target)
In [8]:
# 0 ~ 48 까지 1씩 증가하는 인덱스 생성
index = np.arange(49)
index
Out[8]:
array([ 0, 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, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48])
In [9]:
# 인덱스를 랜덤하게 섞어줌
np.random.shuffle(index)
index
Out[9]:
array([ 8, 43, 16, 38, 47, 19, 24, 25, 20, 46, 42, 31, 36, 11, 5, 23, 26,
2, 30, 10, 3, 48, 22, 40, 44, 21, 1, 37, 7, 13, 18, 6, 29, 27,
35, 34, 17, 39, 41, 33, 14, 4, 15, 0, 9, 12, 28, 32, 45])
In [10]:
train_input = input_arr[index[:35]]
train_target = target_arr[index[:35]]
test_input = input_arr[index[35:]]
test_target = target_arr[index[35:]]
In [11]:
import matplotlib.pyplot as plt
plt.scatter(train_input[:,0], train_input[:,1])
plt.scatter(test_input[:,0], test_input[:,1])
plt.xlabel("length")
plt.ylabel("weight")
plt.show()
In [12]:
kn.fit(train_input, train_target)
Out[12]:
KNeighborsClassifier()In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
KNeighborsClassifier()
In [13]:
kn.score(test_input, test_target)
Out[13]:
1.0
In [14]:
kn.predict(test_input)
Out[14]:
array([1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0])
In [15]:
test_target
Out[15]:
array([1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0])
'온라인강의 > 혼자공부하는 머신러닝+딥러닝' 카테고리의 다른 글
| 2-1. 데이터 전처리 (0) | 2022.12.02 |
|---|
Comments