본문 바로가기
  • 데이터에 가치를 더하다, 서영석입니다.
공부하는 습관을 들이자/Python_ML

[2. (1) 붓꽃 품종 예측하기]

by 꿀먹은데이터 2021. 12. 29.

1. 붓꽃 품종 예측하기

Classification은 대표적인 Supervised Learning 방법 중 하나이다.

#conda install scikit-learn

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

 

import pandas as pd

#load
iris = load_iris()
#iris.data has iris data set
iris_data = iris.data

iris_label=iris.target
print("iris target 값: ",iris_label)
print("iris target 명: ",iris.target_names)

#iris data set change to dataframe
iris_df = pd.DataFrame(data=iris_data,columns=iris.feature_names)
iris_df['label']=iris.target
iris_df.head()
#0- setosa , 1-versicolor 2-virginica

# test_size=0.2 : 테스트 데이터 20%, 학습 데이터 80%로 데이터 분할
#X :피처 데이터 , y : 레이블 데이터
X_train,X_test,y_train,y_test = train_test_split(iris_data,iris_label,
                                                 test_size=0.2,random_state=11)

test_size : 테스트 데이터의 비율

random_state : 같은 학습/테스트 용 데이터 세트를 생성하기 위해 주어지는 난수 발생 값.

#DecisionTreeClassifier 객체 생성
dt_clf=DecisionTreeClassifier(random_state=11)
#학습 수행
dt_clf.fit(X_train,y_train)
#학습 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행
pred=dt_clf.predict(X_test)
from sklearn.metrics import accuracy_score
print("예측정확도 :",accuracy_score(y_test,pred))

예측정확도 : 0.9333333333333333

의사 결정 트리의 알고리즘

1. 데이터셋 분리 : 데이터를 train data와 test data로 분리한다.

2. 모델 학습 : ML알고리즘을 적용해 모델을 학습시킨다.

3. 예측 수행 : 학습된 ML 모델을 이용해 test data의 분류를 예측한다.

4. 평가 : 예측된 결과값과 test data의 실제 결과값을 비교한다.

 

사이킷런의 기반 프레임워크 익히기

사이킷런의 주요 모듈

Estimator 이해 및 fit(), predict() 매서드

iris_data=load_iris()
keys = iris_data.keys()
print('붖꽃 데이터 세트의 키들:',keys)

train/test data set 분리 - train_test_split() 함수 사용.

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

iris=load_iris()
dt_clf=DecisionTreeClassifier()
train_data=iris.data
train_label=iris.target
dt_clf.fit(train_data,train_label)

#Performing predictions with learning data.
pred=dt_clf.predict(train_data)
print("예측정확도:",accuracy_score(train_label,pred))
#already learned learning data set so makes no sence

예측 정확도가 1.0인 이유는 이미 학습한 학습 데이터 세트를 기반으로 예측했기 때문이다.

따라서 예측을 수행하는 데이터 세트는 학습을 수행한 학습용 데이터 세트가 아닌 다른 테스트 데이터 세트여야 한다.

 

아래의 경우 학습 데이터 세트와 테스트 데이터 세트를 3:7 비율로 분리하였다.

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

dt_clf=DecisionTreeClassifier()
iris_data=load_iris()

X_train,X_test,y_train,y_test=train_test_split(iris_data.data,iris_data.target,test_size=0.3,random_state=121)

dt_clf.fit(X_train,y_train)
pred=dt_clf.predict(X_test)
print('예측 정확도:',accuracy_score(y_test,pred))
# test_size 0.3이며 random_state 121로 변경.

'공부하는 습관을 들이자 > Python_ML' 카테고리의 다른 글

[2-4]타이타닉 생존자 예측  (0) 2022.01.05
[#3]데이터 전처리  (0) 2022.01.01
[2. (2) 교차 검증]  (0) 2021.12.30
부스팅 알고리즘  (0) 2021.12.29