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))
|