使用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 pickle模块用法实例分析
May 27 Python
python数组过滤实现方法
Jul 27 Python
浅谈python数据类型及类型转换
Dec 18 Python
Python+OpenCV让电脑帮你玩微信跳一跳
Jan 04 Python
Django实现全文检索的方法(支持中文)
May 14 Python
详解Python下ftp上传文件linux服务器
Jun 21 Python
Python 使用folium绘制leaflet地图的实现方法
Jul 05 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
python如何通过twisted搭建socket服务
Feb 03 Python
python函数中将变量名转换成字符串实例
May 11 Python
python框架flask入门之路由及简单实现方法
Jun 07 Python
Python 统计序列中元素的出现频度
Apr 26 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 Undefined index的问题
2009/06/01 PHP
php实现微信企业转账功能
2018/10/02 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
JS网页图片按比例自适应缩放实现方法
2014/01/15 Javascript
谷歌地图打不开的解决办法
2014/08/07 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
Node.js连接postgreSQL并进行数据操作
2016/12/18 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
详解Vue监听数据变化原理
2017/03/08 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
2017/03/22 jQuery
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
layui表格数据复选框回显设置方法
2019/09/13 Javascript
python定时器使用示例分享
2014/02/16 Python
Python中的类学习笔记
2014/09/23 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
Python阶乘求和的代码详解
2020/02/14 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
简单介绍HTML5中audio标签的使用
2015/09/24 HTML / CSS
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
技术副厂长岗位职责
2013/12/26 职场文书
市场营销职业生涯规划书范文
2014/01/12 职场文书
《桥》教学反思
2014/04/09 职场文书
赔偿协议书怎么写
2015/01/28 职场文书
2015年学校安全工作总结
2015/04/22 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
公司财务管理制度
2015/08/04 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL
基于Python实现nc批量转tif格式
2022/08/14 Python