GO THE DISTANCE!

KNN 실습 - 국비지원무료교육

by makeany

문제정의

  • iris데이터를 사용해서 붓꽃을 분류하는 모델을 만들어보자

데이터 수집

  • sklearn에서 제공하는 데이터셋 사용
In [1]:
from sklearn.datasets import load_iris
iris = load_iris()

데이터 확인

In [3]:
iris.keys()
Out[3]:
dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename'])

데이터전처리

데이터 프레임으로 만들기

In [4]:
import pandas as pd
In [5]:
iris_pd = pd.DataFrame(iris.data, columns = iris.feature_names)
iris_pd.head()
Out[5]:
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)01234
5.1 3.5 1.4 0.2
4.9 3.0 1.4 0.2
4.7 3.2 1.3 0.2
4.6 3.1 1.5 0.2
5.0 3.6 1.4 0.2

이상치, 결측치 확인하기

In [6]:
iris_pd.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150 entries, 0 to 149
Data columns (total 4 columns):
 #   Column             Non-Null Count  Dtype  
---  ------             --------------  -----  
 0   sepal length (cm)  150 non-null    float64
 1   sepal width (cm)   150 non-null    float64
 2   petal length (cm)  150 non-null    float64
 3   petal width (cm)   150 non-null    float64
dtypes: float64(4)
memory usage: 4.8 KB
In [7]:
iris_pd.describe()
Out[7]:
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)countmeanstdmin25%50%75%max
150.000000 150.000000 150.000000 150.000000
5.843333 3.057333 3.758000 1.199333
0.828066 0.435866 1.765298 0.762238
4.300000 2.000000 1.000000 0.100000
5.100000 2.800000 1.600000 0.300000
5.800000 3.000000 4.350000 1.300000
6.400000 3.300000 5.100000 1.800000
7.900000 4.400000 6.900000 2.500000

탐색적 데이터 분석

모델 선택및 하이퍼 파라미터 튜닝

데이터 분리

In [8]:
from sklearn.model_selection import train_test_split
In [10]:
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size = 0.3, 
                                                   random_state = 6)
In [12]:
X_train.shape, X_test.shape, y_train.shape, y_test.shape
Out[12]:
((105, 4), (45, 4), (105,), (45,))
In [13]:
y_train
Out[13]:
array([0, 1, 0, 0, 1, 2, 2, 2, 0, 2, 0, 0, 0, 1, 2, 1, 1, 1, 2, 1, 1, 0,
       2, 0, 0, 1, 1, 2, 2, 2, 1, 1, 2, 2, 1, 1, 0, 2, 2, 0, 0, 2, 2, 1,
       2, 1, 0, 1, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 2, 0, 2, 1, 0, 2, 1,
       2, 1, 1, 0, 1, 2, 1, 0, 1, 0, 0, 1, 0, 1, 2, 1, 2, 2, 2, 1, 0, 2,
       0, 2, 0, 1, 2, 0, 1, 1, 0, 0, 1, 1, 2, 1, 2, 2, 2])

모델 불러오기

  • KNN
In [22]:
from sklearn.neighbors import KNeighborsClassifier
knn_model = KNeighborsClassifier(n_neighbors = 5)

학습

In [23]:
knn_model.fit(X_train, y_train)
Out[23]:
KNeighborsClassifier()

평가

In [24]:
knn_model.score(X_train, y_train)
Out[24]:
0.9809523809523809
In [25]:
knn_model.score(X_test, y_test)
Out[25]:
0.9777777777777777

하이퍼 파라미터 튜닝하고 결과 보기

  • 5, 6, 7단계가 한번에
  • n_neighbors를 바꿔가면서 train, test score를 확인하고 그래프로 그리기
In [26]:
# 점수를 지정할 list생성
train_list = []
test_list = []
n_neighbors_setting = range(1,11)
for n_n in n_neighbors_setting:
    knn_model = KNeighborsClassifier(n_neighbors=n_n)
    
    #학습
    knn_model.fit(X_train, y_train)
    #평가
    train_score = knn_model.score(X_train, y_train)
    test_score = knn_model.score(X_test, y_test)
    #저장
    train_list.append(train_score)
    test_list.append(test_score)
    
    

그래프로 확인하기

In [27]:
import matplotlib.pyplot as plt
In [28]:
plt.plot(n_neighbors_setting, train_list, label = 'Train')
plt.plot(n_neighbors_setting, test_list, label = 'Test')
plt.legend()
plt.show()
In [1]:
from IPython.core.display import display, HTML

display(HTML("<style>.container { width:90% !important; }</style>"))
 

 


스마트인재개발원 홈페이지 주소는? 바로 여기!!!
 

스마트인재개발원

취업과 나를 IT다! 빅데이터, 인공지능, 프로그래밍 전문 취업연계교육기관

smhrd.or.kr

 

블로그의 정보

막만들자!

makeany

활동하기