티스토리 뷰

SMALL

분류 (classification): 여러 개의 종류(클래스)에서 하나를 구별하는 것

이진분류 (binary classification) : 두 개의 클래스에서 하나 고르기

 

- 이진분류 : 도미와 빙어 분류하기

1. 데이터 확인 : matplotlib(맷플롯립) 사용

matplotlib : 파이썬에서 과학계산용 그래프를 그리는 패키지

 

코드

length = ... length에 대한 데이터
weight = ... weight에 대한 데이터

import matplotlib.pyplot as plt

plt.scatter(length, weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

결과 : 그래프가 그려짐

 

 

2. 사이킷런으로 이용할 데이터 2차원 리스트 데이터로 만들어주기.

 사이킷런은 2차원 리스트만 데이터로 사용할 수 있기 때문에 기존 데이터를 2차원 리스트 데이터로 만들어준다.

2차원 리스트 데이터란 리스트 안의 리스트. 즉, [[길이, 무게], [길이, 무게] ....] 이런 구조이다.

 

코드

# 도미 데이터 35개
bream_length = [도미 길이 데이터...]
bream_weight = [도미 무게 데이터...]

# 빙어 데이터 14
smelt_length = [빙어 길이 데이터...]
smelt_weight = [빙어 무게 데이터...]


# 데이터 합치기
length = bream_length + smelt_length
weight = bream_weight + smelt_weight

# for문으로 2차원 리스트로 만듦 -> why? 사이킷런은 2차원 리스트의 데이터를 사용함.
fish_data = [[l,w] for l, w in zip(length, weight)]
print(fish_data) # 결과 : [[길이, 무게], [길이, 무게]...]

fish_target = [1]*35 + [0]*14
print(fish_target) # 결과 : [1,... *35, 0,... *14]

 

 

3. 머신러닝 프로그램 사용

scikit-learn(사이킷런)의 K-Nearest Neighbors (k-최근접 이웃) 알고리즘을 사용할 예정

 

- K Nearest Neighbors Algorithm : K-최근접 이웃 알고리즘

 fit()메서드를 통해 훈련 진행 : 전달된 데이터 저장. predict()메서드로 새로운 데이터를 예측하면 기존 데이터에서 가장 가까운 데이터를 참고하여 평가

KNeighborsClassifier()은 k-최근접 이웃 분류 모델을 만드는 사이킷런 클래스이다.

 KNeighborsClassifier클래스의 데이터 참고 기본값은 5이다. 데이터 참고 개수는 n_neighbors 매개변수로 바꿀 수 있다.

 

과정

(1) 임포트

from sklearn.neighbors import KNeighborsClassifier
 
: sklearn에 있는 k-Nearest Neighbors 알고리즘을 사용하겠다.

 

(2) 임포트한 KNeighborsClassifier클래스의 객체를 만든다.

(3) 훈련 : 데이터 기준을 찾기 위해 객체를 학습시킨다.

fit()메서드 : 사이킷런 모델을 훈련할 때 사용하는 메서드. 처음 두 매개변수로 훈련에 사용할 특성과 정답 데이터 전달

(4) 정확도 : 객체 훈련이 잘 되었는지 평가

score()메서드 : 훈련된 사이킷런 모델의 성능 측정. 처음 두 매개변수로 특성과 정답 데이터를 전달. 정답과 비교하여 올바르게 예측한 개수의 비율을 반환.

(5) 예측 : 새로운 데이터의 정답 예측.

predict()메서드 : 사이킷런 모델을 훈련하고 예측할 때 사용하는 메서드. 특성 데이터 하나만 매개변수로 받는다.

 

 

코드

# 머신러닝 프로그램

# (1) 임포트
from sklearn.neighbors import KNeighborsClassifier

# (2) 객체 만들기
kn = KNeighborsClassifier()

# (3) 훈련
kn.fit(fish_data, fish_target)

# (4) 평가
kn.score(fish_data, fish_target)

# k-Nearest Neighbors Algorithm
# (5) 예측
kn.predict([30, 600])

 

추가 과정

(1) _fit_X 속성에는 fish_data를 모두 가지고 있음.

(2) _y 속성에는 fish_target을 모두 가지고 있음.

(3) n_neighbors 매개변수로 참고 데이터 개수 바꾸기

# 추가 코드

# (1) fish_data
print(kn._fit_X)

# (2) fish_target
print(kn._y)

# (3) n_neighbors
kn10 = KNeighborsClassifier(n_neighbors = 10) # 참고 데이터를 10개로 한 kn10모델

kn10.fit(fish_data, fish_target)
kn10.score(fish_data, fish_target) # 값은 1

 

반응형
LIST
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함