machine learning

사이킷런과 간단한 붓꽃 품종 예측하기

  • -
728x90

머신러닝 라이브러리 중 가장 많이 사용되는 라이브러리로 최근에는 케라스나 텐서플로 등 딥러닝 라이브러리에 의해 밀렸지만 여전히 많은 데이터분석가가 사용하는 라이브러리이다.

사이킷런의 장점 3가지: 쉽다, 편리하다, 성숙하다(많은 검증을 거쳐왔다.)

 

설치과정은 아나콘다를 설치했다면 사이킷런은 기본으로 설치가 되어 있기 때문에 생략하겠다.

 

이제 사이킷런으로 간단한 머신러닝 모델을 만들어보자 사이킷 런 기본 내장 데이터셋인 붓꽃 데이터 세트를 이용해서 만들어볼거다.

해당 모델은 꽃잎의 길이와 너비, 꽃받침의 길이와 너비 피쳐를 기반으로 곷의 품종을 예측(분류)하는 모델이다.

 

바로 코드를 보고 이해해보자

 

아래는 기본적인 모듈을 불러온 모습니다. 

load_iris를 통해서 붓꽃 데이터를 불러오고

DecisionTreeClassifier를 import한다. 이번에 쓸 머신러닝 모델은 분류 기법중 하나로 결정트리라고 한다.

또한 머신러닝을 진행할때 학습용 데이터셋과 검증용데이터셋을 구분하기 위해 train_test_split()도 가져와 준다.

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

data와 target은 아이리스 데이터를 넘파이 기반으로 가지고 있다.

data는 iris 데이터의 피쳐 값을 가지고 있다.

target은  데이터 세트의 레이블(결정값) 데이터를 가지고 있다.(여기서 결정값이란 해당 꽃이 어떤 꽃인지를 데이터로 가지고 있다는 듯이다.)

이제 target의 이름을 확인하고 정수로 이루어진 target값을 lable이라는 이름을 가진 변수로 데이터 세트에 추가 해준다.

import pandas as pd

# 붓꽃 데이터 세트를 로딩합니다. 
iris = load_iris()

# iris.data는 Iris 데이터 세트에서 피처(feature)만으로 된 데이터를 numpy로 가지고 있습니다. 
iris_data = iris.data

# iris.target은 붓꽃 데이터 세트에서 레이블(결정 값) 데이터를 numpy로 가지고 있습니다. 
iris_label = iris.target
print('iris target값:', iris_label)
print('iris target명:', iris.target_names)

# 붓꽃 데이터 세트를 자세히 보기 위해 DataFrame으로 변환합니다. 
iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
iris_df['label'] = iris.target
iris_df.head(3)
iris target값: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
iris target명: ['setosa' 'versicolor' 'virginica']
[6]:
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)label012
5.1 3.5 1.4 0.2 0
4.9 3.0 1.4 0.2 0
4.7 3.2 1.3 0.2 0

 

test_size는 테스트 데이터 세트의 비율이 20%라는 의미
random_state=11은 호출할때마다 같은 학습/ 테스트용 데이터 생성을 위해 주어지는 난수 값이다. 실습에서만 사용한다.

X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label, 
                                                    test_size=0.2, random_state=11)
# test_size는 테스트 데이터 세트의 비율이 20%라는 의미
# random_state=11은 호출할때마다 같은 학습/ 테스트용 데이터 생성을 위해 주어지는 난수 값이다. 실습에서만 사용

 

또 train_test_split() 메소드를 통해서 전체 데이터 세트를 위와 같이 분할해야한다. 

이제 결정트리 머신러닝 모델을 가져와서 fit() 메소드를 활용해 모델을 학습시킨다.

# DecisionTreeClassifier 객체 생성 
dt_clf = DecisionTreeClassifier(random_state=11)

# 학습 수행 
dt_clf.fit(X_train, y_train)
DecisionTreeClassifier(random_state=11)

 

predict메소드는 학습이 완료된 모델에 테스트 데이터를 집어넣어 예측(분류)한 반환값을 반환하는 메소드이다.

# 학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행. 
pred = dt_clf.predict(X_test) #predict 메소드를 통해 예측값 반환

이제 예측한 값을 실제 데이터와 비교하면 그 모델의 정확도가 나오게 되는데 다음과 같다.

from sklearn.metrics import accuracy_score
print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))

0.93333

 

 

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.