내용

글번호 995
작성자 허진경
작성일 2019-12-12 19:50:46
제목 딥러닝을 이용한 와인데이터 분류
내용
import tensorflow
tensorflow.__version__
# import tensorflow as tf

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
import numpy as np
import pandas as pd

redwine = pd.read_csv("winequality-red.csv", sep=";")
 
redwine_X = redwine.iloc[:, :-1]
redwine_y = redwine.iloc[:, -1]
 
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
enc.fit(redwine_y.to_numpy().reshape(-1,1))
 
y_onehot = enc.transform(redwine_y.to_numpy().reshape(-1,1))
 
from sklearn.model_selection import train_test_split
train_X, test_X, train_y, test_y = train_test_split(redwine_X, 
                                                    y_onehot, 
                                                    test_size=0.3)

x = tf.placeholder(tf.float32, [None, 11])
y = tf.placeholder(tf.float32, [None, 6])
 
# 은닉층 정의
W_h1 = tf.Variable(tf.truncated_normal([11, 20]))
# 바이어스 사용 안함
y_h1 = tf.nn.sigmoid(tf.matmul(x, W_h1))
 
# 출력층 정의
W_o = tf.Variable(tf.truncated_normal([20, 6]))
# 바이어스 정의 안함
y_o = tf.nn.softmax(tf.matmul(y_h1, W_o))
 
cross_entropy = -tf.reduce_sum(y * tf.log(y_o), 
                               reduction_indices=[1])
 
loss = tf.reduce_mean(cross_entropy)
 
train_step = tf.train.AdamOptimizer(0.0001).minimize(loss)

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

for i in range(100001):
    _, loss_value = sess.run([train_step, loss], 
                             feed_dict={x: train_X, 
                                        y: train_y.toarray()})
    if i % 10000 == 0:
        print('Step %d, %.5f' % (i, loss_value))

pred = sess.run(y_o, feed_dict={x:test_X})
pd.crosstab(np.argmax(test_y.toarray(), axis=1)+3, 
            np.argmax(pred, axis=1)+3)

from sklearn.metrics import accuracy_score
accuracy_score(np.argmax(test_y.toarray(), axis=1),
               np.argmax(pred, axis=1))
첨부파일 텐서플로우를 이용한 와인데이터 분류.zip (22,712byte)