Search

사이킷런 소개와 특징 + 첫번째 머신러닝

파이썬 머신러닝 라이브러리 중 가장 많이 사용되는 라이브러리다. 가장 쉽고 효율적인 개발 라이브러리를 제공한다.
사이킷런의 특징은 다음과 같다.
쉽다
편리한 프레임워크
매우 많은 환경에서 사용되는 나이 많은 라이브러리다.
사이킷런 버전을 먼저 확인한다.
import sklearn print(sklearn.__version___) # 0.24.1
Python
복사

첫번째 머신러닝 만들어보기 - 붓꽃 품종 예측하기

붓꽃 데이터 세트는 꽃잎의 길이, 너비, 꽃받침의 길이, 너비 , 이렇게 4가지 특성이 있는 데이터세트다. 먼저 분류하는 것을 해본다.
분류는 대표적인 지도학습 방법의 하나다.
지도학습은 다양한 특성들과 분류 결정값인 레이블 데이터로 모델을 학습하고 별도의 테스트 데이터 세트에서 미지의 레이블을 예측한다. 즉, 명확한 정답이 주어진 데이터를 먼저 학습한 뒤 미지의 정답을 예측하는 방식이다.
학습을 위해 주어진 데이터 세트를 학습 데이터 세트, 예측 성능을 평가하기 위해 별도로 주어진 데이터 세트를 테스트 데이터 세트로 지칭한다.
먼저, sklearn.datasets 내의 모듈은 사이킷런에서 자체적으로 제공하는 데이터 세트를 생성하는 모듈의 모임이다.
sklearn.tree 는 트리 기반 머신러닝 알고리즘을 구현한 클래스의 모임이다.
sklearn.model_selection은 데이터를 분리하거나 최적의 하이퍼 파라미터로 평가하기 위한 다양한 모듈의 모임이다. 하이퍼 파라미터를 통해 머신러닝 알고리즘의 성능을 튜닝할 수 있다.
붓꽃 데이터 세트를 생성하는 데는 load_iris()를 이용할 것이다.
머신러닝 알고리즘은 의사 결정 트리인 DecisionTreeClassifier을 사용한다.
데이터를 분류하는데에는 trian_test_split() 함수를 사용한다.
from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split
Python
복사
# 붓꽃 데이터 세트를 로딩한다. iris = load_iris() # iris.data는 iris 데이터세트에서 데이터를 넘파이로 가지고 있다. iris_data = iris.data # iris.target 은 iris 데이터세트에서 타겟값(레이블)을 넘파이로 가지고 있다. iris_label = iris.target print('iris target 값:', iris_label) print('iris target 명:', iris.target_names) # iris target 명: ['setosa' 'versicolor' 'virginica'] # .target_names는 레이블 값의 종류를 알려준다. # 0이 setosa, 1이 versicolor, 2가 virginica를 의미한다. # 붓꽃 데이터 세트를 데이터프레임으로 변환한다. iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names) iris_df['label'] = iris.target iris_df.head() ''' 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 3 4.6 3.1 1.5 0.2 0 4 5.0 3.6 1.4 0.2 0 '''
Python
복사
이제, 데이터세트를 분리한다. train_test_split()을 이용하고 인자로 test_size를 지정해주는데 0.2로 지정해주면 전체 데이터세트 중 테스트 세트의 비중이 20%라는 것을 의미한다.
# 학습 데이터와 테스트 데이터 분리 X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label, test_size=0.2, random_state=11) # random_state는 호출할 때마다 같은 데이터 세트를 생성하기 위한 난수 발생 값이다.
Python
복사
이제, 의사 결정 트리를 이용해 학습과 예측을 수행해보겠다.
# 데이터세트를 나눌때와 마찬가지로 모델을 생성할 때 random_state를 지정해줘야 동일한 학습 # 및 예측 결과를 출력한다. --> 공부나 연습할 때만 필요 # DecisionTreeClassifier 객체 생성 dt_clf = DecisionTreeClassifier(random_state=11) # 학습 수행 dt_clf.fit(X_train, y_train) # 학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행 pred = dt_clf.predict(X_test)
Python
복사
이제, 예측 성능을 평가해본다. 여기서는 정확도를 통해 평가한다. 정확도를 측정하는 함수는 accuracy_score() 를 이용한다. 인자로는 실제 값, 예측값을 입력해주면 된다.
# 모델의 예측 정확도 평가 from sklearn.metrics import accuracy_score print('예측 정확도:{0:.4f}'.format(accuracy_score(y_test,pred))) # 예측 정확도:0.9333
Python
복사
이렇게, 알고리즘의 예측 정확도가 약 93.33% 로 측정되었다.