使用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 相关文章推荐
解决Linux系统中python matplotlib画图的中文显示问题
Jun 15 Python
python3 读取Excel表格中的数据
Oct 16 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
详解【python】str与json类型转换
Apr 29 Python
Python实现堡垒机模式下远程命令执行操作示例
May 09 Python
Python使用matplotlib实现交换式图形显示功能示例
Sep 06 Python
flask 实现token机制的示例代码
Nov 07 Python
Django rest framework分页接口实现原理解析
Aug 21 Python
如何用python 操作zookeeper
Dec 28 Python
关于Python中进度条的六个实用技巧分享
Apr 05 Python
python游戏开发Pygame框架
Apr 22 Python
Python 视频画质增强
Apr 28 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插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
图解找出PHP配置文件php.ini的路径的方法
2014/08/20 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
2015/01/28 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
vue.js语法及常用指令
2017/10/29 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
python difflib模块示例讲解
2017/09/13 Python
numpy.delete删除一列或多列的方法
2018/04/03 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
任命书格式
2014/06/05 职场文书
行政部经理助理岗位职责
2014/06/15 职场文书
雾霾停课通知
2015/04/24 职场文书
2015年检察院个人工作总结
2015/05/20 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
MySQL创建管理子分区
2022/04/13 MySQL
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技