In [50]:
import pandas as pd
import tensorflow as tf 
import numpy as np 
import matplotlib.pyplot as plt

In [51]:
from sklearn.preprocessing import normalize

In [52]:
df = pd.read_csv('datasets/dataset2.csv')


# Weights and bias for NN
weight = tf.Variable([1.0])
bias = tf.Variable([0.0])

In [53]:
hours = df['average_montly_hours'].astype(float).values.reshape(1,-1)

In [54]:
normalized_hours = normalize(df['average_montly_hours'].astype(float).values.reshape(1,-1), norm='l2', axis=1).reshape(-1,1)[:10]

In [55]:
left = df['left'].astype(np.float32).values

In [56]:
xs = tf.placeholder(tf.float32)
ys = tf.placeholder(tf.float32)
xlosses = []
losses = []

In [57]:
output = ( weight * xs ) 
diff =  output - ys
cost = tf.square(diff)

grad = tf.reduce_sum(((weight * xs) - ys ) * xs)
optimized_weight = weight - 0.0001 * grad
reduced_cost = tf.reduce_mean(cost)

In [58]:
# Start the session
sess = tf.Session()
sess.run(tf.global_variables_initializer())

In [20]:
for i in range(1000):
    if i%10 == 0:
#         print ''
#         print 'Step: ', i
#         print 'Gradient: ', sess.run([grad1, grad], {xs: normalized_hours, ys: left})
#         print 'Weight: ' , sess.run([weight])[0][0]
#         print 'Bias: ', sess.run([bias])[0][0]
#         print 'Loss: ', sess.run([reduced_cost], {xs: normalized_hours, ys: left})[0]
#         print 'Optimized Weight: ', sess.run([optimized_weight], {xs: normalized_hours, ys: left})[0]
        losses.append(sess.run([reduced_cost], {xs: normalized_hours, ys: left})[0])
    sess.run(tf.assign(weight, sess.run([optimized_weight], {xs: normalized_hours, ys: left})[0]))

In [21]:
plt.plot(np.arange(100.0), losses)


Out[21]:
[<matplotlib.lines.Line2D at 0x1154d6e90>]

In [22]:
plt.show()



In [62]:
sess.close()
sess = tf.Session()
sess.run(tf.global_variables_initializer())

In [60]:
for i in range(100):
    xlosses.append(sess.run([reduced_cost], {xs: hours, ys: left})[0])
    sess.run(tf.assign(weight, sess.run([optimized_weight], {xs: hours, ys: left})[0]))

In [61]:
plt.plot(np.arange(100.0), xlosses)
plt.show()