일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 데이터 분석
- Series
- Hessian Matrix
- neural network
- 딥러닝
- paper
- 모두를 위한 RL
- 리스트
- Jacobian Matrix
- list
- Python Programming
- 사이킷런
- machine learning
- David Silver
- 판다스
- 논문
- 유니티
- statistics
- Laplacian
- 강화학습
- pandas
- rl
- Deep Learning
- reinforcement learning
- optimization
- Linear algebra
- 김성훈 교수님
- ML-Agent
- convex optimization
- unity
RL Researcher
Scikit-Learn(붓꽃 품종 예측하기) 본문
첫번째 머신러닝 - 붓꽃 품종 예측
분류(Classification)는 대표적인 지도학습(Supervised Learning) 방법의 하나입니다.
- 지도학습은 학습을 위한 다양한 피처(Feature)와 분류 결정값인 레이블(Label) 데이터로 모델을 학습한 뒤, 별도의 테스트 데이터 세트에서 미지의 레이블을 예측합니다.
- 즉 지도학습(Supervised Learning)은 명확한 정답이 주어진 데이터를 먼저 학습한 뒤 미지의 정답을 예측하는 방식입니다.
# 사이킷런 내의 아이리스 모듈 import합니다.
# 분류 모델의 종류인 DecisiontreeClassifier 불러오기
# 데이터 세트를 학습 데이터와 테스트 데이터로 분리하는 데 train_test_split()함수 사용합니다.
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
# Feature들과 Data값이 어떻게 구성되어 있는지 확인하기 위해 DataFrame으로 변환합니다.
import pandas as pd
# 붓꽃 데이터 세트를 로딩합니다.
iris = load_iris()
# iris의 target값을 확인해 보겠습니다.
print('iris target값: {0}'.format(iris.target))
print('iris target명: {0}'.format(iris.target_names))
# 붓꽃 데이터 세트를 보기 위해 DataFrame으로 변환합니다.
iris_df = pd.DataFrame(data = iris.data,columns = iris.feature_names)
iris['label'] = iris.target
iris_df.head(3)
<output>
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']
- | sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) |
0 | 5.1 | 3.5 | 1.4 | 0.2 |
1 | 4.9 | 3.0 | 1.4 | 0.2 |
2 | 4.7 | 3.2 | 1.3 | 0.2 |
- feature에는 sepal length, sepal width, petal length, petal width가 있습니다.
- Label은 0,1,2 세가지 값으로 되어 있으며, 0이 Setosa품종, 1이 versicolor품종, 2가 virginica품종을 의미합니다.
학습용 데이터와 테스트용 데이터를 분리해 보았습니다.
# 학습데이터와 테스트데이터의 분리 필요성은 학습데이터로 학습된 모델이 얼마나 뛰어난 성능을 가지는지 평가하려면 테스트 데이터가 필요하기 때문입니다.
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size = 0.2,random_state = 11)
# 첫번째 파라미터 : Feature 데이터 세트입니다.
# 두번째 파라미터 : Label 데이터 세트입니다.
# test_size : 전체 데이터 세트 중 테스트 데이터 세트의 비율입니다.
# random_state : 호출할 때마다 같은 학습/테스트 용 데이터 세트를 생성하기 위해 주어지는 난수 발생 값입니다.
# ranom_state 뒤의 값은 np.radom.seed와 같이 무의미만 숫자값입니다.
다음은 DecisiontreeClassifier 객체 생성, 학습 수행, 예측값 저장까지 해보았습니다.
# DecisiontreeClassifier 객체 생성
clf = DecisionTreeClassifier(random_state=11)
# 학습 수행
clf.fit(X_train,y_train)
# 예측인 반드시 학습 데이터가 아닌 다른 데이터를 이용해야 하며, 일반적으로 테스트 데이터 세트를 이용합니다.
# 학습이 완료된 DecisontreeClassifier 객체에서 테스트 데이터 세트로 예측 수행
pred = clf.predict(X_test)
모델의 성능을 평가하기 위해서 여러가지 방법이 있지만 여기서는 정확도를 측정해 보겠습니다.
from sklearn.metrics import accuracy_score
print('예측 정확도:{0:.4f}'.format(accuracy_score(y_test,pred)))
<output>
예측 정확도:0.9333
학습한 의사결정 트리의 알고리즘 예측 정확도가 약 0.9333(93.33%)으로 측정되었습니다.
붓꽃 데이터 세트로 분류를 예측한 프로세스를 정리하겠습니다.
데이터 세트 분리 : 데이터를 학습 데이터와 테스트 데이터로 분리합니다.
모델 학습 : 학습 데이터를 기반으로 ML알고리즘을 적용해 모델을 학습시킵니다.
예측 수행 : 학습된 ML 모델을 이용해 테스트 데이터의 분류(즉,붓꽃 종류)를 예측합니다.
평가 : 이렇게 예측된 결괏값과 테스트 데이터의 실제 결괏값을 비교해 ML 모델 성능을 평가합니다.
'Machine-Learning > Scikit-Learn' 카테고리의 다른 글
교차검증(Cross-Validation) (0) | 2021.01.16 |
---|---|
사이킷런(Scikit-Learn) 주요 모듈 (0) | 2021.01.05 |
train_test_split()을 활용해 학습과 테스트 세트 분리 (0) | 2020.12.28 |