1. 환경 설정
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 임의값 속성 정의
np.random.seed(42)
# 그래프 속성 정의
plt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12
plt.rcParams['font.family'] = 'serif'
plt.rcParams['font.serif'] = ['Times New Roman'] + plt.rcParams['font.serif']
# 구글 드라이브 연동
from google.colab import drive
drive.mount('/content/drive')
2. 물고기 분류 문제
a물고기와 b물고기 데이터가 주어진다.
각각의 길이와 무게가 list에 담겨져있다.
-> a물고기 정보
a_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]
a_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]
-> b물고기 정보
b_length = [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]
b_weight = [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]
각 물고기들의 정보를 산점도로 표시해 시각화해보자.
plt.xlabel("Length")
plt.ylabel("Weight")
plt.scatter(a_length, a_weight, color = 'red')
plt.scatter(b_length, b_weight, color = 'blue')
plt.show()
a물고기와 b물고기가 확연하게 분리된 것을 확인할 수 있다.
train_set을 설정해보자.
두 개의 데이터가 주어져있으므로 두 데이터를 합치는 과정이 필요하다.
length = a_length + b_length
weight = a_weight + b_weight
train_set = [[l, w] for l, w in zip(length, weight)] # zip 함수를 써서 두 자료를 묶음
시각화 그래프에서 a물고기와 b물고기의 구분이 명확하므로 a물고기 정보의 개수 35개를 '1'에 대응하고 b물고기 정보의 개수 14개를 '0'에 대응해보자.
target_set = [1] * 35 + [0] * 14 # len(a_length) = 35, len(b_length) = 14
k - 최근접 이웃 알고리즘
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier # 객체 생성
kn.fit(train_set, target_set) # 학습
만들어진 train_set과 target_set을 객체에 학습시킨다.
만약 길이가 50이고 몸무게가 600이라는 정보가 주어졌다면 a물고기에 가까울까 b물고기에 가까울까?
predict() 함수를 통해 확인할 수 있다.
kn.predict([[50, 600]])
-> array([1])
a물고기에 가깝다는 결과가 나온다.
matplotlib을 통해 확인해보자.
plt.xlabel("Length")
plt.ylabel("Weight")
plt.scatter(a_length, a_weight, color = 'red')
plt.scatter(b_length, b_weight, color = 'blue')
plt.scatter(50, 600, marker = '^')
plt.show()
다른 데이터가 주어졌다면 a, b물고기가 아닌 다른 물고기로 분류되었을 수도 있지만
학습된 객체는 그나마 편차가 작은 a물고기를 선택했음을 확인할 수 있다.
하이퍼파라미터 찾기
하이퍼파라미터는 모델링을 할 때 사용자가 직접 세팅을 해주는 값이다. 머신러닝 모델을 사용할 때 사용자가 직접 세팅해야하는 모든 값을 하이퍼파라미터라고 한다. 파라미터와의 차이는 사용자가 직접 설정을 가하면 하이퍼파라미터, 모델 혹은 데이터에 의해 결정되면 파라미터라고 한다.
kn = KNeighborClassifier()
kn.fit(train_set, target_set)
for n in range(5, 50) :
# 최근접 이웃 개수 설정
kn.n_neighbors = n # 객체생성 하이퍼파라미터
s = kn.score(train_set, target_set)
print('result = ' + str(n) + ', ' + str(s))
n 값이 커질 수록 score값이 떨어짐을 확인할 수 있다.
'데이터 사이언스 > 하계 AI 중급과정' 카테고리의 다른 글
Ch 4. Polynomial Regression (다항회귀) (0) | 2023.07.12 |
---|---|
Ch 3. Linear Regression(선형회귀) (0) | 2023.07.12 |
Ch 2. 훈련 및 테스트 세트 (Train set, Test set) (0) | 2023.07.11 |
2. 데이터 세트 분리 (0) | 2023.06.30 |
1. Linear Regression (선형 회귀) (0) | 2023.06.29 |