1. 程式人生 > >機器學習(周志華)習題3.3

機器學習(周志華)習題3.3

           本人菜鳥一枚,由於需要完成作業,所以嘗試使用機器學習工具庫去解決該題(周志華《機器學習》3.3題),主要參考別人的程式碼進行了改寫,如有不足請多多指教!

           以下附上本題程式碼

import tensorflow as tf
from numpy import *
import matplotlib.pyplot as plt

data = mat([[0.697,0.460,1],
        [0.774,0.376,1],
        [0.634,0.264,1],
        [0.608,0.318,1],
        [0.556,0.215,1],
        [0.403,0.237,1],
        [0.481,0.149,1],
        [0.437,0.211,1],
        [0.666,0.091,0],
        [0.243,0.267,0],
        [0.245,0.057,0],
        [0.343,0.099,0],
        [0.639,0.161,0],
        [0.657,0.198,0],
        [0.360,0.370,0],
        [0.593,0.042,0],
        [0.719,0.103,0]])
#資料型別轉換
x_train = data[:,0:2].astype(float32)
y_train = data[:,2].astype(float32)
#定義計算w,b的引數
y_train = mat(y_train)
w = tf.Variable(tf.zeros([2, 1]))
b= tf.Variable(tf.zeros([1, 1]))
y = 1 / (1 + tf.exp(-(tf.matmul(x_train, w) + b)))
loss = tf.reduce_mean(- y_train.reshape(-1, 1) * tf.log(y) - (1 - y_train.reshape(-1, 1)) * tf.log(1 - y))
train = tf.train.GradientDescentOptimizer(0.5).minimize(loss)
#執行並顯示w,b的執行結果
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
for step in range(10000):
    sess.run(train)
print(step, sess.run(w).flatten(), sess.run(b).flatten())
#畫圖
X0 = array(data[:8])
X1 = array(data[8:])
ax = plt.subplot(111)
ax.scatter(X0[:,0],X0[:,1],c='r',label='+')
ax.scatter(X1[:,0],X1[:,1],c='b',label='-')
x1 = arange(-0.2,1.0,0.1)
y1 = (-b-w[0]*x1)/w[1]
#print(shape(sess.run(y1).flatten()))
plt.sca(ax)
plt.plot(x1,sess.run(y1).flatten())
plt.xlabel('density')
plt.ylabel('ratio_sugar')
plt.legend()
plt.show()


迭代9999次之後,計算得出w =[  3.15144444  12.49511814],b= [-4.41981125]

圖如下:


 參考連結: 
 由於本人初接觸python與機器學習,參考了大量的資料,主要如下:

1、http://blog.csdn.net/wangyangzhizhou/article/details/70474391

2、http://blog.csdn.net/iohboel/article/details/59751182 

3、http://blog.csdn.net/qilixuening/article/details/60968952

4、《統計學習方法》(李航)P.78-79