데이터를 불러와서 훈련데이터와 테스트데이터로 나누는 코드는 아래와 같습니다.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
#1.데이터 불러오기
md=load_iris() #key:value 형태의 bunch 클래스, 딕셔너리와 비슷함
#2.데이터 분리해서 변수에 넣기
data_train,data_test,target_train,target_test=train_test_split(md['data'],md['target'],random_state=0)
오늘은 k 최근접이웃 알고리즘을 사용하여 머신러닝 모델을 만들어봅시다.
함수를 불러오고, 모델을 생성합니다.
from sklearn.neighbors import KNeighborsClassifier
#3.모델 생성
my_model=KNeighborsClassifier(n_neighbors=3,weights='uniform',p=2)
아직 머신러닝을 하기 전입니다. '이러이러한 조건으로 모델을 만들 것이다' 라는 의미라고 생각하시면 됩니다. n_neighbors 는 이웃의 개수입니다. 데이터를 분류할 때 몇개의 이웃을 사용하여 분류할지 정해줍니다. 3개로 입력하겠습니다. weight 는 가중치인데 거리 별로 가중치를 같게 둘지 다르게 둘지를 결정합니다. 여기서는 uniform 으로 두겠습니다. p는 거리계산 방식인데 유클리드거리인 2를 입력하였습니다.
자세한 옵션들은 아래 링크를 참고하세요.
https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html
이제 데이터를 이용하여 모델을 학습시키겠습니다. fit 메소드를 사용합니다.
#4.모델 훈련
my_model.fit(data_train,target_train)
학습된 모델로 테스트 데이터의 꽃 종류를 예측해봅시다. predict 메소드를 사용합니다.
#5.테스트 데이터 입력
target_predict=my_model.predict(data_test)
결과는 아래와 같습니다.
>>> target_predict
array([2, 1, 0, 2, 0, 2, 0, 1, 1, 1, 2, 1, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1,
0, 0, 2, 0, 0, 1, 1, 0, 2, 1, 0, 2, 2, 1, 0, 2])
맞게 분류한 것인지 평가해봅시다. 우리는 정답을 알고 있습니다. target_test와 비교해봅시다.
>>> target_predict==target_test
array([ True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, False])
상당히 정확합니다. 맞춘 비율을 계산하면 정량적 평가가 가능합니다. 0과 1로만 이루어진 데이터이므로 단순히 평균을 구하는 것이 비율이 됩니다.
>>> import numpy as np
>>> np.mean(target_predict==target_test)
0.9736842105263158
정확도는 약 97%입니다. 전체 코드는 아래와 같습니다.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import pandas as pd
import matplotlib.pyplot as plt
#1.데이터 불러오기
md=load_iris() #key:value 형태의 bunch 클래스, 딕셔너리와 비슷함
#2.데이터 분리해서 변수에 넣기
data_train,data_test,target_train,target_test=train_test_split(md['data'],md['target'],random_state=0)
from sklearn.neighbors import KNeighborsClassifier
#3.모델 생성
my_model=KNeighborsClassifier(n_neighbors=3,weights='uniform',p=2)
#4.모델 훈련
my_model.fit(data_train,target_train)
#5.테스트 데이터 입력
target_predict=my_model.predict(data_test)
#6.테스트 데이터 평가
import numpy as np
accuracy=round(np.mean(target_predict==target_test),2)
'머신러닝 (지도학습) > k최근접 이웃' 카테고리의 다른 글
[파이썬 머신러닝, k최근접 이웃] 3. 산점도행렬 그려보기 (0) | 2022.03.17 |
---|---|
[파이썬 머신러닝, k최근접 이웃] 2. 트레이닝셋, 테스트셋 나누기 (0) | 2022.03.12 |
[파이썬 머신러닝, k최근접 이웃] 1. Iris 데이터 살펴보기 (0) | 2022.03.10 |
댓글