-
사이킷런 ( Scikit-learn ) - 2Python Machine Learning/Scikit-learn 2020. 7. 21. 15:08
사이킷런에는 설명하기 좋은 내장 예제들이 있습니다.
그 중 저는 붓꽃 품종 예측하기라는 내장 예제들을 이용하겠습니다.
붓꽃 데이터 세트는 꽃잎의 길이와 너비, 꽃받침의 길이와 너비 속성( feature)를 기반으로 꽃의 품종을 예측하고
분류( Classification )하는 것입니다.
▲ 분류란?
- 대표적인 지도학습방법의 하나로, 지도학습은 학습을 위한 다양한 피처와 분류 결정값인 레이블 데이터로 모델을 학습한 뒤, 별도의 테스트 데이터 세트에서 미지의 레이블을 예측하는 것입니다. 즉 지도학습은 명확한 정답이 주어진 데이터를 먼저 학습한 뒤 미지의 정답을 예측하는 방식입니다.
- 학습을 위해 주어진 데이터 세트를 학습 데이터 세트, 머신러닝 모델의 예측 성능을 평가하기 위해 별도로 주어진 데이터 세트를 테스트 데이터 세트로 지칭합니다.
앞서 넘파이와 판다스를 설명할 때처럼 주피터노트북을 이용해 붗꽃의 품종을 예측하고 분류하는 데이터셋을 불러와서 설명하겠습니다.
--> 붗꽃 예측을 위한 사이킷런 필요 모듈 로딩 --> 붓꽃 데이터 세트를 생성하는 데는 load_iris( )를 이용
--> ML 알고리즘은 의사결정트리알고리즘으로 이를 구현한 DecisionTreeClassifier를 적용.
--> 데이터 세트를 학습 데이터와 테스트 데이터로 분리하는 데는 train_test_split( ) 함수를 사용.
--> --> 붓꽃 데이터 세트를 로딩
--> iris.data는 Iris 데이터 세트에서 피처(feature)만으로 된 데이터를 numpy로 가지고 있음.
--> iris.target은 붓꽃 데이터 세트에서 레이블(결정 값) 데이터를 numpy로 가지고 있음.
-->붓꽃 데이터 세트를 DataFrame으로 변환.
--> 피처에는 sepal length~ petal width가 있으며
레이블( 결정값 )은 0,1,2로 품종을 의미.
0( setosa ) 1( versicolor ) 2( virginica )
학습용 데이터와 테스트용 데이터 분리 --> 학습 데이터로 학습된 모델이 얼마나 뛰어난 성능을 가지는지 평가하려면 테스트 데이터 세트가 필요하기 때문에 분리를 해야하며 이를 위해서 사이킷런은 train_test_split( ) API를 제공합니다.
--> API를 이용하면 학습 데이터와 테스트 데이터를 test_size 파라미터 입력 값의 비율로 분할됩니다.
ex) 0.2로 파라미터를 설정하면 전체 데이터 중 테스트 데이터가 20%, 학습 데이터가 80%로 분할됩니다.
-->iris_data = 피처 데이터 세트, iris_label = 레이블 데이터 세트, test_size = 전체 데이터 세트 중 테스트 데이터 세트의 비율, random_state = 호출시 같은 학습/테스트 용 데이터세트를 생성하기 위해 주어지는 난수 발생 값. ( 지정하지 않으면 수행할 때마다 다른 학습/테스트 용 데이터를 만들 수 있습니다. )
--> train_test_split( )은 학습용 피처 데이터 세트를 X_train으로, 테스트용 피처 데이터 세트를 X_test, 학습용 레이블 데이터 세트를 y_train으로, 테스트용 레이블 데이터 세트를 y_test로 반환.
--> DecisionTreeClassifier 객체 생성
-->학습 수행
--> 학습 데이터를 확보했으니 이 데이터를 기반으로 머신러닝 분류 알고리즘은 결정 트리를 이용해 학습과 예측을 수행하기 위해서 객체를 생성
--> 생성된 객체의 학습을 수행하기위해 fit( ) 메서드 사용.
--> 예측 수행.
--> 학습을 수행 후 예측을 수행하기 위해서는 학습 데이터가 아닌 테스트 데이터 세트를 이용합니다.
--> 예측값 반환을 위해 predict( ) 메소드 사용.
--> 예측 성능 평가. ( 93%의 정확도 )
--> 정확도란 예측 결과가 실제 레이블 값과 얼마나 정확하게 맞는지를 평가하는 지표로서 예측한 붗꽃 품종과 실제 테스트 데이터 세트의 붗꽃 품종이 얼마나 일치하는지 확인하는 것입니다.
--> 정확도 측정을 위해서는 accuracy_score( ) 함수를 사용. ( 첫 번째 파라미터로 실제 레이블 데이터 세트, 두 번째 파라미터로 예측 레이블 데이터 세트를 입력 )
※ 붓꽃 데이터 세트로 분류를 예측한 프로세스를 정리하면 다음과 같습니다.
- 데이터 세트 분리 : 데이틑 학습 데이터와 테스트 데이터로 분리
- 모델 학습: 학습 데이터를 기반으로 ML알고리즘을 적용해 모델을 학습
- 예측 수행: 학습된 ML 모델을 이용해 테스트 데이터의 분류( 붓꽃 종류)를 예측.
- 평가 : 예측된 결괏값과 테스트 데이터의 실제 결과값을 비교해 ML성능을 평가.
'Python Machine Learning > Scikit-learn' 카테고리의 다른 글
사이킷런 ( Scikit-learn ) - 6 (0) 2020.07.22 사이킷런 ( Scikit-learn ) - 5 (0) 2020.07.22 사이킷런 ( Scikit-learn ) - 4 (0) 2020.07.21 사이킷런 ( Scikit-learn ) - 3 (0) 2020.07.21 사이킷런 ( Scikit-learn ) - 1 (0) 2020.07.21