下面代码为: .ipynb文件, 可以在Jupyter上运行
题目为:
给了40组数据(x,y)坐标
要求找出一条线进行分类(二分法)
from __future__ import print_function, division
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
train= pd.read_csv('/Users/liyixin/Desktop/AI/first-dichotomy/diamond.csv') #import csv檔案
train_X = train['carats'] #x軸
train_Y = train['price'] #y軸
learning_rate = 0.01 #學習速率
n_samples = train_X.shape[0]
training_epochs = 1000 #訓練次數
display_step = 50 #每50次,印出結果
X = tf.placeholder(tf.float32) #Tensorflow中的佔位符,暫時儲存變量,用來傳入資料
Y = tf.placeholder(tf.float32) #Tensorflow中的佔位符,暫時儲存變量,用來傳入資料
W = tf.Variable(tf.random_normal([1]), name="weight", dtype=tf.float32) # W 指的是係數,斜率介於 -1 至 1 之間
b = tf.Variable(tf.zeros([1]), name="bias", dtype=tf.float32) # b 指的是截距,從 0 開始逼近任意數字
pred = W*X+b # pred是預測值
cost =tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples) #平均方差
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #梯度下降演算法,找最小值
init =tf.global_variables_initializer() #初始化所有變數
with tf.Session() as sess:
sess.run(init)
for epoch in range(training_epochs):
for (x, y) in zip(train_X, train_Y):
sess.run(optimizer, feed_dict={X: x, Y: y})
if (epoch+1) % display_step == 0:
c = sess.run(cost, feed_dict={X: train_X, Y:train_Y})
print("Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(c), \
"W=", sess.run(W), "b=", sess.run(b))
print("Optimization Finished!")
training_cost = sess.run(cost, feed_dict={X: train_X, Y: train_Y})
print("Training cost=", training_cost, "W=", sess.run(W), "b=", sess.run(b), '\n')
plt.plot(train_X, train_Y, 'ro', label="Original data")
plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label="Fitted line")
plt.legend()
plt.show()