컴공돌이의 스터디 블로그

[Iris_3] - Iris DataSet에 Classifier 사용해 보기 본문

Machine Learning 실습/Iris

[Iris_3] - Iris DataSet에 Classifier 사용해 보기

제갈초아 2018. 3. 28. 16:03

* 이 글은 Iris DataSet을 이용한 실습 과정을 정리한 글입니다.


Iris DataSet에 Classifier 사용해 보기


  Iris DataSet은 4개의 변수 Sepal Length, Sepal Width, Petal Length, Petal Width와 4개의 변수마다 해당하는 Iris의 종류로 구성되어 있습니다. Iris의 종류가 결과값이기 때문에 Iris DataSet을 사용해서 할 수 있는 실습은 Classification이라는 것을 알 수 있습니다. Classification을 하기 위해서는 데이터에 Classifier를 적용시켜야 합니다. Classifier은 굉장히 종류가 다양하고 많지만 이번 글에서는 많이 알려지고 많이 쓰이는 Classifier들인 Logistic (Regression)Classifier, Decision Tree, Support Vector Machine, Naive Bayesian, K Nearest Neighbor, Random Forest, Gradient Boosting, Neural Network를 사용해서 Iris DataSet을 Classification 해보고자 합니다.


  위에서 언급한 Classifier들은 sklearn이라는 패키지에 전부 구현이 되어 있기 때문에 어렵지 않게 실습을 할 수 있습니다.


  우선 데이터를 가져오는 방법은 앞의 글과 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
from sklearn.datasets import load_iris
from matplotlib import pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
 
Iris = load_iris()
 
Iris_Data = pd.DataFrame(data= np.c_[Iris['data'], Iris['target']], columns= Iris['feature_names'+ ['target'])
Iris_Data['target'= Iris_Data['target'].map({0"setosa"1"versicolor"2"virginica"})
 
X_Data = Iris_Data.iloc[:,:-1]
Y_Data = Iris_Data.iloc[:,[-1]]
cs


  여기에 필요한 Classifier들을 import 해줍니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.neural_network import MLPClassifier
 
models = []
models.append(("LR",LogisticRegression()))
models.append(("DT",DecisionTreeClassifier()))
models.append(("SVM",SVC()))
models.append(("NB",GaussianNB()))
models.append(("KNN",KNeighborsClassifier()))
models.append(("RF",RandomForestClassifier()))
models.append(("GB",GradientBoostingClassifier()))
models.append(("ANN",MLPClassifier()))
cs


  우선 Iris DataSet에 들어있는 모든 데이터를 각각의 Classifier에 학습시킨 후 예측한 Class와 실제 Class를 비교한 정확도를 측정해보겠습니다.


1
2
3
4
5
6
from sklearn.metrics import accuracy_score
 
for name,model in models:
    model.fit(X_Data, Y_Data.values.ravel())
    Y_Pred = model.predict(X_Data)
    print(name, "'s Accuracy is ", accuracy_score(Y_Data, Y_Pred))
cs


  결과를 살펴보니 대부분의 Classifier가 굉장히 높은 정확도를 가지고 있음을 확인할 수 있습니다. 하지만 여기서 Iris DataSet의 모든 데이터를 Train Data로 사용하였고 같은 데이터를 Test Data로 사용하였기 때문에 위의 결과는 데이터에 Overfitting 되어 있을 가능성이 있습니다. 따라서 전체 데이터에서 2개의 데이터로 나누어 하나는 Train Data로 사용하고 다른 하나는 Test Data로 사용해서 다시한번 정확도를 확인해 보겠습니다. 이런 방법을 몇번 반복적으로 실행하는 방법을 교차검증이라고 합니다. 교차검증에 사용하는 방법에도 여러가지가 있지만 여기서는 k-fold를 사용한 교차검증을 해보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from matplotlib import pyplot as plt
from sklearn import model_selection
 
results = []
names = []
 
for name,model in models:
    kfold = model_selection.KFold(n_splits=5, random_state=7, shuffle=True)
    cv_results = model_selection.cross_val_score(model, X_Data, Y_Data.values.ravel() , cv=kfold, scoring='accuracy')    
    results.append(cv_results)
    names.append(name)
fig = plt.figure()
 
fig.suptitle('Classifier Comparison')
ax = fig.add_subplot(111)
plt.boxplot(results)
ax.set_xticklabels(names)
cs



  교차검증을 통해서 각각의 Classifier에 Iris DataSet을 넣어본 결과 위와 같은 그래프가 나왔습니다. 위의 그림에서 알 수 있는 사실은 대부분의 Classifier는 Iris DataSet에 대해서 좋은 결과를 얻는다는 사실과, 어떠한 데이터가 학습데이터로 사용되느냐에 따라서 정확도는 0.9까지 떨어질 수 있다는 사실입니다.


  이것으로 각각의 Classifier를 사용해보는 것에 대한 글을 마치겠습니다.

반응형
Comments