AI

ML : Scikit-learn : Parameter & Atrribute & Method

월곡동로봇팔 2020. 4. 15. 10:24

요즘 대학원에서 연구생활을 하다보니, 코딩을 공부할 기회가 많이 적어지긴 했다....

그러면서 동시에 포스팅에 너무 뜸해지다가, 다행히 수업 중 신경망입문을 들으면서 sklearn에 대해서 다시 자세히 배우는 것 같아 다행이다. 까먹기 전에, 그리고 중간고사가 닥치기 전에 미리미리 해두기 위해 오늘 블로그 포스팅을 미리 해두려 한다.

 

다른 블로그 포스팅을 보더라도, scikit-learn, sklearn에서 생성자로 쓰이는 파라미터들에 대한 설명이 자세히 없는 것 같아 내가 미리 적어두어서 나중에 사용하고자 한다.

 

Parameter

Perceptron(
    penalty=None,
    alpha=0.0001,
    fit_intercept=True,
    max_iter=1000,
    tol=0.001,
    shuffle=True,
    verbose=0,
    eta0=1.0,
    n_jobs=None,
    random_state=0,
    early_stopping=False,
    validation_fraction=0.1,
    n_iter_no_change=5,
    class_weight=None,
    warm_start=False,
)

Perceptron 의 class를 보면, 여러가지 init에서 생성해주어야 할 부분이 굉장히 많다.

자세하게 보고 싶다면, https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Perceptron.html

 

sklearn.linear_model.Perceptron — scikit-learn 0.22.2 documentation

 

scikit-learn.org

위의 페이지로 들어가서 자세히 확인하면 된다.

 

나는 이 포스팅에서는 내가 주로 쓸 부분만 미리 내가 정리를 해두려한다.

 

1.  penalty : {‘l2’,’l1’,’elasticnet’}, default=None

 

perceptron의 경우는 gradient Descent 방법으로 optimize를 하게 되는데, 이렇게 되면 training data에 대해 과적합이 발생할 수 있다. 쉽게 말해서 training data로 학습하게 되니, training data 에만 잘 맞는 model이 되고 실제로는 잘 맞지 않는 과적합 문제가 발생한다. 따라서 이를 방지하고자 l1,l2,elasticnet 을 설정해주면 된다. default=None.

 

2. alpha: float, default=0.0001

 

2020/03/08 - [machine_learning/DL] - ML & DL : 오류를 막는 방법

 

ML & DL : 오류를 막는 방법

2019/10/24 - [machine_learning] - Machine-Learning & Deep-Learning 오류 Machine-Learning & Deep-Learning 오류 딥러닝에서 흔히 일어나는 오류들을 정리 1. Learning Rate 조정 !! large learning rate : ov..

mambo-coding-note.tistory.com

정규화 방법

위 글을 보면, Regularization는 뒤에 w**2들을 모두 곱해주어 앞에 람다를 곱해준다. 람다가 여기서 alpha다.

 

3. fit_intercept : bool, default=True

 

data가 편중해있는지를 True, False로 boolean으로 판단한다. bias을 추정해야하는지 여부.  False이면 데이터가 이미 중앙에있는 것으로 간주된다.

 

4. max_iter : int, default=1000

훈련 데이터 (일명 에포크)를 통과하는 최대 패스 수. partial_fit method에는 영향을 주지 않고, fit method의 동작에만 영향을 준다. 총 training data를 가지고 train 한 횟수이다.

 

5. tol : float, default=1e-3

tol > previous_loss - loss, 즉 전의 loss와 지금 loss의 차이가 tol 보다 작아지면, 그만하면 됬다!! 라는 의미이다. 그래서 tol로 기준을 정하고 사용자가 그 기준에 미만으로 loss가 잡히면 epoch이 남아있더라도 끝낼 수 있다.

 

6. shuffle : bool, default=True

True로 해두면, epoch마다 training data마다 shuffle이 일어난다.

 

7. verbose : int, default=0

진행정도를 알려주는 파라미터이다. default=0으로 하면 진행정도는 생력, 1로 지정하게되면 진행정도를 보여준다.

 

8. eta0 : double, default=1

learning rate이다. 매번 loss function이 optimize하는 과정에서 weight가 update되는데 w = w -aΔw 이다. a가 여기서 eta0라고 생각하면 된다.

 

9. n_jobs : int, default=None

OVA (OVA - Open Virtual Appliance) (다중 클래스 문제점의 경우 하나) 계산을 수행하는 데 사용할 CPU 수이다. joblib.parallel_backend 컨텍스트에 있지 않으면 1을 의미하지 않는다. -1은 모든 프로세서를 사용한다는 의미다.

 

10. random_state : int, RandomState instance, default=None

데이터를 섞을 때 사용할 의사 난수 생성기의 seed다. tensorflow에서 seed 생성하는 것과 같다. 여기서 seed는 숫자 하나를 뿌리라고 생각하면된다. seed가 1인 난수는 같은 결과를 반복해서 내고, seed가 None이라면 seed 숫자도 무작위라서 결과가 항상 다르게 나온다.

int이면 random_state는 난수 생성기에서 사용하는 시드다. RandomState 인스턴스 인 경우 random_state는 난수 생성기다. None이면 난수 생성기는 np.random에서 사용하는 RandomState 인스턴스다.

 

11. early_stopping : bool, default=False

True로 하게된다면 validation 검사시 score가 효과적으로 늘지 않는다면, 조기 중지를 사용하여 교육을 종료할지를 정하는 파라미터이다. True로 설정하면 n_iter_no_change 연속 epoch에 대해 유효성 검사 점수가 적어도 1 % 향상되지 않으면 훈련 데이터의 계층화 된 부분을 validation 검사로 자동 설정하고 training을 종료한다.

 

12. validation_fraction : float, default=0.1

조기 중지를위한 validation set으로 따로 설정할 training data의 비율이다. 0과 1 사이 여야한다. 이 validation_fraction의 경우는 early_stopping이 True 인 경우에만 사용된다. 

만약 내가 validation data를 임의로 만든다면, early stopping과 validation_fraction은 필요없을 것 같다.

뭐 간단하게 할거면 낫배드 한 method인 것 같다.

 

13. n_iter_no_change : int, default=5

early_stopping 하기 전에, 반복을 해도 효과가 미비한 것을 카운트하는 반복 횟수입니다.

 

14. class_weight : dict, {class_label: weight} or “balanced”, default=None

class_weight fit 매개 변수에 대한 사전 설정이다.
클래스와 관련된 가중치. 주어지지 않으면 모든 수업은 1을 가진다.
“balanced”모드는 y의 값을 사용하여 입력 데이터의 클래스 주파수에 반비례하는 가중치를 n_samples / (n_classes * np.bincount (y))로 자동 조정한다.

 

15. warm_start : bool, default=False

True로 설정하면 이전 호출의 솔루션을 초기화에 맞게 재사용하고, False이면 이전 솔루션을 없애고 처음부터 다시한다.

 

 

Attribute 정리

1. coef_ : ndarray of shape = [1, n_features] if n_classes == 2 else [n_classes, n_features]

weight들의 수치를 numpy형태로 return한다.

 

2. intercept_ : ndarray of shape = [1] if n_classes == 2 else [n_classes]

decision function의 constant를 return 한다.

 

3. n_iter_ : int

early_stopping 를 고려했을 때, 실제로 training 한 iteration의 횟수를 return한다.

 

4. classes_ : ndarray of shape (n_classes,)

class의 label을 return 한다.

 

5. t_ : int

training 중에 수행 된 weight 업데이트 횟수. (n_iter_ * n_samples)와 동일하다.

 

 

3. Method

여기서 sample_weight는 처음 fit 하기 전에, weight를 우리가 먼저 설정을 해줄 수 있다. 잘만 설정을 해준다면, 아마 효과가 더 좋을 것이다. 설정하지 않는다면, unique한 값으로 한다.

 

partial_fit의 경우는 max_iter=1 인 값이다.