TensorFlow: Simple Linear Regression

Simple linear regression menggunakan tensorflow estimator. Pada catatan ini menggunakan data yang digenerate menggunakan numpy linspace. Pada catatan berikutnya akan kita gunakan data real.


import tensorflow as tf
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#x_data linear dari 0.0 sampai 10.0 sebanyak 250000 entry data
x_data = np.linspace(0.0, 10.0, 250000)

#noise untuk membuat data lebih real dan tidak terlalu mudah diprediksi
noise = np.random.randn(len(x_data))
y_true = (0.5 * x_data) + 5 + noise


x_df = pd.DataFrame(data=x_data, columns=['X Data'])
y_df = pd.DataFrame(data=y_true, columns=['Y'])
my_data = pd.concat([x_df, y_df], axis=1)

#sampling data, karena 250000 entry terlalu besar
my_data.sample(n=250).plot(kind='scatter', x='X Data', y='Y')


#batches cara feed data basar pada neural network
batch_size = 8

#menggunakan angka random y = mx + b
m = tf.Variable(0.81)
b = tf.Variable(0.17)


#untuk menyimpan training x_data dan training label y_true 
xph = tf.placeholder(tf.float32, [batch_size])
yph = tf.placeholder(tf.float32, [batch_size])

#model yang akan dibuat oleh tensorflow
y_model = m*xph + b

#reduce error yang akan digunakan untuk membentuk model
error = tf.reduce_sum(tf.square(yph-y_model))

optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001)
train = optimizer.minimize(error)

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    
    batches = 800
    
    for i in range(batches):
        #random index dari 0-besar x_data, diambil sebanyak batch_size
        rand_index = np.random.randint(len(x_data), size=batch_size)

        #gunakan random index untuk menentukan data feed
        feed = {xph:x_data[rand_index], yph:y_true[rand_index]}

        sess.run(train, feed_dict=feed)
    
    model_m, model_b = sess.run([m,b])

y_hat = x_data*model_m + model_b

my_data.sample(n=250).plot(kind='scatter', x='X Data', y='Y')
plt.plot(x_data, y_hat, 'red')



TensorFlow Estimator

Simple linear regression menggunakan objek estimator. Langkah yang perlu dilakukan adalah

  • Tentukan feature column
  • Buat tensorflow estimator object
  • Buat input function
  • Lakukan training dan evaluation (testing)
  • Setelah itu kita bisa lakukan prediksi


#import train_test_split dari sklearn untuk fungsi memisahkan data training dan testing
from sklearn.model_selection import train_test_split

#menentukan feature column
feat_cols = [tf.feature_column.numeric_column('x', shape=[1])]

#buat estimator object
estimator = tf.estimator.LinearRegressor(feature_columns=feat_cols)

#split data train dan test (eval)
x_train, x_eval, y_train, y_eval = train_test_split(x_data, y_true, test_size=0.3, random_state=101)

#buat function input untuk training dan eval
input_func = tf.estimator.inputs.numpy_input_fn({'x':x_train}, y_train, batch_size=8, num_epochs=None, shuffle=True)
eval_func = tf.estimator.inputs.numpy_input_fn({'x':x_eval}, y_eval, batch_size=8, num_epochs=1000, shuffle=False) 

#lakukan training
estimator.train(input_fn=input_func, steps=1000)

#membuat data baru (linear data) untuk kebutuhan prediksi
new_data = np.linspace(0,10,10)

#membuat fungsi prediksi
input_fn_predict = tf.estimator.inputs.numpy_input_fn({'x':new_data},shuffle=False)

#prediksi dilakukan
predictions = []
for pred in estimator.predict(input_fn=input_fn_predict):
    predictions.append(pred['predictions'])

#ploting prediksi (bintang warna merah)
my_data.sample(n=250).plot(kind='scatter', x='X Data', y='Y')
plt.plot(new_data, predictions, 'r*')




TensorFlow: Simple Linear Regression TensorFlow: Simple Linear Regression Reviewed by noname needed on May 21, 2018 Rating: 5

No comments:

Powered by Blogger.