일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 사이킷런
- 사회조사분석사 2급 필기 시험시간
- 그리디
- 사회조사분석사 2급 접수
- 너비우선탐색
- 사회조사분석사2급실기신청꿀팁
- 사회조사분석사 2급
- 오미크론 자가격리
- DFS
- 공모주
- 머신러닝
- 사회조사분석사 2급 필기 공부방법
- 사회조사분석사 2급 독학
- 공모주청약
- 사회조사분석사 2급 필기 요약정리
- 백준 알고리즘
- 알고리즘
- 시물레이션
- 공모주 청약
- 현대엔지니어링 수요예측
- 2월공모주
- 현대엔지니어링
- 사회조사분석사 2급 공부방법
- 파이썬 정렬
- 벽부수고이동하기 파이썬
- 백준
- BFS
- 사회조사분석사2급실기신청
- 사회조사분석사 2급 기출문제집
- 정렬
- Today
- Total
세상을 바꾸는 데이터
붓꽃 데이터 세트로 ML 분류 예측과정 수행하기 본문
사이킷런에 내장되어 있는 붓꽃 데이터 세트를 이용해 분류 예측 과정을 수행해보자.
이 프로젝트의 목표는 붓꽃 데이터 셋을 가지고 붓꽃 데이터 품종을 분류해보려고 한다.
붓꽃 데이터 세트는 꽃잎의 길이와 너비, 꽃받침의 길이와 너비 피처(feature)를 기반으로 꽃의 품종을 예측하기 위한 것이다.
사이킷런 라이브러리 설치 및 임포트하기
pip install scikit-learn import sklearn
붓꽃 예측을 위한 사이킷런 모듈 로딩
from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split
- sklearn.datasets 내의 모듈은 사이킷런에서 자체적으로 제공하는 데이터 세트를 생성하는 모듈의 모임이다.
- sklearn.tree 내의 모듈은 트리 기반 ML 알고리즘을 구현한 클래스의 모임이다.
- sklearn.model_selection은 학습 데이터와 검증 데이터, 예측 데이터로 데이터를 분리하거나 최적의 하이퍼 파라미터로 평가하기 위한 다양한 모듈의 모임이다.
붓꽃 데이터(load_iris)는 사이킷런에 내장되어 있는 데이터셋에서 가져온 것이다.
후에 다루겠지만 붓꽃 품종 예측에 결정 트리 알고리즘과 train_test_split을 이용해 분석을 진행한다.
일단은 데이터를 학습하고 예측하는 머신러닝 기법을 구현하는 데 집중한다.
데이터 세트 로딩하기
import pandas as pd # 붓꽃 데이터 세트를 로딩한다. iris = load_iris() # iris.data는 Iris 데이터 세트에서 피처(feature)만으로 된 데이터를 numpy로 가지고 있다. iris_data = iris.data # iris.target은 붓꽃 데이터 세트에서 레이블(결정 값) 데이터를 numpy로 가지고 있다. iris_label = iris.target # 붓꽃 데이터 세트를 자세히 보기 위해 DataFrame으로 변환한다. iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names) iris_df['label'] = iris.target print(iris_df.head(3))
사이킷런에 내장되어 있는 붓꽃 데이터 세트를 판다스를 이용해 DataFrame으로 변환한다.
데이터 세트에서의 피처(feature)는 데이터 세트의 일반 속성들이며, Label(레이블)은 데이터 세트의 결정 값을 의미한다.
[Output]
여기서 sepal length, speal width, petal length, petal width는 데이터 세트의 피처(feature)를 의미하며, label은 결정 값을 의미한다.
label(레이블, 결정 값)은 0, 1, 2 세 가지 값으로 데이터가 구성되어 있으며,
0이 "Setosa" 품종, 1이 "versicolor" 품종, 2가 "virginica 품종"을 의미한다.
학습용, 테스트용으로 데이터 세트 분리하기
X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label, test_size=0.2, random_state=11)
데이터 세트를 학습용 데이터와 테스트용 데이터로 분리한다. 이유는 학습 데이터로 학습된 모델이 얼마나 뛰어난 성능을 가지는지 평가하려면 테스트용 데이터가 필요하기 때문이다. 이를 위해 train_test_split( ) API를 이용한다.
<학습/테스트 데이터 세트를 분리하는 train_test_split( ) 자세한 설명>
- iris_data는 feature으로만 이루어져 있는 데이터, 함수에서의 X를 의미한다.
- iris_label은 결정 값(Label)으로만 이루어져 있는 데이터, 함수에서의 Y를 의미한다.
- test_size = 0.2는 테스트 데이터를 전체 데이터의 20%로, 학습 데이터를 전체 데이터의 80%로 데이터를 분할함을 의미한다.
- random_state는 수행할 때마다 동일한 학습/테스트용 데이터 세트를 생성하기 위해 주어지는 난수 값을 입력하는 것으로, 무작위로 데이터 세트를 호출하려면 코드에 입력하지 않으면 된다.
- shuffle은 데이터를 분리하기 전에 데이터를 미리 섞을지 결정하는 것으로, 디폴트 값은 True다. 여기서는 생략되었으므로 shuffle = True가 적용된다.
모델 생성하기
머신러닝 분류 알고리즘의 하나인 의사결정 트리(DecisionTreeClassifer)를 이용해 학습과 예측을 수행해보자.
(의사결정 트리를 비롯한 분류 및 회귀 알고리즘 모델들은 추후 포스팅에서 자세히 다룰 예정이다.)
# DecisionTreeClassifier 객체 생성
dt_clf = DecisionTreeClassifier(random_state=11)
random_state=11은 동일한 학습/예측 결과를 출력하기 위한 용도로 사용되었다.
학습 데이터 세트로 학습 수행하기
# 학습 수행
dt_clf.fit(X_train, y_train)
사이킷런은 머신러닝 모델 학습을 위해 fit( )을 제공한다. 지도학습의 주요 두 축인 분류와 회귀의 다양한 알고리즘을 구현한 모든 사이킷런 클래스는 fit( )과 predcit( )만을 이용해 간단하게 학습과 예측 결과를 반환한다.
테스트 데이터 세트로 예측(Predict)하기
# 학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행
pred = dt_clf.predict(X_test)
사이킷런은 머신러닝 모델 학습을 위해 predict( )을 제공한다. 지도학습의 주요 두 축인 분류와 회귀의 다양한 알고리즘을 구현한 모든 사이킷런 클래스는 fit( )과 predcit( )만을 이용해 간단하게 학습과 예측 결과를 반환한다.
예측 정확도 평가
from sklearn.metrics import accuracy_score print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test,pred))) # 예측 정확도: 0.9333
머신러닝 모델의 성능 평가 방법에는 여러 가지가 있지만, 여기서는 정확도를 측정해본다.
예측한 붓꽃 품종과 실제 테스트 데이터 세트의 붓꽃 품종은 93.3%로 측정되었다.
(머신러닝 모델 성능 평가는 추후 평가 포스트에서 다루게 될 것이다)
붓꽃 데이터 세트로 분류를 예측한 프로세스 과정 정리
1. 데이터 세트 분리: 데이터를 학습 데이터와 테스트 데이터로 분리
2. 모델 학습: 학습 데이터를 기반으로 ML 알고리즘을 적용해 모델 학습
3. 예측 수행: 학습된 ML 모델을 이용해 테스트 데이터의 분류(여기서는 붓꽃 품종) 예측
4. 평가: 예측된 결괏값과 테스트 데이터의 실제 결괏값을 비교해 ML 모델 평가
참고 자료:
https://github.com/chulminkw/PerfectGuide/blob/master/1%EC%9E%A5/1.3%20%EB%84%98%ED%8C%8C%EC%9D%B4.ipynb
http://www.yes24.com/Product/Goods/69752484
'ML > scikit-learn(사이킷런)' 카테고리의 다른 글
교차 검증 #1 - "수능"을 보기 위해 "모의고사"를 푸는 것 (KFold & Stratified KFold) (40) | 2022.02.03 |
---|---|
[scikit-learn] 사이킷런 소개 (6) | 2022.01.28 |