使用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通过pil将图片转换成黑白效果的方法
Mar 16 Python
Python进程通信之匿名管道实例讲解
Apr 11 Python
详细分析python3的reduce函数
Dec 05 Python
Python读取Json字典写入Excel表格的方法
Jan 03 Python
利用Python将数值型特征进行离散化操作的方法
Nov 06 Python
Django实现一对多表模型的跨表查询方法
Dec 18 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 Python
解决django 新增加用户信息出现错误的问题
Jul 28 Python
线程安全及Python中的GIL原理分析
Oct 29 Python
Python爬取腾讯视频评论的思路详解
Dec 19 Python
Python实现在线批量美颜功能过程解析
Jun 10 Python
python文件读取失败怎么处理
Jun 23 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 cookie 登录验证示例代码
2009/03/16 PHP
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
PHP Include文件实例讲解
2019/02/15 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
JavaScript几种形式的树结构菜单
2010/05/10 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
2015/08/21 NodeJs
Node.js 回调函数实例详解
2017/07/06 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
2017/10/24 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
vue实现点击按钮切换背景颜色的示例代码
2020/06/23 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
关于Python中异常(Exception)的汇总
2017/01/18 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
python实现京东秒杀功能
2018/07/30 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
详解python中init方法和随机数方法
2019/03/13 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
学生会主席事迹材料
2014/01/28 职场文书
《童年》教学反思
2014/02/18 职场文书
新学期开学演讲稿
2014/05/24 职场文书
高中生学习计划书
2014/09/15 职场文书
公民授权委托书范本
2014/09/17 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
学习雷锋精神倡议书
2015/04/27 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
千手观音观后感
2015/06/03 职场文书
经营场所证明范本
2015/06/19 职场文书