2장 사이킷런으로 시작하는 머신러닝
1 사이킷런 소개와 특징
- 파이썬 머신러닝 라이브러리 중 가장 많이 사용되는 라이브러리
- 파이토치(커스터마이즈 쉬움. 최신 모델에 많이 사용), 텐서플로우(커스터마이즈 복잡) 등 딥러닝 전문 라이브러리가 강세지만 데이터분석가가 의존하는 대표적인 ML 라이브러리
- -> 통계 기반이라서 설명이 가능하기 때문
- 딥러닝은 머신러닝 기법 중 하나
- 머신러닝 : 통계 기반의 알고리즘을 이용한 기계학습방법
- 딥러닝 : 신경망
- 사이킷런의 특징
- 파이썬 기반의 다른 머신러닝 패키지도 사이킷런 스타일의 api를 지향할 정도로 쉬운 api 제공
- 머신러닝을 위한 다양한 알고리즘과 개발을 위한 편리한 프레임워크와 api 제공
- 오랜 기간 실전 환경에서 검증되었고, 많은 환경에서 사용되는 성숙한 라이브러리
2 첫 번째 머신러닝 만들어보기 - 붓꽃 품종 예측
- 붓꽃 데이터셋으로 붓꽃의 품종을 분류
- 꽃잎의 길이, 너비, 꽃밭침의 길이, 너비 총 4개의 feature
- 레이블은 3개. Setosa, Verlcolor, Virginica
- Task : 꽃 품종 3개 예측 -> 다중 분류
- 분류 : 대표적인 지도학습 방법의 하나
- 지도학습은 학습을 위한 다양한 피쳐와 분류 결정값인 레이블 데이터로 모델을 학습
- 별도의 테스트 데이터셋에서 미지의 레이블을 예측
- 학습 데이터셋 : 학습을 위해 주어진 데이터셋
- 테스트 데이터셋 : 머신러닝 모델의 예측 성능을 평가하기 위해 주어진 별도의 데이터셋. 학습에 아예 넣지 않은 데이터
머신러닝 기본 프로세스
0. 데이터 준비 -> 가장 많은 시간, 고민
1. 데이터셋 분리: 데이터를 학습 데이터와 테스트 데이터로 분리
2. 모델 학습 : 학습 데이터를 기반으로 머신러닝 알고리즘을 적용해 모델 학습
3. 예측 수행 : 학습된 모델을 이용, 테스트 데이터 분류 예측
4. 평가 : 예측된 결과와 테스트데이터의 실제 결과를 비교해 모델 성능 평가
3 사이킷런 기반 프레임워크 익히기
Estimator 이해 및 fit(), predict() 메서드
- Estimator
- 지도학습: 분류(Classification), 회귀(Regression) Classifier과 Regressor를 합친 것.
- fit(), predict()을 내부에서 구현=> 학습, 예측 결과 반환
- evaluation 함수, 하이퍼 파라미터 튜닝을 지원하는 클래스의 경우 estimator를 인자로 받음
- Classifier(분류)
- 분류 구현 클래스
- DecisionTreeClassifier
- RandomForestClassifier
- GradientBosstingClassifier
- GaussianNB
- SVC
- Regression(회귀)
- 회귀 구현 클래스
- LinearRegression
- Ridge
- RandomForsetRegressor
- GradientBoostingRegressor
- 비지도학습인 차원축소, 클러스터링, 피처 추출 등을 구현한 클래스 역시 대부분 fit(), transform()을 적용
- fit()은 학습이 아닌 입력 데이터의 형태에 맞춰 데이터를 변환하기 위해 사전구조를 맞춤
- transform()은 입력 데이터의 차원 변환, 클러스터링, 피처 추출 등의 실제 작업에 사용
- fit() + transform() = fit_transform()
교차 검증
- ML 알고리즘으로 학습시킨 뒤 성능 평가를 위해 별도의 테스트 데이터를 사용함
- -> 과적합(Overfitting <-> 과소적합)이 발생할 수 있음
- ML은 신뢰성 높은 데이터셋이 많을 수록 성능이 통상적으로 좋음
- 데이터셋이 적을 경우 모델에 최대한 많은 데이터를 보여주기 위해 사용
K 폴드 교차 검증
- 가장 보편적으로 사용되는 교차 검증 방법
- K개의 데이터 폴드 세트를 만들어 K번만큼 각 폴트에 학습과 검증 평가를 반복적으로 수행
- 각각 학습/검증을 독립적으로 진행하는 프로세스
StratifiedKFold
- 계층화된 K-Fold 교차 검증기
- 학습/테스트 세트의 데이터를 분할하기 위한 학습/테스트 인덱스를 제공
- 이 교차 검증 개체는 계층화된 폴드를 반환하는 KFold의 변형으로, 폴드는 각 클래스의 샘플 비율을 보존하여 만들어짐
교차 검증을 보다 간편하게 - cross_val_score()
- cross_val_score()는 폴드 세트를 설정하고 반복문 for 루프에서 반복으로 학습 및 테스트 데이터의 인덱스를 추출, 반복적으로 학습과 예측을 수행하는 과정을 한 번에 수행해주는 API
- scoring 매개변수를 통하여 평가 지표를 지정
- 다중 평가 지표 사용하고 싶을 경우 -> 리스트로 작성하여 전달
- 교차 검증을 사용하는 가장 간단한 방법은 cross_val_score 추정기와 데이터 세트에서 도우미 함수를 호출하는 것
GridSearchCV
- 교차검증과 최적 하이퍼 파라미터 튜닝을 한 번에
- 하이퍼 파라미터 : 머신러닝 알고리즘을 구성하는 주요 구성 요소. 값을 조정해 알고리즘의 예측 성능 개선 가능
- 주요 파라미터
- estimator: classifier, regressor, pipeline 사용 가능
- param_grid : key+리스트값을 가지는 딕셔너리. estimator 튜닝을 위해 파라미터명과 사용될 여러 파라미터 값을 지정
- scoring : 테스트 세트에서 교차 검증된 모델의 성능을 평가
- cv : int. 교차 검증 생성기 또는 반복 가능. default=None(기본 5겹 교차 검증)
- refit : dafault는 refit=True. 가장 좋은 파라미터 설정(가장 잘 발견된 매개변수를 사용)으로 재학습 시킴
5 데이터 전처리
- ML 알고리즘은 데이터에 기반하고 있기 때문에 어떤 데이터를 입력으로 가지냐에 따라 결과가 크게 달라질 수 있음
- ML 알고리즘에 학습데이터를 입력으로 사용하기 위해서는 NaN, Null 값은 허용 X-> 다른 값으로 처리해야됨
- ML 알고리즘 학습데이터에 문자열 허용 X-> 숫자값으로 변환 필요
데이터 인코딩
- 머신러닝을 위한 대표적인 인코딩 방식 2가지
- 레이블 인코딩 : 카테고리 피처를 코드형 숫자값으로 변환
- 원-핫 인코딩 : 피처 값의 유형에 따라 새로운 피처를 추가해 고유값에 해당하는 컬럼에 1, 나머지에는 0을 표시
레이블 인코딩
- 사이킷런의 레이블 인코딩은 LabelEncoder() 클래스로 구현
- LabelEncoder()로 객체 생성 후 fit(), trandform()을 호출해 레이블 인코딩 수행
원-핫 인코딩(One-Hot Encoding)
- OneHotEncoder 클래스로 변환
- fit(), transform() 을 같이 사용
- OneHotEncoder로 변환 전 모든 문자열 값이 숫자형 값으로 변환되어야 함
- pandas의 get_dummies를 사용하면 문자열에서 바로 원핫인코딩 가능
- LabelEncoder로 바꿔줄 수 있음
- 입력값으로 2차원 데이터 필요
- pandas에서 지원하는 get_dummies() 함수
- pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)
피처 스케일링과 정규화
- 서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업 = 피처 스케일링(Feature Scaling)
- 표준화(Standardization) : 데이터의 피처 평균이 0이고 분산이 1인 가우시안 정규 분포를 가진 값으로 반환하는 것
- 최대한 비슷하게 만들어주지만 똑 떨어지게 만들어주진 않음
- 정규화(Formalization) : 서로 다른 피처의 크기를 통일하기 위해 변환
- 데이터 특성들에 범주형이 많으면 정규화
- 특성들에 연속된 숫자 데이터가 많은데 범주를 따르지 않으면 표준화를 해준다
- 특성이 연속된 숫자 데이터면 무조건 표준화or정규화로 스케일링
- 특성이 범주형/문자열 데이터면 무조건 원-핫인코딩
StandaraScaler
- 서포터벡터머신, 회귀알고리즘은 데이터가 가우시안 분포를 갖고 있다 가정하고 구현되었기 때문에 사전에 표준화를 진행함
MinMaxScaler
- 정규화
- 데이터가 가우시안 분포가 아닐 경우 적용
- 최소값=0, 최대값=1
학습 데이터와 테스트 데이터의 스케일링 변환 시 유의점
- 학습데이터와 테스트 데이터는 동일한 방법으로 스케일링 되어야 함
- 스케일링 시 학습데이터의 분모의 값이 다른 경우 스케일링의 결과가 달라짐
- MinMaxScaler = (x - x의 최소값) / (x의 최대값 - x의 최소값)
- 스플릿 전 전체 데이터에서 X_max, X_min을 찾고 스케일링하는 것이 가장 좋음
- 불가능할 경우
'데이터분석 공부 > DSBA 4기' 카테고리의 다른 글
19/03/2024 TIL (0) | 2024.03.20 |
---|---|
18/03/24 TIL 분류 성능 평가 지표(정확도, 오차행렬, 정밀도, 재현율, F1 스코어) (0) | 2024.03.18 |
12/03/2024 TIL (1) | 2024.03.12 |
iloc loc Value Error 정리 (0) | 2024.03.11 |
파이썬 데이터프레임 특정 문자 포함된 행 삭제하기 / str.replace() 추천하지 않는 경우 (0) | 2024.03.09 |