1 분 소요

[혼공머신]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

댓글남기기