반응형
# 머신러닝 알고리즘
1. 지도학습
- 훈련 데이터 : {
데이터 : 입력,
정답 : 타깃
}
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]
fish_data = [[l, w] for l, w in zip(fish_length, fish_weight)]
fish_target = [1]*35 + [0]*14
# 도미 35마리와 빙어 14마리로 전체 49개의 샘플이 있고, 길이와 무게 2개의 특성을 갖는다.
# 도미인 처음 35개 데이터를 훈련세트로, 나머지 14개(빙어)를 테스트 세트로 이용해보도록 하자
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()
# 슬라이싱 [0:35] -> 인덱스 0부터 35 전까지(35는 미포함) 데이터를 리턴
# 시작 인덱스가 0인 경우 생략 가능 [:35]
# 마찬가지로 뒤가 마지막 인덱스인 경우 생략 가능 [35:]
train_input = fish_data[:35] # 1~35 데이터 인덱스로는 0~34
train_target = fish_target[:35]
test_input = fish_data[35:] # 36~49 데이터 인덱스로는 35~48
test_target = fish_target[35:]
kn = kn.fit(train_input, train_target)
kn.score(test_input, test_target)
# 결과인 정확도가 0.0이 나온다....
# 너무 당연하다 도미 데이터만 훈련시켰기때문에 빙어데이터와 구분할 수 있는 방법이 학습되지 않았기 때문이다.
# 넘파이를 배울 타이밍 - 파이썬의 대표적인 배열 라이브러리
import numpy as np
input_arr = np.array(fish_data)
target_arr = np.array(fish_target)
print(input_arr)
print(input_arr.shape) #(샘플수, 특성 수) 출력
# index를 랜덤하게 돌려 편향성이 없으면서도 도미와 빙어가 골고루 들어갈 수 있도록 test set를 분리한다.
np.random.seed(42)
index = np.arange(49)
np.random.shuffle(index)
train_input = input_arr[index[:35]]
train_target = target_arr[index[:35]]
test_input = input_arr[index[35:]]
test_target = target_arr[index[35:]]
# 산점도를 그려 골고루 분리가 되었는지 확인해 본다.
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()
# 새로 만든 데이터를 다시 학습시킨다
kn = kn.fit(train_input, train_target)
kn.score(test_input, test_target)
# 정확도는 1.0! 어디한번 테스트 세트를 돌려보자!
print('test_input')
print(kn.predict(test_input))
print('test data')
print(test_target)
위 소스에 대한 실행결과는 아래와 같음
[[ 25.4 242. ]
[ 26.3 290. ]
[ 26.5 340. ]
[ 29. 363. ]
[ 29. 430. ]
[ 29.7 450. ]
[ 29.7 500. ]
[ 30. 390. ]
[ 30. 450. ]
[ 30.7 500. ]
[ 31. 475. ]
[ 31. 500. ]
[ 31.5 500. ]
[ 32. 340. ]
[ 32. 600. ]
[ 32. 600. ]
[ 33. 700. ]
[ 33. 700. ]
[ 33.5 610. ]
[ 33.5 650. ]
[ 34. 575. ]
[ 34. 685. ]
[ 34.5 620. ]
[ 35. 680. ]
[ 35. 700. ]
[ 35. 725. ]
[ 35. 720. ]
[ 36. 714. ]
[ 36. 850. ]
[ 37. 1000. ]
[ 38.5 920. ]
[ 38.5 955. ]
[ 39.5 925. ]
[ 41. 975. ]
[ 41. 950. ]
[ 9.8 6.7]
[ 10.5 7.5]
[ 10.6 7. ]
[ 11. 9.7]
[ 11.2 9.8]
[ 11.3 8.7]
[ 11.8 10. ]
[ 11.8 9.9]
[ 12. 9.8]
[ 12.2 12.2]
[ 12.4 13.4]
[ 13. 12.2]
[ 14.3 19.7]
[ 15. 19.9]]
(49, 2)

test_input
[0 0 1 0 1 1 1 0 1 1 0 1 1 0]
test data
[0 0 1 0 1 1 1 0 1 1 0 1 1 0]
반응형
'language & Framework > python' 카테고리의 다른 글
[머신러닝] 02-2 데이터 전처리 (0) | 2023.05.07 |
---|---|
[머신러닝] 01-1~01-3 KNeghborsClassifier 객체 (0) | 2023.04.13 |
python - 머신러닝 기초 공부 (0) | 2023.04.11 |