sklearn - 분류

아따맘마·2021년 1월 5일
0

머신러닝

목록 보기
5/7

파이썬 모듈 중에서 사이킷런을 사용하여 iris 데이터를 분류를 해보려고 한다.
분류(Classification)은 대표적인 지도학습 머신러닝 알고리즘으로, training 데이터를 가지고 학습하여 별도의 test 데이터의 Label을 예측할 수 있다.
iris 데이터의 설명 변수는 다음과 같다.

  • sepal lengh
  • sepal width
  • petal length
  • petal width

위 네가지 피쳐를 가지고 iris의 품종 Label을 예측하다.

모듈

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
  • sklearn.datasets : 사이킷런 패키지에서 자체적으로 제공해주는 데이터들의 모듈
  • sklearn.tree : 트리 기반 ML 알고리즘을 구현한 클래스. 이번에는 의사결정트리 알고리즘을 사용하기 위해 import
  • sklearn.model_selection : 데이터를 학습, 검정, 테스트 데이터로 분리하거나 최적의 하이퍼 파라미터로 평가하기 위한 모듈 모임

    하이퍼 파라미터 : 머신러닝 알고리즘의 최적의 학습을 위해 직접 입력하는 파라미터. 이를 가지고 ML 알고리즘의 성능을 튜닝할 수 있다.

데이터

iris = load_iris()

iris_data = iris.data

iris_target = iris.target
print('iris target값 :\n', iris_target)
print('iris target명 : ', iris.target_names)

  • 0 : setosa
  • 1 : versicolor
  • 2 : virginica

iris.data는 feature만으로 구성된 데이터셋으로 Numpy 기반의 구조이다.

iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
iris_df['label'] = iris.target
iris_df.head()


iris 데이터를 DataFrame구조로 변환한다. 그리고 iris.target 데이터도 병합한다.

데이터 분리

X_train, X_test, Y_train, Y_test = train_test_split(iris_data, iris_target, test_size=0.2, random_state=11)

모듈 train_test_split을 가지고 학습용, 테스트용 데이터로 분리할 수 있다. 파라미터를 살펴보면,

  • iris_data : feature 데이터 셋
  • iris_target : label 데이터 셋
  • test_size : 학습용, 테스트 데이터를 분리하는 비율, test_size=0.2이면 전체 데이터 중 테스트 데이터셋의 비율은 20%라는 뜻
  • random_state : 난수 발생 값, 이 파라미터를 지정해야 함수를 수행할 때 계속 동일한 데이터셋으로 분리

코드를 실행하면 X_train은 feature 학습 데이터, X_test는 feature 테스트 데이터, Y_train은 label 학습 데이터, y_test는 label 테스트 데이터로 분리됬다.

의사결정나무

dt_clf = DecisionTreeClassifier(random_state=11)
dt_clf.fit(X_train,Y_train)
pred = dt_clf.predict(X_test)

우선 DecisionTreeClassifier 객체를 생성하고, X_train, Y_train 데이터를 fitting 한 다음 predict() 메서드를 이용하여 X_test데이터로 label을 예측해본다.

성능 평가

머신러닝 알고리즘 성능 평가 방법 중 성과 분석이 있다.

  • 정분류율(Accuracy) : 정답 비율
  • 오분류율(Error Rate) : 오답 비율
  • 특이도(Specificity)
  • 민감도(Sensitivity)
  • 정확도(Precision)
  • 재현율(Recall)
  • F1 Score

이번엔 accuracy_score를 이용하여 예측결과가 실제 레이블 값과 얼마나 정확하게 맞는지 평가해보려고 한다.

from sklearn.metrics import accuracy_score

print('예측 정확도 : {0:.4f}'.format(accuracy_score(Y_test, pred)))


의사결정트리로 학습해본 결과 예측 정확도가 0.9333(93.33%)로 측정이 됬다.

정리

iris 데이터로 머신러닝 알고리즘 중 의사결정나무트리로 예측한 과정은 다음과 같다.
1. 데이터 세트 분리 : 전체 데이터를 학습 데이터와 테스트 데이터로 분리
2. 모델 학습 : 학습 데이터를 기반으로 ML 알고리즘을 적용하여 모델 학습
3. 예측 수행 : 학습된 ML 모델을 이용하여 테스트 데이터의 분류를 예측
4. 평가 : 예측된 결과값과 실제 결과값을 비교해 ML 모델 성능 평가

profile
늦게 출발했지만 꾸준히 달려서 도착지점에 무사히 도달하자

0개의 댓글