일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스프링부트
- Developer
- RDS
- 스프링
- 프로그래밍
- 온라인테스트
- 게임개발동아리
- 배포
- 자바개발자
- 위키북스
- 라피신
- 인프라
- UNICON
- 도커
- 티스토리챌린지
- UNIDEV
- 체크인미팅
- AWS
- 전국대학생게임개발동아리연합회
- 개발공부
- CICD
- EC2
- 백엔드
- 백엔드개발자
- 인디게임
- 프리티어
- UNICON2023
- 42서울
- 생활코딩
- 오블완
- Today
- Total
Hyun's Wonderwall
[Pylots] 파머완 - 02. 사이킷런으로 시작하는 머신러닝 본문
[Chapter 02] 사이킷런으로 시작하는 머신러닝
1. 사이킷런 소개와 특징
사이킷런(scikit-learn): 파이썬 머신러닝 라이브러리.
import sklearn
2. 붓꽃 품종 예측하기
붓꽃의 특징을 기반으로 품종을 분류하려고 한다. 분류는 지도학습 방법 중 하나.
- 붓꽃 데이터 피처: Sepal length, Sepal widtn, Petal length, Petal width
- 붓꽃 데이터 품종(레이블): Setosa, Vesicolor, Virgiinica (3종류)
*피처: 특징. 학습 모델에서 제공하는 입력 변수. 단순 선형 회귀에서의 X변수.
*레이블(label) 데이터: 분류 결정값. 기계학습으로 예측하는 실제 항목. y=f(X)에서 y.
*지도학습: 학습을 위한 다양한 피처와 레이블 데이터(명확한 정답 주어짐)로 모델을 학습한 뒤 별도의 데이터 세트에서 미지의 레이블을 예측한다. // 기출 문제집으로 시험 대비하고 실전 시험 치는 것과 비슷.
- 학습 데이터 세트(train): 명확한 정답이 주어진 데이터
- 테스트 데이터 세트(test): 머신 러닝 모델 예측 성능 평가용 데이터
사이킷런에서 사용할 모듈을 임포트하자.
from sklearn.패키지모듈 import 모듈/클래스
*모듈/클래스 구분법: 모듈은 스네이크 케이스, 클래스는 파스칼 케이스(단어별 첫글자 대문자)
- sklearn.datasets: 사이킷런에서 자체적으로 제공하는 데이터 세트를 생성하는 모듈의 모임. // 붓꽃 데이터 세트 생성을 위해 load_iris를 임포트하였다.
- sklearn.tree: 트리 기반 ML 알고리즘을 구현한 클래스의 모임. // 의사 결정 트리 알고리즘을 구현한 DecisionTreeClassifier를 임포트하였다.
- sklearn.model_selection: 학습 데이터와 검증 데이터, 예측 데이터로 데이터를 분리하거나 최적의 하이퍼 파라미터로 평가하기 위한 다양한 모듈의 모임. // train_test_split으로 데이터를 분리하였다.
* 하이퍼 파라미터란? 머신러닝 알고리즘별로 최적의 학습을 위해 직접 입력하는 파라미터들. 하이퍼 파라미터를 통해 머신러닝 알고리즘의 성능을 튜닝할 수 있다.
분류 프로세스:
1. 데이터 세트 분리 (학습&예측)
2. 모델 학습 (학습 데이터를 기반으로 ML 알고리즘 적용해 모델 학습시킴)
3. 예측 수행 (테스트 데이터의 분류를 예측)
4. 성능 평가 (예측과 테스트 데이터의 실제 결괏값 비교)
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.data # data: 데이터 세트에서 피쳐만으로 된 데이터를 ndarray로(numpy로) 가지고 있다.
iris_bael = iris.target # target: 데이터 세트에서 레이블 데이터를 ndarray로 가지고 있다.
# 붓꽃 데이터 세트를 DataFrame으로 로딩
iris_df = pd.DataFrame(data=iris_data, colums=iris.feature_names)
iris_df['label'] = iris.target # 새 column 생성
iris_df.head(3) # 3개 행 출력
# train_test_split() 사용해 학습용 데이터와 테스트용 데이터 분리:
# 파라미터는 (1)피처 데이터 세트, (2)레이블 데이터 세트, (3)전체 중 테스트 데이터 세트의 비율, (4) 난수 발생 시드값
X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label, test_size=0.2, random_state=11)
# DecisionTreeClassifier 객체 생성
dt_clf = DecisionTreeClassifier(random_state=11)
# 학습용 데이터로 학습 수행
dt_clf.fit(X_train, y_train)
# 학습이 완료된 DTC 객체에서 테스트 데이터 세트로 예측 수행
pred = dt_clf.predict(X_test)
# accuracy_score()로 정확도 측정. 실제와 예측 레이블 데이터 세트 비교.
from sklearn.metrics import accuracy_score
print('예측 정확도: {0:.4f}' .format(accuracy_score(y_test, pred)))
3. 사이킷런의 기반 프레임워크 익히기
3.1. Estimator 이해 및 fit(), predict() 메서드
지도학습 - 분류, 회귀가 주요 두 축
- ML 모델 학습을 위해서 fit()을, 학습된 모델의 예측을 위해 predict() 메서드를 제공한다.
[Classifier: 분류 알고리즘 구현 클래스] + [Regressor: 회귀 알고리즘 구현 클래스]
=> Estimator : 지도학습의 모든 알고리즘을 구현한 클래스.
비지도학습 - 차원 축소, 클러스터링, 피처 추출 등을 구현한 클래스는 fit(), transform()을 적용
- fit(): 입력 데이터의 형태에 맞춰 데이터를 변환하기 위한 사전 구조를 맞추는 작업
- transform(): 입력 데이터의 차원 변환, 클러스터링, 피저 추출 등 실제 작업을 할 때에 사용함
- fit_transform()도 존재
3.2. 사이킷런의 주요 모듈
3.3. 내장된 예제 데이터 세트
datasets 모듈의 여러 api들 호출해서 예제 데이터 세트 생성 가능
4. Model Selection 모듈 소개
4.1. 학습/테스트 데이터 세트 분리 - train_test_split()
예측을 수행하는 데이터 세트는 학습용 데이터 세트가 아닌, 전용 데이터 세트여야 한다.
train_test_split() 사용해 학습용 데이터와 테스트용 데이터를 분리한다.
- 파라미터는 (1)피처 데이터 세트, (2)레이블 데이터 세트 입력받은 후,
그후 선택적으로 다음 파라미터를 입력받는다: test_size, train_size, shuffle, random_state
- 반환값: X_train, X_test, y_train, y_test
4.2. 교차 검증
과적합(Overfitting)에 취약한 문제가 나타날 수 있다. - 학습 데이터에 과도하게 최적화되는 것.
=> 해결방안: 교차 검증으로 더 다양한 학습과 평가를 진행한다.사이킷런에서는 KFold와 StratifiedKFold 클래스를 제공
K 폴드 교차 검증: K개의 데이터 폴드 세트를 만들어서 K번만큼 각 폴트 세트에 학습과 검증 평가를 반복적으로 수행하는 방법.
Stratified K폴드: 불균형한 분포도를 가진 레이블 데이터 집합을 위한 K 폴드 방식. K 폴드에서 레이블 데이터 집합이 원본 데이터 집합의 레이블 분포를 학습 및 테스트 세트에 제대로 분배하지 못하는 경우의 문제를 해결한다.
4.3. GridSearchCV - 교차 검증과 최적 하이퍼 파라미터 튜닝을 한 번에
사이킷런은 GridSearchCV API를 이용해 Classifier나 Regressor와 같은 알고리즘에 쓰이는 하이퍼 파라미터를 순차적으로 입력하면서 편리하게 최적의 파라미터를 도출할 수 있는 방식을 제공한다.
파라미터의 집합을 만들고 이를 순차적으로 적용하면서 최적화를 수행할 수 있다.
5. 데이터 전처리
5.1. 데이터 인코딩
레이블 인코딩: 카테고리 피처를 코드형 숫자 값으로 변환하는 것. LabelEncoder 클래스로 구현.
원-핫 인코딩: 피처 값의 유형에 따라 새로운 피처를 추가해 고유 값에 해당하는 칼럼에만 1을 표시, 나머지 칼럼에는 0을 표시하는 방식.
5.2. 피처 스케일링과 정규화
표준화, 정규화
표준화: 데이터 피처 각각이 평균이 0이고 분산이 1인 가우시안 정규 분포를 가진 값으로 변환하는 것 (최소 0~최대1)
5.3. StandardScaler
표준화 지원 클래스
5.4. MinMaxScaler
데이터값을 0과 1 사이 범위 값으로 변환 (음수 값: -1~1로 변환) 데이터 분포가 가우시안 분포가 아닌 경우에 적용할 수 있다.
학습 데이터와 테스트 데이터의 스케일링 변환 시 유의점
'Study > Python-Machine-Learning' 카테고리의 다른 글
[Pylots] 파머완 - 01. 파이썬 기반의 머신러닝과 생태계 이해 (0) | 2024.03.23 |
---|---|
07. 문서 군집화 소개와 실습(Opinion Review 데이터 세트) (2) | 2023.12.26 |
[AIchemist] 파머완 - CH06. 차원 축소 (1~6) (0) | 2023.11.21 |
[AIchemist] 파머완 - CH05. 회귀 | 10. 회귀 실습 - 캐글 주택 가격: 고급 회귀 기법 (0) | 2023.11.14 |
[AIchemist] 파머완 - CH05. 회귀 | 9. 회귀 실습 - 자전거 대여 수요 예측 (0) | 2023.11.07 |