EXPLORATION 2. Iris의 세 가지 품종 분류해보기

EXP 2. Iris의 세 가지 품종 분류해보기_220106

2.1 들어가며


2.1.1 학습목표

  • scikit-learn에 내장된 예제 데이터셋의 종류를 알고 활용할 수 있다.
  • scikit-learn에 내장된 분류 모델들을 학습시키고 예측해 볼 수 있다.
  • 모델의 성능을 평가하는 지표의 종류에 대해 이해하고, 활용 및 확인해 볼 수 있다.
  • Decision Tree, XGBoost, RandomForest, 로지스틱 회귀 모델을 활용해서 간단하게 학습 및 예측해 볼 수 있다.
  • 데이터셋을 사용해서 스스로 분류 기초 실습을 진행할 수 있다.

2.1.2 학습 전제

  • scikit-learn을 활용해서 머신러닝을 시도해본 적이 없다.
  • scikit-learn에 내장된 분류 모델을 활용해본 적이 없다.
  • 지도학습의 분류 실습을 해 본 적이 없다.
  • 머신러닝 모델을 학습시켜보고, 그 성능을 평가해본 적이 없다.

2.2 Iris의 세 가지 품종 분류하기


2.2.1 붓꽃 분류 문제

품종이 다른 붓꽃 분류, 어떤 데이터로 할 건데?

2.2.2 데이터 준비, 그리고 자세히 보기

load_iris를 import 해서 iris 데이터 로딩
from sklearn.datasets import load_iris

iris = load_iris()

print(dir(iris)) # dir()는 객체가 어떤 변수와 메서드를 가지고 있는지 나열함

# key()를 이용해 iris 정보 확인
iris.keys() 

# 데이터를 변수에 저장 후 데이터 크기 확인하기
iris_data = iris.data 

print(iris_data.shape) #shape는 배열의 형상정보를 출력

# 샘플로 데이터 확인
iris_data[0]
머신러닝 모델이 출력해야 하는 정답을 라벨(label) 또는 타겟(target) 이라고 표현함.
붓꽃 데이터에서 타겟 정보는 다음과 같이 target 으로 볼 수 있음
iris_label = iris.target
print(iris_label.shape)
iris_label

# 총 150개의 데이터, 0,1,2로 나타나는 값이 뭘 나타내는 건지 확인
iris.target_names

print(iris.DESCR)
feature_namesfilename
iris.feature_names # 각 feature에 대한 설명 확인
iris.filename # 데이터셋의 전체 이름 확인

2.2.3 머신러닝 모델 학습을 위한 학습데이터와 테스트 데이터 만들기

iris의 데이터는 행과 열이 있는 2차원 데이터이므로 2차원 배열 데이터를 다루는데 많이 쓰이는 pandas 준비

import pandas as pd

print(pd.__version__)

iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
iris_df

iris_df["label"] = iris.target
iris_df

feature : 변수로는 x 머신러닝 모델에 입력하는 데이터
label or target : 변수로는 y 머신러닝 모델이 맞혀야 하는 데이터

train_test_split 함수로 데이터셋 분리 문제지 - 정답지

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(iris_data,  # 모델이 맞춰야하는 정답값, label
                                                    iris_label, 
                                                    test_size=0.2, # test dataest의 크기 조절. 0.2는 전체의 20%를 정답지로
                                                    random_state=7) # 데이터를 분리하는데 적용되는 랜덤성

print('X_train 개수: ', len(X_train),', X_test 개수: ', len(X_test))

X_train.shape, y_train.shape
X_test.shape, y_test.shape

y_train, y_test

2.2.4 첫 번쨰 머신러닝 모델 학습시키기

from sklearn.tree import DecisionTreeClassifier

decision_tree = DecisionTreeClassifier(random_state=32)
print(decision_tree._estimator_type)

decision_tree.fit(X_train, y_train)

2.2.5 첫 번째 머신러닝 모델 평가하기

y_pred = decision_tree.predict(X_test)
y_pred

y_test

from sklearn.metrics import accuracy_score

accuracy = accuracy_score(y_test, y_pred)
accuracy

2.2.6 다른 모델도 학습-평가하기

# (1) 필요한 모듈 import
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report

# (2) 데이터 준비
iris = load_iris()
iris_data = iris.data
iris_label = iris.target

# (3) train, test 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(iris_data, 
                                                    iris_label, 
                                                    test_size=0.2, 
                                                    random_state=7)

# (4) 모델 학습 및 예측
decision_tree = DecisionTreeClassifier(random_state=32)
decision_tree.fit(X_train, y_train)
y_pred = decision_tree.predict(X_test)

print(classification_report(y_test, y_pred))
랜덤 포레스트(RandomForest)
from sklearn.ensemble import RandomForestClassifier

X_train, X_test, y_train, y_test = train_test_split(iris_data, 
                                                    iris_label, 
                                                    test_size=0.2, 
                                                    random_state=21)

random_forest = RandomForestClassifier(random_state=32)
random_forest.fit(X_train, y_train)
y_pred = random_forest.predict(X_test)

print(classification_report(y_test, y_pred))
svm
from sklearn import svm
svm_model = svm.SVC()

svm_model.fit(X_train, y_train)
y_pred = svm_model.predict(X_test)

print(classification_report(y_test, y_pred))
sgd
from sklearn.linear_model import SGDClassifier
sgd_model = SGDClassifier()

sgd_model.fit(X_train, y_train)
y_pred = sgd_model.predict(X_test)

print(classification_report(y_test, y_pred))
LogisticRegression
from sklearn.linear_model import LogisticRegression
logistic_model = LogisticRegression()

logistic_model.fit(X_train, y_train)
y_pred = logistic_model.predict(X_test)

print(classification_report(y_test, y_pred))

2.2.7 내 모델 평가하기, 정확도의 함정

from sklearn.datasets import load_digits

digits = load_digits()
digits.keys()

digits_data = digits.data
digits_data.shape

digits_data[0]

import matplotlib.pyplot as plt
%matplotlib inline

plt.imshow(digits.data[0].reshape(8, 8), cmap='gray')
plt.axis('off')
plt.show()

for i in range(10):
    plt.subplot(2, 5, i+1)
    plt.imshow(digits.data[i].reshape(8, 8), cmap='gray')
    plt.axis('off')
plt.show()

digits_label = digits.target
print(digits_label.shape)
digits_label[:20]

new_label = [3 if i == 3 else 0 for i in digits_label]
new_label[:20]


from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

X_train, X_test, y_train, y_test = train_test_split(digits_data,
                                                    new_label,
                                                    test_size=0.2,
                                                    random_state=15)

decision_tree = DecisionTreeClassifier(random_state=15)
decision_tree.fit(X_train, y_train)
y_pred = decision_tree.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
accuracy

new_label = [3 if i == 3 else 0 for i in digits_label]
new_label[:20]

from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

X_train, X_test, y_train, y_test = train_test_split(digits_data,
                                                    new_label,
                                                    test_size=0.2,
                                                    random_state=15)

fake_pred = [0] * len(y_pred)

accuracy = accuracy_score(y_test, fake_pred)
accuracy

좋은 웹페이지 즐겨찾기