-
🤖 사이킷런으로 시작하는 머신러닝_01머신러닝 2024. 2. 26. 21:51
사이킷런(Scikit-learn)은 파이썬에서 사용할 수 있는 머신러닝 라이브러리로, 간단하고 효율적인 도구를 제공하여 머신러닝 알고리즘을 쉽게 적용하고 평가할 수 있다.
- 사이킷런 특징
> 사이킷런은 일관된 API를 제공하여 모델의 학습, 예측 및 평가를 간단하게 수행할 수 있다.
이를 통해 사용자가 다양한 모델을 쉽게 비교하고 조정할 수 있다.
일관된 API를 제공한다는 것은 모든 머신러닝 모델이 동일한 형식으로 구현되어 일관된 방식으로 동작한다는 것을 의미한다.
1. 일관된 메서드 사용 : 모든 모델은 'fit()' 메서드를 사용하여 학습하고, 'predict()' 메서드를 사용하여 예측한다.
또한 모든 모델은 'score()' 메서드를 사용하여 성능을 평가한다.
이러한 일관된 메서드 사용으로 인해 사용자는 어떤 모델을 사용하더라도 동일한 작업 흐름을 유지할 수 있다.
2. 파라미터 일관성 : 모든 모델은 동일한 유형의 파라미터를 사용한다.
예를 들어, 모든 분류 모델은 'C'와 같은 정규화 파라미터를 가지며, 모든 회귀 모델은 'alpha'와 같은 규제 파라미터를 가진다.
이러한 일관성은 사용자가 다양한 모델 간에 파라미터를 비교하고 조정할 수 있도록 도와준다.
3. 평가 메트릭 일관성 : 모든 모델은 일관된 방식으로 평가 메트릭을 제공한다.
예를 들어, 분류 모델은 정확도, 정밀도, 재현율 등을 제공하며, 회귀 모델은 평균 제곱 오차(MSE)나 결정 계수(R^2)를 제공한다.
이러한 일관된 평가 메트릭은 모델의 성능을 쉽게 비교하고 평가할 수 있도록 한다.
> 사이킷런은 다양한 머신러닝 알고리즘을 제공한다.
회귀, 분류, 군집화, 차원 축소 등의 다양한 작업에서 사용할 수 있는 다양한 알고리즘이 포함되어 있다.
> 사이킷런은 벡터화된 연산을 사용하여 빠르고 효율적인 알고리즘 구현을 지향한다.
** 주로 Numpy와 같은 배열 연산 라이브러리를 기반, 벡터화된 연산은 반복문을 사용하지 않고 배열 전체에 대한 연산을 한 번에 처리함으로써 계산 속도를 향상시킴(파이썬 루프보다 훨씬 더 효율적이며, 특히 데이터 크기가 클 때 더 큰 차이를 만듦)
또한, 내부적으로 Cython이나 C로 구현되어 있어 속도가 빠르다.
Cython은 파이썬의 확장 언어로, 파이썬 코드를 C나 C++ 코드로 변환하여 컴파일할 수 있다.
이렇게 하면 파이썬 코드보다 훨씬 빠른 속도로 실행할 수 있으며, 특히 수치 연산이 많은 머신러닝 알고리즘의 경우 이점이 더욱 부각된다.
> 사이킷런은 풍부한 문서화와 튜토리얼을 제공하여 사용자가 쉽게 라이브러리를 배우고 활용할 수 있도록 도와준다.
> 사이킷런은 오픈 소스로 개발되어 있어 누구나 자유롭게 사용하고 개선할 수 있다.
> 사이킷런은 파이썬의 다른 인기 있는 라이브러리들과의 호환성이 높다.
예를 들어, Numpy, SciPy, pandas 등과의 통합이 원활하게 이루어지며, 이를 통해 데이터 전처리와 시각화 등의 작업을 효과적으로 수행할 수 있습니다.
머신러닝 만들기 : 붓꽃 품종 예측
붓꽃 데이터 세트는 꽃잎의 길이와 너비, 꽃받침의 길이와 너비 피처(Feature)를 기반으로 꽃의 품종을 분류(Classification) 예측하기 위한 것이다.
분류는 대표적인 지도학습 방법의 하나이다.
지도학습은 학습을 위한 다양한 피처와 분류 결정값인 레이블(Label) 데이터로 모델을 학습한 뒤, 별도의 테스트 데이터 세트에서 미지의 레이블을 예측한다.
즉 지도학습은 명확한 정답이 주어진 데이터를 먼저 학습한 뒤 미지의 정답을 예측하는 방식이다.
from sklearn.datasets import load_iris # sklearn.datasets 내의 모듈은 # 사이킷런에서 자체적으로 제공하는 데이터 세트를 생성하는 모듈의 모임 from sklearn.tree import DecisionTreeClassifier # sklearn.tree 내의 모듈은 # 트리 기반 ML 알고리즘을 구현한 클래스의 모임 from sklearn.model_selection import train_test_split # sklearn.model_selection은 학습 데이터와 검증 데이터, 예측 데이터로 # 데이터를 분리하거나 최적의 하이퍼파라미터로 평가하기 위한 모듈의 모임
import pandas as pd # 붓꽃 데이터 세트를 로딩 iris = load_iris() # iris.data는 Iris 데이터 세트에서 피처(feature)만으로 된 데이터를 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)
01. 데이터 세트 분리 : 데이터를 학습 데이터와 테스트 데이터로 분리
X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label, test_size = 0.2, random_state = 11) # test_size : 테스트 데이터의 비율을 입력받아 분할
02. 모델 학습 : 학습 데이터를 기반으로 ML 알고리즘을 적용해 모델을 학습
학습 데이터를 확보했으니 이 데이터를 기반으로 머신러닝 분류 알고리즘의 하나인 의사 결정 트리를 이용해 학습과 예측을 수행해 보자.
# DecisionTreeClassifier 객체 생성 dt_clf = DecisionTreeClassifier(random_state = 11) # 학습 수행 dt_clf.fit(X_train, y_train)
03. 예측 수행 : 학습된 ML 모델을 이용해 테스트 데이터의 분류를 예측
04. 평가 : 예측된 결괏값과 테스트 데이터의 실제 결괏값을 비교해 ML 모델 성능 평가
# 학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행 pred = dt_clf.predict(X_test) # 정확도 측정 from sklearn.metrics import accuracy_score print('예측 정확도 : {0: .4f}'.format(accuracy_score(y_test, pred)))
[참조]
'파이썬 머신러닝 완벽 가이드' , 권철민, 위키북스
'머신러닝' 카테고리의 다른 글
🤖 ML 코드 입문 - 교차 검증 및 StartifiedKFold (0) 2024.02.26 🤖 정확도, 정밀도, 재현율, 특이도, F1 점수? (0) 2024.02.26 🤖 데이터 유출(Data Leakage)와 파이프라인(pipeline) (1) 2024.02.26 🤖Machine Learning_편향과 분산(Bias & Variance) (0) 2024.02.21 🤖Machine Learning_최적화(Optimization) (0) 2024.02.20