首页 > 其他 > 详细

tensorflow实现支持向量机

时间:2019-03-24 10:37:20      阅读:185      评论:0      收藏:0      [点我收藏+]

支持向量机用于二分类问题。对要分类的数据,找到一个线形可分的直线或平面。

超平面的公式为Ax-b=0

对于损失函数,我们的公式为

1/n∑ni=1 max(0,1-yi(Axi-b))+a||A||2

由公式可知,分类正确时,损失函数只取决于a值

 

#引入相关的库

import numpy as np

import tensorflow as tf
from sklearn import datasets

#设置参数,支持新版的API

import os
os.environ[‘TF_CPP_MIN_LOG_LEVEL‘] = ‘2‘

 

#加载数据集

iris=datasets.load_iris()
x_vals=np.array([[x[0],x[3]] for x in iris.data])
y_vals=np.array([1 if y==0 else -1 for y in iris.target])

#分割数据集
train_indices=np.random.choice(len(x_vals),round(len(x_vals)*0.8),replace=False)
test_indices=np.array(list(set(range(len(x_vals)))-set(train_indices)))
x_vals_train=x_vals[train_indices]
x_vals_test=x_vals[test_indices]
y_vals_train=y_vals[train_indices]
y_vals_test=y_vals[test_indices]

#设置图
sess=tf.Session()

#设置图参数
batch_size=100
x_data=tf.placeholder(shape=[None,2],dtype=tf.float32)
y_target=tf.placeholder(shape=[None,1],dtype=tf.float32)

A=tf.Variable(tf.random_normal(shape=[2,1]))
b=tf.Variable(tf.random_normal(shape=[1,1]))

#设置模型
model_output=tf.subtract(tf.matmul(x_data,A),b)

#设置损失函数
l2_norm=tf.reduce_sum(tf.square(A))
alpha=tf.constant([0.1])
classification_term=tf.reduce_mean(tf.maximum(0.0,tf.subtract(1.0,tf.multiply(model_output,y_target))))
loss=tf.add(classification_term,tf.multiply(alpha,l2_norm))

#声明预测函数
prediction=tf.sign(model_output)

#声明准确度函数
accuracy=tf.reduce_mean(tf.cast(tf.equal(prediction,y_target),tf.float32))

#声明优化器函数
my_opt=tf.train.GradientDescentOptimizer(0.01)
train_step=my_opt.minimize(loss)

init=tf.global_variables_initializer()
sess.run(init)

loss_vec=[]
train_accuracy=[]
test_accuracy=[]
for i in range(500):
rand_index=np.random.choice(len(x_vals_train),size=batch_size)
rand_x=x_vals_train[rand_index]
rand_y=np.transpose([y_vals_train[rand_index]])
sess.run(train_step,feed_dict={x_data:rand_x,y_target:rand_y})

temp_loss=sess.run(loss,feed_dict={x_data:rand_x,y_target:rand_y})
loss_vec.append(temp_loss)

train_acc_temp=sess.run(accuracy,feed_dict={x_data:x_vals_train,y_target:np.transpose([y_vals_train])})
train_accuracy.append(train_acc_temp)

test_acc_temp=sess.run(accuracy,feed_dict={x_data:x_vals_test,y_target:np.transpose([y_vals_test])})
test_accuracy.append(test_acc_temp)

print(train_accuracy)
print(test_accuracy)

 

 

 

 

tensorflow实现支持向量机

原文:https://www.cnblogs.com/bladeyul/p/10545028.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!