사이킷런
사이킷런은 파이썬 머신러닝 라이브러리중 가장 많이 사용 되는 라이브러리이다.
첫 번째 머신러닝 만들어보기 - 붓꽃 품종 예측하기
- 붓꽃 데이터셋은 꽃잎의 길이와 너비, 꽃받침의 길이와 너비 피쳐를 기반으로 꽃의 품종을 예측하기 위한 것입니다.
- 분류는 대표적인 지도학승방법의 하나이고, 지도학습은 학습을 위한 다양한 피처와 분류 결정값인 레이블 데이터로 모델을 학습한뒤,
별도의 테스트 데이터 셋의 미지의 레이블을 예측합니다. - 학습을 위해 주어진 데이터 셋을 학습 데이터 셋, 머신러닝 모델의 예측 성능을 평가하기 위해 별도로 주어진 데이터 셋을 테스트 데이터 셋으로 지칭함.
1. 사이킷런 패키지내의 모듈명 명명 규칙
- 모든모듈명은 sklearn으로 시작
- sklearn.datasets 내의 모듈은 사이킷런에서 자체적으로 제공하는 데이터 셋을 생성하는 모듈
- sklaern.tree 내의 모듈은 트리 기반 ML알고리즘을 구현한 클래스 모임
- sklearn.model_selection은 학습 데이터와 검증데이터, 예측 데이터로 데이터를 분리하거나 최적의 하이퍼 파라미터로 평가하기 위한 다양한 모듈의모임
- 하이퍼 파라미터란 머신러닝 알고리즘별로 최적의 학습을 위해 직접입력하는 파라미터들을 통칭하며,
하이퍼 파라미터를 통해 머신러닝 알고리즘의 성능을 튜닝 할 수 있다.
- 하이퍼 파라미터란 머신러닝 알고리즘별로 최적의 학습을 위해 직접입력하는 파라미터들을 통칭하며,
2. iris 데이터
- 붓꽃 데이터 셋을 생성하는 데 load_iris()를 이용하며, ML 알고리즘은 의사 결정 트리 이용.
- 의사 결정 트리는 데이터를 학습하고 예측하는 머신러닝 기법을 구현한 알고리즘
- 데이터 셋을 학습 데이터와 테스트 데이터로 분리하는 데는 train_test_split() 함수를 사용
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
import pandas as pd
# 붓꽃 데이터 셋 로딩
iris = load_iris()
#iris.data는 Iris 데이터 세트에서 피처만으로 된 데이터를 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']
.dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) | label | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | 0 |
1 | 4.9 | 3.0 | 1.4 | 0.2 | 0 |
2 | 4.7 | 3.2 | 1.3 | 0.2 | 0 |
피처는 총 4가지가 있고 레이블은 0 1 2 총 세가지 값으로 돼 있으며
0 : Setosa, 1 : versicolor , 2 : virginica 이다.
3. 학습용 데이터와 테스트용 데이터 분리 - train_test_split()
- test_size 를 통해 전체 데이터중 테스트 데이터 비율을 조절 가능
- 첫 번째 파라미터: 피처 데이터셋, 두 번째 파라미터 : 레이블데이터 셋, 마지막 파라미터 : 데이터 셋의 비율
X_train,X_test,y_train,y_test = train_test_split(iris_data,iris_label,
test_size = 0.2,random_state=11)
4. 의사 결정 트리를 이용해 학습과 예측을 수행
#DecisionTreeClassifier 객체 생성
dt_clf = DecisionTreeClassifier(random_state=11)
#학습 수행
dt_clf.fit(X_train,y_train)
DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='gini',
max_depth=None, max_features=None, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, presort='deprecated',
random_state=11, splitter='best')
#학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 셋으로 예측 수행
pred = dt_clf.predict(X_test)
from sklearn.metrics import accuracy_score
print('예측 정확도 : {0:.4f}'.format(accuracy_score(y_test,pred)))
예측 정확도 : 0.9333
5. 붓꽃 데이터 셋으로 분류를 예측한 프로세스 요약
- 데이터 셋 분리 : 데이터를 학습 데이터와 테스트 데이터로 분리
- 모델 학습 : 학습 데이터를 기반으로 ML알고리즘을 적용해 모델을 학습
- 예측 수행 : 학습된 ML모델을 이용해 테스트 데이터의 분류(즉, 붓꽃 종류)예측
- 평가 : 예측된 결괏값과 테스드 데이터의 실제 결괏값을 비교해 ML 모델 성능을 평가
'머신러닝' 카테고리의 다른 글
numpy, pandas 기초 (0) | 2020.08.20 |
---|---|
타이타닉 생존자 예측 -사이킷런 (0) | 2020.08.19 |
데이터 전처리 (0) | 2020.08.19 |
사이킷런의 Model Selection 모듈 (0) | 2020.08.19 |
사이킷런 기반의 프레임 워크 (0) | 2020.08.19 |