2021. 9. 6. 22:16ㆍai/Machine Learning
# 이번에는 위스콘신 유방암 데이터를 이용해서 Logistic Regression을 Tensorflow를
# 이용해서 구현해 보아요!
import numpy as np
from sklearn.datasets import load_breast_cancer # 데이터셋 로딩하기 위한 함수
from sklearn.model_selection import train_test_split # train, validation data를 분리하기 위해서 사용
import tensorflow as tf
# Raw data loading
cancer = load_breast_cancer()
x_data = cancer.data
t_data = cancer.target
# Training Data와 Validation Data를 준비!
train_x_data, valid_x_data, train_t_data, valid_t_data = \
train_test_split(x_data,
t_data,
test_size=0.2,
stratify=t_data,
random_state=2)
# Tensorflow 구현(v1.15)
# placeholder
X = tf.placeholder(shape=[None,30], dtype=tf.float32)
T = tf.placeholder(shape=[None,1], dtype=tf.float32)
#tf.placeholder 의 shape이 2차원이상이면 항상표시하며 ()이 아닌 [] 주의
# Weight & bias
W = tf.Variable(tf.random.normal([30,1]))
b = tf.Variable(tf.random.normal([1]))
# Hypothesis(Logistic Model)
logit = tf.matmul(X,W) + b
H = tf.sigmoid(logit)
# loss function
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=logit,
labels=T))
#reduce : 줄이다
# train
train = tf.train.GradientDescentOptimizer(learning_rate=1e-4).minimize(loss)
# session & 초기화
sess = tf.Session()
sess.run(tf.global_variables_initializer())
# 반복학습
for step in range(300000):
tmp, loss_val = sess.run([train, loss],
feed_dict={X:train_x_data,
T:train_t_data.reshape(-1,1)})
if step % 30000 == 0:
print('loss : {}'.format(loss_val))
# 학습이 종료되면
# 우리 모델이 잘 만들어진 모델인지 확인을해야해요! =>
# Metric (Accuracy - 정확도)
predict = tf.cast(H > 0.5, dtype=tf.float32) # 만약 H > 0.5의 결과가 True이면 1.0
# tf.cast() : casting = data형변환 ( ex)문자 → 숫자 )
correct = tf.equal(predict, T)
# tf.equal() : 맞는지 아닌지 확인하는 함수
acc = tf.reduce_mean(tf.cast(correct, tf.float32))
# correct가 숫자이기 때문에 다시 cast를 이용해 숫자로 변경 해서 평균낸다
acc_val = sess.run(acc, feed_dict={X:valid_x_data,
T:valid_t_data.reshape(-1,1)})
print('accuracy : {}'.format(acc_val))
accuracy : 0.9210526347160339
# 예를들면 predict => [0, 0, 1, 1, 1, 0, 1]
# T = [0, 0, 1, 0, 1, 0, 0]
# correct => [T, T, T, F, T, T, F] T : True, F : False
# correct_val = [1, 1, 1, 0, 1, 1, 0]
# correct_val의 평균 => 5 / 7 = 0.71 (71%)
'ai > Machine Learning' 카테고리의 다른 글
titanic code (0) | 2021.09.07 |
---|---|
결측치처리 (0) | 2021.09.06 |
2차 정리 (0) | 2021.09.05 |
1차 정리 (0) | 2021.09.05 |
Cancer 코드 sklearn ver(k-fold) (0) | 2021.09.04 |