선릉역 1번 출구

2 본문

Computer/AI

2

choideu 2021. 7. 7. 17:19

지도 학습(supervised learning) and 비지도 학습(unsupervised learning)

 

지도 학습에서는 데이터와 정답을 입력(input)과 타깃(target)이라고 하고 이 둘을 합쳐 훈련 데이터(training data)라고 한다.

1에서 입력으로 사용된 length, weight를 특성(feature)이라고 부른다.

지도 학습의 경우 정답(target)이 있어 알고리즘이 정답을 맞히는 것을 학습하고 비지도 학습의 경우 타깃이 없이 입력 데이터(input)만을 사용하기 때문에 무언가를 맞히는 것이 아닌 데이터를 잘 파악하거나 변형하는 데 도움을 준다.

ex) K-최근접 이웃 알고리즘도 input과 target을 사용했기 때문에 지도 학습 알고리즘임

 

Important thing

머신러닝에서 가장 중요한 것은 train settest set을 나누는 것이다.

말 그대로 train set은 훈련에 사용되는 데이터이고 test set은 평가에 사용되는 데이터이다.

+ 보통 test set은 전체 데이터에서 20~30%를 사용한다.

이때 set을 나누는 것에 있어서 샘플링 편향이라는 문제가 발생하기도 한다. 샘플링 편향(sampling bias)이란 훈련 세트와 테스트 세트에 샘플이 골고루 섞여 있지 않아 샘플링이 한쪽으로 치우쳤다는 의미로 샘플링 편향이 발생하면 제대로 된 지도 학습 모델을 만들 수 없다.

 

기준 맞추기

fish_length = [25.426.326.529.029.029.729.730.030.030.731.031.0
                31.532.032.032.033.033.033.533.534.034.034.535.0
                35.035.035.036.036.037.038.538.539.541.041.09.8
                10.510.611.011.211.311.811.812.012.212.413.014.315.0]
fish_weight = [242.0290.0340.0363.0430.0450.0500.0390.0450.0500.0475.0500.0
                500.0340.0600.0600.0700.0700.0610.0650.0575.0685.0620.0680.0
                700.0725.0720.0714.0850.01000.0920.0955.0925.0975.0950.06.7
                7.57.09.79.88.710.09.99.812.213.412.219.719.9]

import numpy as np

fish_data = np.column_stack((fish_length, fish_weight))
fish_target = np.concatenate((np.ones(35), np.zeros(14)))

from sklearn.model_selection import train_test_split

train_input, test_input, train_target, test_target = train_test_split(fish_data, fish_target, stratify = fish_target, random_state = 42)

from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()
kn.fit(train_input, train_target)
kn.score(test_input, test_target)

distances, indexes = kn.kneighbors([[25150]])

import matplotlib.pyplot as plt
plt.scatter(train_input[:,0], train_input[:,1])
plt.scatter(25150, marker = '^')
plt.scatter(train_input[indexes,0], train_input[indexes,1], marker='D')
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

print(kn.predict([[25150]])) //도미가 아닌 빙어로 예측

 

[[25, 150]]의 kneighbors메서드에서 5개의 값을 산점도로 표시한 것이다.

왜 더 멀리 있는 값을 가깝다고 파악했을까? 이유는 바로 기준을 맞추지 않았기 때문이다.

x축의 범위는 10~40, y축의 범위는 0~1000으로 y축으로 조금만 멀어져도 거리가 더 멀다고 계산되는 것이다.

이것을 두 특성의 스케일(scale)이 다르다고 말하고 특성값을 일정한 기준으로 맞춰주는 작업인 데이터 전처리(data processing)를 해야한다.

가장 널리 사용하는 전처리 방법 중 하나는 표준점수인데 각 특성값이 0에서 표준편차의 몇 배만큼 떨어져 있는지를 나타낸다.

 

데이터 전처리 결과 값이 잘나오는 것을 확인할 수 있다.

 

'Computer > AI' 카테고리의 다른 글

3-3  (0) 2021.07.08
3-2  (0) 2021.07.08
3-1  (0) 2021.07.08
1  (0) 2021.07.07
Anaconda 설치하기  (0) 2021.06.28
Comments