인공지능

전처리(1)

yul_S2 2023. 1. 8. 00:22
반응형

모델튜닝

SGDClassifier 클래스의 다른 매개변수들을 바꾸는 작업을 모델을 튜닝한다 라고 한다.

 

 

1. 모델 튜닝

# 로지스틱 회귀에 경사하강법을 적용하여 모델 훈련 하고 평가하기

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
cancer = load_breast_cancer()
x=cancer.data
y=cancer.target  #정답
x_train_all, x_test, y_train_all, y_test = train_test_split(x,y, stratify=y, test_size=0.2, random_state=42)

▶위스콘신 유방암데이터사용 (breast_cancer)

훈련세트와 테스트 세트로 나눈다

 

 

2. 하이퍼 파라미터(hyperparameter)

loss함수와 같은 매개변수의 값은 가중치나 절편처럼 알아서 학습되는 것이 아니라 사용자가 직접 지정해야 하는 매개변수이다. 이것을 하이퍼 파라미터라고 한다.

# log 매개변수 값을 log로 지정하여 로지스틱 손실함수를 손실함수로 지정

from sklearn.linear_model import SGDClassifier
sgd = SGDClassifier( loss = 'log', random_state = 42 )
sgd.fit(x_train_all, y_train_all)
sgd.score(x_test, y_test)
# 0.8333333333333334

SGDClassifier 클래스를 이용하여 로지스틱 회귀 모델을 훈련한다.

x_train_all,  y_train_all을 전달한다.

score 메서드에 x_test, y_test 전달하여 성능 평가한다.

 

 

# log 매개변수 값을 hinge로 지정하여 SVM

from sklearn.linear_model import SGDClassifier
sgd = SGDClassifier( loss = 'hinge', random_state = 42 )
sgd.fit(x_train_all, y_train_all)
sgd.score(x_test, y_test)
# 0.9385964912280702

 

 

 

3. 성능

테스트 세트는 실전에 투입된 모델의 성능을 측정하기 위해 사용된다.
그런데 테스트 세트로 모델을 튜닝하면 테스트 세트에 대해서만 좋은 성능을 보여주는 모델이 만들어진다.
모델이 비슷한 문제를 달달 외운다고 생각하면 된다.
이런 현상을 '테스트 세트의 정보가 모델에 새어 나갔다'라고 말한다. 또는 일반화 성능이 왜곡됐다고 한다.

 

 

 

 

 

4. 검증 세트

모델을 튜닝할 때 테스트 세트를 사용하지 않으면 된다.
그래도 모델을 튜닝하려면 성능 점수가 필요하다. 따라서, 새로운 데이터 세트를 만들어 검증에 사용한다.
이를 검증 세트(validation set)이라고 한다.

테스트 세트는 모델 튜닝을 끝내고 실전에 투입하기 전에 한번만 사용하는 것이 좋다. 즉, 모델 튜닝을 위한 세트는 따로 준비해야한다.

# 1.  데이터준비

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
cancer = load_breast_cancer()
x=cancer.data
y=cancer.target  #정답
x_train_all, x_test, y_train_all, y_test = train_test_split(x,y, stratify=y, test_size=0.2, random_state=42)

▶위스콘신 유방암데이터사용 (breast_cancer)

훈련세트와 테스트 세트로 나눈다

 

 

# 2. 검증세트 분할

x_train, x_val, y_train, y_val = train_test_split(x_train_all, y_train_all, stratify=y_train_all, test_size=0.2, random_state=42)
print(len(x_train), len(x_val))
# 364 91

▶x_val, y_val : 검증데이터

455개의 훈련세트가 8:2 비율로 나누어제 x_train(훈련세트)는 364개, x_val(검증세트)는 91개로 나누어졌다.

 

 

# 3. 검증세트 모델 평가  

from sklearn.linear_model import SGDClassifier
sgd = SGDClassifier(loss='log', random_state=42)
sgd.fit(x_train, y_train)
sgd.score(x_val,y_val)
# 0.6923076923076923

▶ 평가 점수보다 낮아졌다. 훈련세트의 크기가 줄어들었기 때문이다.

데이터 양이 적으면 컴증세트의 비율이나 random_state 매개변수의 값을 조금만 조절해도 성능 평가 점수가 크게 변한다. 데이터 양이 너무 적은 경우에는 검증 세트를 나누지 않고 교차 검증을 사용하기도 한다.

 

 

 

 

5. 데이터 전처리와 특성의 스케일

실전에서 수집된 데이터는 누락된 값이 있을 수도 있고 데이터의 형태가 균일하지 않을 수도 있다. 
따라서, 데이터를 적절히 가공하는 '데이터 전처리'가 필요하다.

특성의 스케일은 알고리즘에 영향을 준다.

경사하강법은 스케일에 민감한 알고리즘이므로 특성의 스케일을 맞추는 전처리를 해야한다.

 

 

 

 

반응형