Statistics/ML | Python

머신러닝이 뭐야 7탄 (feat. 그래프 그리기, KNN)

clodagh 2023. 2. 18. 21:20

Intro

- 그래프그리기

- KNN

- 유클리디안 거리

그래프 제목

  • pyplot 모듈의 title 함수를 사용하여 그래프에 제목을 붙일 수 있음
  • title함수 안에 문자열로 제목을 입력하고, fontsize 옵션에 제목의 폰트 사이즈를 지정가능
  • 그래프를 그리는 함수와 이름을 붙이는 함수는 하나의 코드 블럭 안에 작성하여 한 번에 실행해야함
    • x = data['특성이름'].value_counts().index
    • y = data['특성이름'].value_counts()
    • plt.bar(x, y)
    • plt.title('그래프이름', fontsize = 폰트크기)

축이름 추가

  • plt.xlabel('x축이름', fontsize = 폰트크기)
  • plt.ylabel('y축이름', fontsize = 폰트크기)

가로로 그리기

plt.barh(x, y)

 

축두께

x = data['Species'].value_counts().index

y = data['Species'].value_counts()

plt.bar(x, y, width = 두께숫자)

  • width의 기본값은 0.8

 

실습

sns.pairplot(iris)
plt.show()

# 두 개의 그룹으로 나누어져있는 것으로 판단됨

 

KNN의 의미 ?

  • K-최근접 이웃법(K-NN, K-Nearest Neighbors)은 새로운 데이터를 분류하기 위해 사용하는 머신러닝 알고리즘
  • 데이터들 사이의 거리를 측정하여 어떤 데이터가 가까운지 파악하고 새로운 데이터를 분류
    • 분류를 원하는 새로운 데이터와 가장 가까운 데이터가 A라면 새로운 데이터를 A로 분류
  • 기존 데이터의 정답을 알고 있어야 하기 때문에 지도학습 (A)

KNN 과정

  • K는 가장 가까운 데이터를 몇 개 까지 찾아보고 결정할지 정하는 숫자

  • K가 너무 작은 경우에는 지엽적으로 판단하여 잘못 분류될 수 있습니다. 반대로 K가 너무 크면 여러 분류의 데이터들을 모두 포함해 버려서 정확도가 떨어질 수 있음
  • 그리드 서치를 활용하면 K가 몇 일 때 가장 성능이 좋은지 알 수 있음

 

KNN의 장점과 단점

장점

  • 알고리즘이 간단하고 구현이 쉬움
  • 수치형 데이터를 분류하는 작업에 적용하기 용이

단점

  • 데이터가 큰 경우 계산이 느림
  • K-최근접 이웃법은 새로운 데이터가 들어오면 기존 데이터의 거리를 모두 계산한 후 분류 → 게으른 학습법

 

데이터의 거리 측정 : 유클리디안 거리

  • 두 점간의 거리를 자로 잴 수 있다고 생각했을 때, 최단 거리를 계산하는 방법
  • A에서 B까지의 직선 거리 = 빗변 길이 = 유클리디안 거리

KNN 실습

KNN 모델 생성

  • sklearn.neighbors 패키지에서 KNeighborsClassifier 모듈
  • input 특성과 output 특성을 지정해 주고 모델을 설정
  • 변수에 .fit 함수를 사용하여 X와 y데이터를 지정해 주면 모델이 완성
from sklearn.neighbors import KNeighborsClassifier

X = data[[input특성들]]
y = data[[output특성]]

knn_model = KNeighborsClassifier()
knn_model.fit(X, y)

score = knn_model.score(X, y)
score
  • 완성한 모델에 score 함수를 사용하여 데이터를 적용해 보면 모델이 정답을 맞춘 정확도를 알 수 있음
    • X가지고 맞춘 Y 예측값을 실제 y 값과 비교 (이래서 지도학습이라고 하는 것)