概要
TnsorFlowでレコメンデーションやってみた。
参考にしたページ
環境
windows 7 sp1 64bit
anaconda3
tensorflow 1.2
サンプルコード
import tensorflow as tf
# 山田 田中 佐藤 中村 川村 鈴木 下林
X = [[2.5, 3.0, 2.5, -1, 3.0, 3.0, -1], #'カレー'
[ 3.5, 3.5, 3.0, 3.5, 4.0, 4.0, 4.5], #'ラーメン'
[ 3.0, 1.5, -1, 3.0, 2.0, -1, -1], #'チャーハン'
[ 3.5, 5.0, 3.5, 4.0, 3.0, 5.0, 4.0], #'寿司'
[ 2.5, 3.5, -1, 2.5, 2.0, 3.5, 1.0], #'牛丼'
[ 3.0, 3.0, 4.0, 4.5, 3.0, 3.0, -1]] #'うどん'
Z = [[ 1, 1, 1, 0, 1, 1, 0], #'カレー'
[ 1, 1, 1, 1, 1, 1, 1], #'ラーメン'
[ 1, 1, 0, 1, 1, 0, 0], #'チャーハン'
[ 1, 1, 1, 1, 1, 1, 1], #'寿司'
[ 1, 1, 0, 1, 1, 1, 1], #'牛丼'
[ 1, 1, 1, 1, 1, 1, 0]] #'うどん'
x = tf.placeholder(tf.float32, [6, 7])
y = tf.placeholder(tf.float32, [6, 7])
w1 = tf.Variable(tf.random_normal([6, 2], mean = 0.0, stddev = 0.05))
w2 = tf.Variable(tf.random_normal([7, 2], mean = 0.0, stddev = 0.05))
result = tf.matmul(w1, tf.transpose(w2))
loss = tf.square(tf.multiply(tf.matmul(w1, tf.transpose(w2)) - x, y)) + (tf.nn.l2_loss(w1) + tf.nn.l2_loss(w2)) * 0.01
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
for i in range(10000):
sess.run(train_step, feed_dict = {
x: X,
y: Z
})
if i % 100 == 0:
print (sess.run(loss, feed_dict = {
x: X,
y: Z
}))
expected_evals = sess.run(result, feed_dict = {
x: X,
y: Z
})
for eval in expected_evals:
print("%s" % eval)
結果
# 山田 田中 佐藤 中村 川村 鈴木 下林
[ 2.63470387 2.95388412 2.56464982 3.02486849 2.52338362 3.07825279 3.26381159]#'カレー'
[ 3.37572169 3.67882395 3.33641553 3.90223742 3.23290825 3.849828 4.3096714 ]#'ラーメン'
[ 2.37158823 1.69161224 2.76956868 2.96601868 2.2697053 1.91008389 4.10669899]#'チャーハン'
[ 3.65982723 4.70319939 3.27653408 4.05092335 3.5062356 4.80988169 3.80868769]#'寿司'
[ 2.15531445 3.53876495 1.56305885 2.19226551 2.06619763 3.51690435 1.31375158]#'牛丼'
[ 3.35266995 2.84457064 3.69929171 4.07905245 3.20942688 3.10351372 5.25796843]#'うどん'
下林さんへのおすすめは うどん ラーメン チャーハン