使用tensorflow实现线性svm


Posted in Python onSeptember 07, 2018

本文实例为大家分享了tensorflow实现线性svm的具体代码,供大家参考,具体内容如下

简单方法:

import tensorflow as tf
import numpy as np

from matplotlib import pyplot as plt
def placeholder_input():

  x=tf.placeholder('float',shape=[None,2],name='x_batch')
  y=tf.placeholder('float',shape=[None,1],name='y_batch')
  return x,y
def get_base(_nx, _ny):
  _xf = np.linspace(x_min, x_max, _nx)
  _yf = np.linspace(y_min, y_max, _ny)
  xf1, yf1 = np.meshgrid(_xf, _yf)
  n_xf,n_yf=np.hstack((xf1)),np.hstack((yf1))
  return _xf, _yf,np.c_[n_xf.ravel(), n_yf.ravel()]
x_data=np.load('x.npy')
y1=np.load('y.npy')

y_data=np.reshape(y1,[200,1])
step=10000
tol=1e-3

x,y=placeholder_input()
w = tf.Variable(np.ones([2,1]), dtype=tf.float32, name="w_v")
b = tf.Variable(0., dtype=tf.float32, name="b_v")

y_pred =tf.matmul(x,w)+b 
y_predict =tf.sign( tf.matmul(x,w)+b )
# cost = ∑_(i=1)^N max⁡(1-y_i⋅(w⋅x_i+b),0)+1/2 + 0.5 * ‖w‖^2
cost = tf.nn.l2_loss(w)+tf.reduce_sum(tf.maximum(1-y*y_pred,0))

train_step = tf.train.AdamOptimizer(0.01).minimize(cost)

with tf.Session() as sess:

  sess.run(tf.global_variables_initializer())
  for i in range(step):

    sess.run(train_step,feed_dict={x:x_data,y:y_data})
    y_p,y_p1,loss,w_value,b_value=sess.run([y_predict,y_pred,cost,w,b],feed_dict={x:x_data,y:y_data})



x_min, y_min = np.minimum.reduce(x_data,axis=0) -2
x_max, y_max = np.maximum.reduce(x_data,axis=0) +2

xf, yf , matrix_= get_base(200, 200)

#xy_xf, xy_yf = np.meshgrid(xf, yf, sparse=True)

z=np.sign(np.matmul(matrix_,w_value)+b_value).reshape((200,200))

plt.pcolormesh(xf, yf, z, cmap=plt.cm.Paired)

for i in range(200):

  if y_p[i,0]==1.0:
    plt.scatter(x_data[i,0],x_data[i,1],color='r')
  else:
    plt.scatter(x_data[i,0],x_data[i,1],color='g')

plt.axis([x_min,x_max,y_min ,y_max])
#plt.contour(xf, yf, z)
plt.show()

       进阶:

import tensorflow as tf
import numpy as np
from matplotlib import pyplot as plt


class SVM():
  def __init__(self):
    self.x=tf.placeholder('float',shape=[None,2],name='x_batch')
    self.y=tf.placeholder('float',shape=[None,1],name='y_batch')
    self.sess=tf.Session()
  @staticmethod
  def get_base(self,_nx, _ny):
    _xf = np.linspace(self.x_min, self.x_max, _nx)
    _yf = np.linspace(self.y_min, self.y_max, _ny)
    n_xf, n_yf = np.meshgrid(_xf, _yf)
    return _xf, _yf,np.c_[n_xf.ravel(), n_yf.ravel()]
  def readdata(self):

    x_data=np.load('x.npy')
    y1=np.load('y.npy')
    y_data=np.reshape(y1,[200,1])
    return x_data ,y_data

  def train(self,step,x_data,y_data):

    w = tf.Variable(np.ones([2,1]), dtype=tf.float32, name="w_v")
    b = tf.Variable(0., dtype=tf.float32, name="b_v")


    self.y_pred =tf.matmul(self.x,w)+b 

    cost = tf.nn.l2_loss(w)+tf.reduce_sum(tf.maximum(1-self.y*self.y_pred,0))
    train_step = tf.train.AdamOptimizer(0.01).minimize(cost)

    self.y_predict =tf.sign( tf.matmul(self.x,w)+b )
    self.sess.run(tf.global_variables_initializer())
    for i in range(step):      
      self.sess.run(train_step,feed_dict={self.x:x_data,self.y:y_data})
      self.y_predict_value,self.w_value,self.b_value,cost_value=self.sess.run([self.y_predict,w,b,cost],feed_dict={self.x:x_data,self.y:y_data})
      print('**********cost=%f***********'%cost_value)
  def predict(self,y_data):    


    correct = tf.equal(self.y_predict_value, y_data)

    precision=tf.reduce_mean(tf.cast(correct, tf.float32)) 

    precision_value=self.sess.run(precision)
    return precision_value

  def drawresult(self,x_data):


    self.x_min, self.y_min = np.minimum.reduce(x_data,axis=0) -2
    self.x_max, self.y_max = np.maximum.reduce(x_data,axis=0) +2

    xf, yf , matrix_= self.get_base(self,200, 200)

    w_value=self.w_value
    b_value=self.b_value
    print(w_value,b_value)
    z=np.sign(np.matmul(matrix_,self.w_value)+self.b_value).reshape((200,200))

    plt.pcolormesh(xf, yf, z, cmap=plt.cm.Paired)

    for i in range(200):

      if self.y_predict_value[i,0]==1.0:
        plt.scatter(x_data[i,0],x_data[i,1],color='r')
      else:
        plt.scatter(x_data[i,0],x_data[i,1],color='g')

    plt.axis([self.x_min,self.x_max,self.y_min ,self.y_max])
    #plt.contour(xf, yf, z)
    plt.show()     

svm=SVM()
x_data,y_data=svm.readdata()
svm.train(5000,x_data,y_data)
precision_value=svm.predict(y_data)
svm.drawresult(x_data)

没有数据的可以用这个

import tensorflow as tf
import numpy as np
from matplotlib import pyplot as plt


class SVM():
  def __init__(self):
    self.x=tf.placeholder('float',shape=[None,2],name='x_batch')
    self.y=tf.placeholder('float',shape=[None,1],name='y_batch')
    self.sess=tf.Session()

  def creat_dataset(self,size, n_dim=2, center=0, dis=2, scale=1, one_hot=False):
    center1 = (np.random.random(n_dim) + center - 0.5) * scale + dis
    center2 = (np.random.random(n_dim) + center - 0.5) * scale - dis
    cluster1 = (np.random.randn(size, n_dim) + center1) * scale
    cluster2 = (np.random.randn(size, n_dim) + center2) * scale
    x_data = np.vstack((cluster1, cluster2)).astype(np.float32)
    y_data = np.array([1] * size + [-1] * size)
    indices = np.random.permutation(size * 2)
    x_data, y_data = x_data[indices], y_data[indices]
    y_data=np.reshape(y_data,(y_data.shape[0],1))
    if not one_hot:
      return x_data, y_data
    y_data = np.array([[0, 1] if label == 1 else [1, 0] for label in y_data], dtype=np.int8)
    return x_data, y_data

  @staticmethod
  def get_base(self,_nx, _ny):
    _xf = np.linspace(self.x_min, self.x_max, _nx)
    _yf = np.linspace(self.y_min, self.y_max, _ny)
    n_xf, n_yf = np.meshgrid(_xf, _yf)
    return _xf, _yf,np.c_[n_xf.ravel(), n_yf.ravel()]
#  def readdata(self):
#    
#    x_data=np.load('x.npy')
#    y1=np.load('y.npy')
#    y_data=np.reshape(y1,[200,1])
#    return x_data ,y_data

  def train(self,step,x_data,y_data):

    w = tf.Variable(np.ones([2,1]), dtype=tf.float32, name="w_v")
    b = tf.Variable(0., dtype=tf.float32, name="b_v")


    self.y_pred =tf.matmul(self.x,w)+b 

    cost = tf.nn.l2_loss(w)+tf.reduce_sum(tf.maximum(1-self.y*self.y_pred,0))
    train_step = tf.train.AdamOptimizer(0.01).minimize(cost)

    self.y_predict =tf.sign( tf.matmul(self.x,w)+b )
    self.sess.run(tf.global_variables_initializer())
    for i in range(step):
      index=np.random.permutation(y_data.shape[0])
      x_data1, y_data1 = x_data[index], y_data[index]
      self.sess.run(train_step,feed_dict={self.x:x_data1[0:50],self.y:y_data1[0:50]})
      self.y_predict_value,self.w_value,self.b_value,cost_value=self.sess.run([self.y_predict,w,b,cost],feed_dict={self.x:x_data,self.y:y_data})
      if i%1000==0:print('**********cost=%f***********'%cost_value)
  def predict(self,y_data):    

    correct = tf.equal(self.y_predict_value, y_data)

    precision=tf.reduce_mean(tf.cast(correct, tf.float32)) 

    precision_value=self.sess.run(precision)
    return precision_value, self.y_predict_value

  def drawresult(self,x_data):

    self.x_min, self.y_min = np.minimum.reduce(x_data,axis=0) -2
    self.x_max, self.y_max = np.maximum.reduce(x_data,axis=0) +2

    xf, yf , matrix_= self.get_base(self,200, 200)


    print(self.w_value,self.b_value)
    z=np.sign(np.matmul(matrix_,self.w_value)+self.b_value).reshape((200,200))
    plt.pcolormesh(xf, yf, z, cmap=plt.cm.Paired)

    for i in range(x_data.shape[0]):

      if self.y_predict_value[i,0]==1.0:
        plt.scatter(x_data[i,0],x_data[i,1],color='r')
      else:
        plt.scatter(x_data[i,0],x_data[i,1],color='g')

    plt.axis([self.x_min,self.x_max,self.y_min ,self.y_max])
#    plt.contour(xf, yf, z)
    plt.show()     

svm=SVM()
x_data,y_data=svm.creat_dataset(size=200, n_dim=2, center=0, dis=4, one_hot=False)


svm.train(5000,x_data,y_data)
precision_value,y_predict_value=svm.predict(y_data)
svm.drawresult(x_data)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中将字典转换成其json字符串
Jul 16 Python
Python代码的打包与发布详解
Jul 30 Python
wxPython事件驱动实例详解
Sep 28 Python
Python3实现从指定路径查找文件的方法
May 22 Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
python中requests库session对象的妙用详解
Oct 30 Python
简单实现python聊天程序
Apr 01 Python
wxPython实现画图板
Aug 27 Python
python实现低通滤波器代码
Feb 26 Python
DataFrame.groupby()所见的各种用法详解
Jun 14 Python
详解查看Python解释器路径的两种方式
Oct 15 Python
一篇文章弄懂Python中的内建函数
Aug 07 Python
Python多进程池 multiprocessing Pool用法示例
Sep 07 #Python
详解python while 函数及while和for的区别
Sep 07 #Python
使用TensorFlow实现SVM
Sep 06 #Python
使用Python制作自动推送微信消息提醒的备忘录功能
Sep 06 #Python
python实现机器学习之多元线性回归
Sep 06 #Python
python实现机器学习之元线性回归
Sep 06 #Python
Python import与from import使用及区别介绍
Sep 06 #Python
You might like
php数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
jQuery 获取URL参数的插件
2010/03/04 Javascript
javascript五图轮播切换实用版
2012/08/17 Javascript
JS中showModalDialog 的使用解析
2013/04/17 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
JavaScript的setAttribute兼容性问题解决方法
2013/11/11 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
2014/06/20 Javascript
Nodejs实现批量下载妹纸图
2015/05/28 NodeJs
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
2018/02/22 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
vue实现购物车案例
2020/05/30 Javascript
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
python随机取list中的元素方法
2018/04/08 Python
Python装饰器用法实例总结
2018/05/26 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
python构建指数平滑预测模型示例
2019/11/21 Python
python selenium操作cookie的实现
2020/03/18 Python
浅谈优化Django ORM中的性能问题
2020/07/09 Python
意大利奢侈品网站:Italist
2016/08/23 全球购物
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
六道php面试题附答案
2014/06/05 面试题
摄影实习自我鉴定
2013/09/20 职场文书
小型女装店的创业计划书
2014/01/09 职场文书
校企合作协议书
2014/04/16 职场文书
工作评语大全
2014/04/26 职场文书
教师工作自我鉴定范文
2014/09/14 职场文书
挂职锻炼个人总结
2015/03/05 职场文书
公司年夜饭通知
2015/04/25 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书