매직코드
article thumbnail

머신러닝

명확한 답이 주어진 학습 데이터 세트를 통해 학습

테스트 데이터 세트를 통해 미지의 정답을 예측

 

> 사이킷런 이용
- 
sklearn.datasets : 데이터세트 생성 모듈
-
 sklearn.tree : 트리 기반 ML알고리즘 구현한 클래스 모임
-
 sklearn.npdel_selection : 데이터분리, 최적의 *하이퍼 파라미터 평가위한 모듈

 

* 하이퍼 파라미터 : 최적의 학습을 위해 직접 입력하는 파라미터 통칭

 

머신러닝 개요

1. 데이터 불러오기

2. 데이터 분리 : 학습데이터, 테스트 데이터

3. 모델 학습 : 학습데이터 이용, 머신러닝알고리즘(ML알고리즘) 적용 (x_train, y_train)

4. 예측 수행 : 테스트 데이터로 결과값 예측 (x_test)

5. 평가 : 예측된 결과값이 테스트 데이터의 실제 값과 얼마나 비슷한지 평가

 

교차검증

과적함(overfitting)을 개선하기 위해 교차검증 이용

기존에 분리한 학습데이터, 테스트데이터 중 학습데이터를 한번 더 분리하여 검증데이터를 생성

데이터 편중을 막기 위해 별도의 여러 세트로 구성된 학습 데이터 세트와 검증 데이터 세트에서 학습과 평가 수행

 

> k폴드 교차검증

학습데이터를 k개로 분리하여 각 그룹별로 한번씩 돌아가며 검증데이터의 역할을 하여 k번의 교차검증을 수행

 

> stratified k 폴드 교차검증

필요한 사건에 대한 데이터값이 적을 때 학습데이터와 테스트 데이터에 잘 분배되지 못하는 문제를 해결

 

ex. 1억개의 데이터 중 내가 원하는 사건에 대한 데이터가 1000개만 있다면 stratified k 폴드는 이 1000건에 대해서 동일하게 학습과 검증 데이터 세트를 분배할 수 있도록 레이블데이터의 분포를 고려

 

회귀에서는 연속값을 사용하여 레이블 데이터값별로 분포를 정하는게 의미없기 때문에 지원되지 않음

 

> cross_val_score() 교차검증

아래 3단계의 절차를 한번에 수행하여 교차검증을 쉽게 할 수 있게 해주는 API1. 폴드 세트 설정2. for문으로 데이터 인덱스 추출3. 반복학습 및 예측, 평가

cross_val_score(estimator, X, y=none, scoring=none, cv=none, n_jobs=1, verbose=0, fit_params=none, pre_dispatch='2*n_jobs')

 

estimator : ML알고리즘 변수명 작성 / 분류인 경우 stratified k폴드로 교차검증 수행, 회귀 알고리즘인 경우에는 k폴드로 교차검증 수행X : 피처 데이터 세트y : 레이블 데이터 세트scoring : 예측 성능 평가 지표cv : 교차 검증 폴드 수

 

> GridSearchCV

교차검증과 최적 하이퍼 파라미터 튜닝을 한번에 수행하이퍼 파라미터 튜닝을 통해 예측 성능 개선순차적으로 수행하기 때문에 시간이 오래 걸림

 

데이터 전처리

머신러닝 알고리즘에서는 Null, NaN값은 허용되지 않음 반드시 대체 값 입력 혹은 데이터 삭제 처리가 필요사이킷런 머신러닝 알고리즘은 문자열 입력이 안되기 때문에 숫자형으로 변환 필요id나 주민번호 같이 식별용 데이터는 삭제 추천

 

숫자형 변환을 위한 인코딩은 레이블 인코딩과 원핫인코딩이 있음

 

> 레이블 인코딩

fit(), transform()을 이용해 인코딩 수행

from sklearn.preprocessing import LabelEncoder

items = ['a', 'b', 'c', 'd', 'e']

# 레이블 인코더 객체 생성
encoder = LabelEncoder()

# 인코딩 수행
encoder.fit(items)
labels = encoder.transform(items)

print('인코딩 변환값 : ', labels)

a는 0, b는 5, c는 1 등의 숫자값을 변환

순서대로 변환되지 않기 때문에 어떤 순서로 변환되었는지 알고싶다면 encoder.classes_를 통해 확인 가능

 

> 원-핫 인코딩

위의 레이블 인코딩만 하면 숫자값의 크고 작음에 따라 가중치가 부여되는 문제가 발생

가중치 문제를 해결하기 위해 원-핫 인코딩 이용

이 경우에는 2차원이 될 수 밖에 없음

 

아래와 같이 해당하는 경우에만 1을 넣어주고 나머지는 0을 넣어줌

    a.    e.   c.   d.   b

a.  1    0.   0.   0.   0

b.  0.   0.   0.   0.   1

c.  0.   0.   1.   0.   0

d.  0.   0.   0.   1.   0

e.  0.   1.   0.   0.   0

profile

매직코드

@개발법사

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!