[혼공머신]1-3
[혼공머신]1-3
머신러닝의 기본 개념
특성
특성은 데이터를 표현하는 하나의 성질입니다. 예를 들어, 생선 데이터를 길이와 무게 특성으로 나타낼 수 있습니다.
훈련
머신러닝 알고리즘이 데이터에서 규칙을 찾는 과정을 훈련이라고 합니다. 사이킷런에서는 fit()
메서드를 사용합니다.
k-최근접 이웃 알고리즘
k-최근접 이웃 알고리즘은 가장 간단한 머신러닝 알고리즘 중 하나로, 특정 규칙을 찾기보다는 전체 데이터를 메모리에 저장해 둡니다.
모델
머신러닝 프로그램에서 알고리즘이 구현된 객체를 모델이라고 부릅니다. 종종 알고리즘 자체를 모델이라고 부르기도 합니다.
정확도
정확도는 정확한 답을 몇 개 맞혔는지를 백분율로 나타낸 값입니다. 사이킷런에서는 0~1 사이의 값으로 출력됩니다.
\[\text{정확도} = \frac{\text{정확히 맞힌 개수}}{\text{전체 데이터 개수}}\]핵심 패키지와 함수
Matplotlib
scatter()
: 산점도를 그리는 함수입니다. x축 값과 y축 값을 리스트 또는 넘파이 배열로 전달합니다.c
매개변수로 색깔을 지정할 수 있습니다.
Scikit-learn
KNeighborsClassifier()
: k-최근접 이웃 분류 모델을 만드는 클래스입니다.n_neighbors
: 이웃의 개수를 지정합니다. 기본값은 5입니다.p
: 거리를 재는 방법을 지정합니다. 1일 경우 맨해튼 거리, 2일 경우 유클리디안 거리를 사용합니다. 기본값은 2입니다.n_jobs
: 사용할 CPU 코어를 지정합니다. -1로 설정하면 모든 CPU 코어를 사용합니다.
fit()
: 모델을 훈련할 때 사용하는 메서드입니다. 처음 두 매개변수로 훈련에 사용할 특성과 정답 데이터를 전달합니다.predict()
: 훈련된 모델을 사용하여 예측할 때 사용하는 메서드입니다. 특성 데이터 하나만 매개변수로 받습니다.score()
: 훈련된 모델의 성능을 측정합니다. 처음 두 매개변수로 특성과 정답 데이터를 전달합니다. 이 메서드는predict()
메서드로 예측을 수행한 후, 분류 모델일 경우 정답과 비교하여 올바르게 예측한 개수의 비율을 반환합니다.
코드 예제
데이터 준비
import matplotlib.pyplot as plt
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
# 데이터 준비
fish_length = [25.4, 26.3, 26.5, 29.0, 29.0, 30.0, 31.2, 31.1, 31.1, 30.4, 30.4, 30.9, 32.0, 32.7, 33.5, 34.0, 34.0, 34.5, 35.0, 35.0]
fish_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 490.0, 450.0, 500.0, 475.0, 500.0, 500.0, 500.0, 600.0, 600.0, 700.0, 700.0, 610.0]
# numpy 배열로 변환
fish_data = np.column_stack((fish_length, fish_weight))
fish_target = np.ones(20)
# 산점도 그리기
plt.scatter(fish_length, fish_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.show()
모델 훈련
# KNeighborsClassifier 객체 생성
kn = KNeighborsClassifier(n_neighbors=5)
# 모델 훈련
kn.fit(fish_data, fish_target)
# 새로운 데이터 예측
new_data = [[30, 600]]
print(kn.predict(new_data))
모델 성능 평가
# 모델의 정확도 평가
score = kn.score(fish_data, fish_target)
print(f"모델의 정확도: {score}")
확인 문제
# 최근접 이웃 개수 변화에 따른 모델 성능 평가
for n in range(5, 50):
kn.n_neighbors = n
score = kn.score(fish_data, fish_target)
if score < 1:
print(n, score)
break
댓글남기기