2021. 9. 4. 04:42ㆍai/Machine Learning
# 위스콘신 유방암 데이터셋을 이용한 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 |