2021. 9. 8. 21:18ㆍai/Machine Learning
지금까지 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 |