Cancer 코드 sklearn ver(k-fold)

2021. 9. 4. 04:42ai/Machine Learning

728x90

# 위스콘신 유방암 데이터셋을 이용한 Logistic Regression 구현

 

# SKlearn에서 학습용으로 사용할수 있는 유명한 data들이 있는데 그중 Cancer data를 불러올거다
# 유방암 데이터에는 유방암 세포의 특징들이 들어있어요!
# 세포의 평균크기, 평균오차, 최대이상치, 등등등 30 feature의 데이터가 있어요!

from sklearn.datasets import load_breast_cancer  #Cancer Data Set을 불러오기 위한 함수
import numpy as np
from sklearn.model_selection import train_test_split  # bias(편향)문제 없이 trainning data와 validation data를 분리
from sklearn import linear_model   # LogisticRegression Model 객체를 생성하기 위해서 필요!
from sklearn.model_selection import cross_val_score # K-Fold Cross Validation을 수행하기 위해서 필요


# load Data Set 

cancer = load_breast_cancer()
# print(cancer)     # dictionary 형태인데 진짜 dictionary는 아니예요!
print(cancer.data.shape)  # feature, 독립변수, x_data  shape : (569, 30)
# print(cancer.data)
print(cancer.target.shape)   # label, 종속변수, t_data  shape : (569,)

# 데이터의 편향을 알아보아요!
print(np.unique(cancer.target, return_counts=True))  # np.unique()를 활용해서 알아보았어요! 그냥저냥 괜찮아요!

# np.unique() : 배열의 정렬 된 고유 값을 반환합니다.

# return_counts=True 는 몇개 있는지 알려준다


# print(cancer.DESCR)        describe : 설명하다
# target, 종속변수, label, t_data
class는 label안의 들어있는 값을 종류

# 단어 Distribution : 분포
# data에 대한 정보는 domain 전문가에게 물어봐야 해요!(의사)
# 그러면 우리가 machine learning을 할때 모든 data에 대한 내용을 다 알고 모델을 구현해야 하나요?
# 다 알필요는 없어요! 하지만 알면 당연히 좋죠!!

 

# training data set
x_data = cancer.data
t_data = cancer.target

# t_data => 0 : 212 , 1 : 357  

 

#train 과 split을 나눈는데 각각 안에 future와 label이 있어야되기 때문에 아래와 같이 작업
train_x_data, validation_x_data, train_t_data, validation_t_data = \
train_test_split(x_data,t_data,
                 test_size=0.2,
                 random_state=1,
                 stratify=t_data)

# train_test_split() : training , test 분리하는 함수이며 import해야한다

# (test_size= validation data 비율/ 값을 안주면 25%, 75%로준다)

# (random_state= train_test_split()는 호출 시 무작위로 데이터를 분리하므로 random_state를 지정하지 않으면 수행할 때마다 다른 학습/테스트 용 데이터를 만들 수 있습니다. 동일한 데이터 세트로 분리하기 위해 random_state를 일정한 숫자 값으로 부여하면 됩니다. , 실무에선 필요x)

# (stratify= 어떤걸 기준으로 data 분포 비율, 현재예시로는 t_data안 0, 1갯수 비율)


# print(train_x_data.shape, validation_x_data.shape)
# print(np.unique(train_t_data, return_counts=True))

# data의 로딩, 전처리, 파악이 끝났으면 작업에 들어가자 !


 

sklearn

model = linear_model.LogisticRegression(max_iter=500000)

#(max_iter=n) : 반복횟수 조절  


# # K-fold cross validation
score = cross_val_score(model, 
                        train_x_data, 
                        train_t_data,
                        cv=5)

#cross_val_score (모델,x_data, t_data, cv= k값): K-fold cross validation하는 함수이며 import해야한다


print(score.mean())  # k-fold의 평균 0.9472527472527472

model.fit(train_x_data, train_t_data)   # model 학습

val_score = model.score(validation_x_data, validation_t_data)  

#model.score() : accuracy(정확도) 구해요!
print(val_score)       # 0.956140350877193

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

2차 정리  (0) 2021.09.05
1차 정리  (0) 2021.09.05
data 전처리 / 생각해야 할 문제들  (0) 2021.09.04
분류 성능 평가 지표(Metric)  (0) 2021.09.03
Logistic[논리] Regression 코드  (0) 2021.09.03