import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
x1=tf.constant(tf.random.normal([100,2],[10,6],1),dtype=tf.dtypes.float32)
x2=tf.constant(tf.random.normal([100,2],[3,2],1),dtype=tf.dtypes.float32)
y1=tf.constant(tf.ones([100,1]),dtype=tf.dtypes.float32)
y2=tf.constant(tf.ones([100,1])*-1,dtype=tf.dtypes.float32)
a1=tf.constant(tf.ones([100,1])*1000,dtype=tf.dtypes.float32)
a2=tf.constant(tf.ones([100,1])*1000,dtype=tf.dtypes.float32)
x=tf.constant(np.concatenate((x1,x2))) #200*2
y=tf.constant(np.concatenate((y1,y2)))#200*2
a=tf.constant(np.concatenate((a1,a2)))#200*2
plt.scatter(x1[:,0],x1[:,1])
plt.scatter(x2[:,0],x2[:,1])
for i in range(10):
with tf.GradientTape() as tape:
tape.watch(a)#不盯住就不知道对哪个求导
y1=tf.reduce_sum(tf.matmul(a*y,tf.transpose(a*y))*tf.matmul(x,tf.transpose(x)))-tf.reduce_sum(a)
# y1=(1/2.0)*tf.reduce_sum(tf.matmul(a,tf.transpose(a))*tf.matmul(y,tf.transpose(y))*tf.matmul(x,tf.transpose(x)))-tf.reduce_sum(
g_a=tape.gradient(y1,a)
a=a-g_a*0.001
w=tf.transpose(tf.Variable([tf.reduce_sum(a*y*x,axis=0)]))
sum=0
for i in range(200):
sum+=(y[i]-tf.reduce_sum(a*y*(x*tf.transpose(x[i]))))
b=sum/200
f=tf.matmul(x,w)+b
# print(tf.sign(f))
xs=tf.linspace(0.0,10.0,10)
ys=-(w[0][0]*xs+b)/w[1][0]
ys=-(b+w[0][0]*xs)/w[1][0]
# print(xs)
# plt.ylim([-3,8])
plt.plot(xs,ys)
plt.show()
支持向量机
最新推荐文章于 2024-06-17 00:00:00 发布