SGDClassifier, StandardScaler

2021. 9. 8. 21:18ai/Machine Learning

728x90

지금까지 Logistic Regression방식의 cancer(암), titanic 을 SKlearn , Tensorflow로 진행하였다

 

지금까지 sklearn에서 사용한 Logistic은 우리가 딱 배운만큼만 사용되는데 →

gradient descent algorism은 느리다 →

이진분류(binary classification)을 위해 sklearn이 범용화된 class를 제공 (이진분류 여러 알고리즘 쓰기 적합) 

SGDClassifier  Stochastic gradient descent algorithm

      classfier - 분류하다 / Stochastic 확률(론)적인

                     

 


# SGDClassifier를 이용해서 이진분류(binary classification)작업을 진행해 보아요!

import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import SGDClassifier

 

 

# model 생성


# loss값의 기본값은 hinge이고 이 값을 이용하면 SVM방식으로 분류
만약 loss값을 log로 주면 LogisticRegression방식으로 분류

# max_iter=5000 : 몇번 반복할까요? ( 너무 많이 반복하면 over fitting발생)

#  tol=1e-5        :  반복학습이 진행될 때 마다 loss값이 산출이되요!

#                        이 loss값이 값이 줄어들어야 해요! 이 줄어드는 loss값이 tol값보다 작으면 학습중단 !


model = SGDClassifier(loss='log',
                      max_iter=5000,
#                       tol=1e-5,
                      random_state=2)    

cancer = load_breast_cancer()

x_data = cancer.data
t_data = cancer.target


train_x_data, valid_x_data, train_t_data, valid_t_data = \
train_test_split(x_data,
                 t_data,
                 stratify=t_data,
                 test_size=0.2,
                 random_state=2)

model.fit(train_x_data, train_t_data)   # 학습을 시켜요!

# accuracy를 측정해 보아요!
# 모델을 평가를 할 때 사용할 데이터로 train data를 이용해보아요!
train_acc = model.score(train_x_data, train_t_data)
print('train데이터 평가한 경우 : {}'.format(train_acc))

# model.score : 모델 평가

# 모델을 평가를 할 때 사용할 데이터로 validation data를 이용해보아요!
valid_acc = model.score(valid_x_data, valid_t_data)
print('valid데이터 평가한 경우 : {}'.format(valid_acc))

 

# train데이터 평가한 경우 : 0.9186813186813186 valid데이터 평가한 경우 : 0.9122807017543859

# train 데이터가 91인 이유는 위에 tol 과 max_iter를 설정해놓았고 이상치 때문

 


# 위와 동일한 내용을 가지고 이번에는 정규화를 진행해서 학습하고 평가를 해 볼꺼예요!

%reset

import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import SGDClassifier
from sklearn.preprocessing import StandardScaler

model = SGDClassifier(loss='log',
                      max_iter=5000,
                      tol=1e-5,
                      random_state=2)    

cancer = load_breast_cancer()

x_data = cancer.data
t_data = cancer.target


train_x_data, valid_x_data, train_t_data, valid_t_data = \
train_test_split(x_data,
                 t_data,
                 stratify=t_data,
                 test_size=0.2,
                 random_state=2)

scaler = StandardScaler()
scaler.fit(train_x_data)

#y는 0 , 1 밖에 없어서 x data만


model.fit(scaler.transform(train_x_data), train_t_data)

#model에 입힐때 x data의 scaler를 변형

# 모델을 평가를 할 때 사용할 데이터로 validation data를 이용해보아요!
valid_acc = model.score(scaler.transform(valid_x_data), valid_t_data)
print('valid데이터 평가한 경우 : {}'.format(valid_acc))

 

valid데이터 평가한 경우 : 0.9649122807017544

 

 

'ai > Machine Learning' 카테고리의 다른 글

Multinomial classification(다중분류)  (0) 2021.09.09
Regulerization(규제)  (0) 2021.09.08
titanic code  (0) 2021.09.07
결측치처리  (0) 2021.09.06
Cancer 코드 Tensorflow ver  (0) 2021.09.06