機器學習(周志華)習題3.3
阿新 • • 發佈:2019-01-02
本人菜鳥一枚,由於需要完成作業,所以嘗試使用機器學習工具庫去解決該題(周志華《機器學習》3.3題),主要參考別人的程式碼進行了改寫,如有不足請多多指教!
以下附上本題程式碼
迭代9999次之後,計算得出w =[ 3.15144444 12.49511814],b= [-4.41981125]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()
圖如下:
參考連結:
由於本人初接觸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