<핵심 키워드>
지도학습: 입력값과 타깃값이 존재해야 사용이 가능 (K-최근접 이웃 알고리즘도 지도학습에 속함)
비지도 학습: 타깃데이터가 없음, 예측하는게 아닌 입력데이터를 바탕으로 특징을 찾는데 적합함
훈련 세트: 모델을 훈련할 때 사용하는 데이터, 클수록 좋다
테스트 세트: 보통 전체 데이터의 20~30퍼센트만 활용, 전체 데이터가 엄청 크다면 1%만 써도 좋다.
사이킷런의 입력데이터와 출력데이터는 모두 넘파이 배열 형태로 나온다.
(행: 샘플, 열: 특성)
샘플: 배열 구성 요소
특성: 샘플 구성 요소
<알아두어야 하는 코드>
np.arange(15): 일정한 간격의 배열을 만듬, 기본간격은 1 [0,1,2...14] 의 넘파이 배열이 만들어짐
np.random.shuffle(Mylist): Mylist의 배열 요소들을 무작위로 섞음
np.random.seed(42): 시드값을 고정해서 랜덤으로 돌려도 항상 같은 결과가 나오게 함
arr[[0,3]]: 넘파이 배열에서 0, 1, 2번의 샘플 3개를 가져옴, 일반적인 슬라이스가 아니라 ':' 이며, [[]] 중괄호가 두개 쓰임을 유의
아래는 전체 코드 입니다.
# https://bit.ly/hg-02-1
#%%
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 = [[길이,무게] for 길이, 무게 in zip(fish_length, fish_weight)]
fish_target = [1]*35 + [0]*14 # 물고기별 타겟값 설정
#%%
# K-이웃 알고리즘 사이킷런 클래스 불러오기
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier(n_neighbors=5)
# 샘플링 편향 방지를 위한 섞기 자료 섞기 실행
import numpy as np
fish_data_arr = np.array(fish_data)
fish_data_target_arr = np.array(fish_target)
print(fish_data_arr.shape) # (샘플의수, 샘플구성요소(특성개수)) 를 출력한다 (49마리, 2개의 특성)
np.random.seed(30)
random_index = np.arange(49)
np.random.shuffle(random_index) # 인덱스 섞기
train_sample = fish_data_arr[random_index[:35]] # 넘파이 배열 또한 슬라이스 후 넘파이임
train_target = fish_data_target_arr[random_index[:35]]
test_sample = fish_data_arr[random_index[35:]]
test_target = fish_data_target_arr[random_index[35:]]
print(type(train_sample)) # <class 'numpy.ndarray'>
# 넘파이 배열 슬라이스할때 :가 아닌 , 임을 기억하자 그리고 [[]] 2개임
print(fish_data_arr[[0,2]], '물고기 0,1번 샘플 가져오기')
#%%
# 트레인셋과 테스트셋을 산포도로 그려보기
import matplotlib.pyplot as plt
plt.scatter(train_sample[:,0], train_sample[:,1]) # 이제 이해함 [:,0]의 의미는 모든 행에서 0번째 열을 가져온다는 의미(생선 길이)를 X축, 생선 무게를 Y축으로삼고 점 찍기
plt.scatter(test_sample[:,0], test_sample[:,1])
plt.xlabel('length')
plt.ylabel('weight')
plt.savefig('a.png')
# %%
# 이제 트레인셋을 학습시키고 테스트셋으로 평가 해보기
kn.fit(train_sample, train_target)
kn.score(test_sample, test_target) # 전부 다 맞춤
kn.predict(test_sample) # 테스트 입력값의 타겟값 리스트 출력됨
print(test_target)
'머신러닝 & 딥러닝' 카테고리의 다른 글
[혼자 공부하는 머신러닝] 03-2 선형회귀 그리고 다항회귀 (0) | 2024.01.21 |
---|---|
[혼자 공부하는 머신러닝] 02-2 스케일화, 데이터전처리, 표준점수 (0) | 2024.01.17 |
[혼자 공부하는 머신러닝] K 최근접이웃을 활용한 2class분류 (KNeighborsClassifier) (1) | 2024.01.13 |
[머신러닝/딥러닝] PART 2 (0) | 2023.07.17 |
[머신러닝/딥러닝] PART 1 (colab 활용 K-Nearest Neighbors 구현) (0) | 2023.07.17 |