본문 바로가기
데이터 사이언스/하계 AI 중급과정

Ch 1. ML 실습을 위한 환경

by 수학과인데 공대생 2023. 7. 10.
728x90

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

n 값이 커질 수록 score값이 떨어짐을 확인할 수 있다.

728x90