728x90
728x90

머신러닝은 데이터 가공/ 변환, 모델 학습/ 예측 , 그리고 평가의 프로세스로 구성된다.

 

분류의 선능 평가 지표

- accurary

- Confusion Matrix

- Precision

- Recall

- F1

- ROC_AUC

 

트레이드 오프 

- 정밀도 / 재현율 트레이드 오프

- 정밀도와 재현율은 상호 보완적인 평가 지표이기 때문에 어느 한쪽ㄷ을 강제로 높이면 다른 하나의 수치는 떨어지기 쉽습니다.

- 이를 정밀도/재현율 트레이드 오프 라고 합니다.

- 임계값 : threshold

- precision_recall_curve(y_test,pred_proba_class1)

- precisions, recalls, thresholds = precision_recall_curve(y_test,pred_proba_class1)

- 임계값의 인덱스 추출 하여 nd.array 로 생성

- 인덱스에 해당하는 임계값 추출

- 인덱스에 해당하는 정밀도와 재현율 값 추출

- 이를 이용한 시각화

- Binarizer(theshold=임계값) 변경된 값 , predict_proba()[:,1] 예측확률 배열에서 1에 해당하는 칼럼값을 변경 

 

교차검증

- KFold (n_splits = 분할할 폴드 수)

- cross_val_score

 

하이퍼파라미터 튜닝

- GridSearchCV(모델, param_grid = {파라미터 딕셔너리} , scoring=점수 , cv = 5)

- 최적의 하이퍼 파라미터 : best_params_

- 최고의 정확도 : best_score_

- 최적의 하이퍼 파라미터로 학습괸 Estimator : best_estimator_

 

결정트리 / DecisionTree Classifier and Regression

prameter =

- {'min_samples_split':'노드를 분할 하기 위한 최소한의 샘플 데이터 수 / defualt = 2'}

- {'min_samples_leaf':'말단 노드가 되기 위한 최소한의 샘플데이터 수'}

- {'max_features':'최적의 분할을 위해 고려할 최대 피처 개수 / defualt =None'}

- {'max_depth':'트리의 최대 깊이 / default = None'}

- {'max_leaf_nodes':'말단 노드의 최대 개수'}

- 결정트리분류 모델이 반복시마다 동일한 예측 결과 도출을 위해 random_state 설정 

 

randomforest

728x90
728x90

파이프 라인 - PipeLine

- 데이터 처리 컴포넌트(Component)들이 연속되어 있는것

 

데이터 수집

- 데이터 다운로드

- 크롤링

- 데이터 저장소 API 사용

 

데이터 구조 확인

- 판다스(Pandas) DataFrame의 메소드들을 활용 ex)head() , info() describe()등

- 그래프를 활용 ex) matplotlib , seaborn 등

 

데이터 훈련 / 테스트 셋 분리 - train test split

- 사이킷런 train_test_split

- 데이터 스누핑 : 기대성능이 나오지 않을 가능성이 있음

- 계층적 샘플링 : 데이터셋 샘플링에서 발생할 수 있는 편향을 계층이라는 그룹핑을 통해 하위 데이터셋을 계층 비율에 맞춰 샘플링

 

 

데이터 이해를 위한 탐색과 시각화

- matplotlib을 활용

- 상관계수 조사 

- 판다스 plot 산점도 행렬을 이용한 히스토그램 확인

- 특성 조합으로 확인

 

데이터 정제

- 특성값이 없는 경우 

- 해당 구역을 제거

- 전체 특성을 삭제

- 어떤 값으로 채움 (0, 평균, 중간값 등)

- 사이킷런 SimpleImputer

- 텍스트와 범주형 특성

- 특성 스케일링 : StandardScaler() , MinMaxScaler()

 

모델 선택과 훈련

- 훈련세트에서 훈련하고 평가 : LinearRegression() 

- 훈련 세트에 대한 모델 RMSE : mean_squared_error()

- 사이킷런의 k-겹 교차 검증 : k-fold cross-validation

- 교차검증을 사용한 평가 : cross_val_score()

 

모델 세부 튜닝

-적은 수의 조합 탐색 그리드 탐색 : GridSearchCV()

-탐색 공간이 클때 RandomizedSearchCV)-

- 앙상블

- 최상의 모델과 오차 분석 : feature_importances_

 

728x90
728x90

계층적 샘플링 - Stratified sampling

- 모집단을 여러개의 층으로 구분하여, 각 층에서 n개씩 랜덤하게 추출하는 방법

- 순수한 무작위 샘플링 방식은 데이터의 크기가 충분히 크지 않은 상황 등 샘플링 편향이 발생할 수 있는 가능성이 생길수 있습니다. 

- 전체 데이터를 계층별 그룹으로 나눈뒤 . 테스트 세트가 전체 데이터의 각 계층의 계수 비율 만큼 샘플링 합니다.

 

 

사이킷 런 계층적 샘플링 - sklearn.model_selection.StratifiedShuffleSplit

- 사이킷 런에서 제공하는 API 참고 자료의 예제를 통해 알아 보겠습니다.(*사이런을 먼저 설치 합니다.)

 

StratifiedShuffleSplit(n_splits=10, *, test_size=None, train_size=None, random_state=None

- 사용할 수 있는 parameter 들입니다.

n_splits int , default = 10
분리할 데이터 셋의 개수를 지정합니다.
test_size float, int, default = None
테스트 셋의 비율을 지정합니다.
train_size float, int, defalt = None
훈련 셋의 비율을 지정합니다.
random_state int or RandomState instance, defalt = None
생성된 훈련 및 데스트 셋 난수를 지정

예제

- 파이썬 numpy를 이용해 ndarray를 생성합니다.

- 사이킷런 StratifiedShuffleSplit 을 사용해 계층적 샘플링을 진행합니다.

>>> import numpy as np
>>> from sklearn.model_selection import StratifiedShuffleSplit

>>> X = np.array([[1,2],[3,4],[1,2],[3,4],[1,2],[3,4]])
>>> y = np.array([0,0,0,1,1,1])

>>> print('X : \n', X)
>>> print('y : \n', y)

X : 
 [[1 2]
 [3 4]
 [1 2]
 [3 4]
 [1 2]
 [3 4]]
y : 
 [0 0 0 1 1 1]

- 5개 계층으로 나누고, 테스트 셋 비율을 0.5 로 지정합니다.

split = StratifiedShuffleSplit(n_splits = 5 , test_size = 0.5, random_state = 0)

StratifiedShuffleSplit Methods 

- 사용할수 있는 함수로는 get_n_splits() 와 split() 함수가 있습니다.

- get_n_splits() 함수는 X , y의 arguments 로 features 데이터 셋와 labels 등 데이터 셋을 대입하면, return 값으로 n_plits 을 반환합니다.

>>> split.get_n_splits(X, y)
5

- split() 함수는 데이터를 훈련 및 테스트 세트로 분할하기 위한 인덱스를 생성해 반환합니다.

>>> for train_index , test_index in split.split(X,y):
		print('train_index : ', train_index, 'test_index : ', test_index)

train_index :  [5 2 3] test_index :  [4 1 0]
train_index :  [5 1 4] test_index :  [0 2 3]
train_index :  [5 0 2] test_index :  [4 3 1]
train_index :  [4 1 0] test_index :  [2 3 5]
train_index :  [0 5 1] test_index :  [3 4 2]

 

Scikit learn API Reference
https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedShuffleSplit.html

 

 

 

728x90
728x90
728x90

+ Recent posts