如下的Python代码是可视化SVM分类器开源实现的python代码。这是个小巧又简单,却不一定满足大家高效要求的具有可视化功能的SVM分类器源码。是采用标准python写成的,但如果需要作图功能,则需要安装matplotlib,否则注释相应代码即可。

在这里推荐安装enthought python来应用。

可视化SVM分类器开源实现的python代码如下:

import sys,math,plot

# -------get current tolerance level-------

def tolerance(v1,v2,norm):

sum = 0.0

for k in v1.keys()+v2.keys():

t1 = 0

t2 = 0

if k in v1:

t1 = v1[k]

if k in v2:

t2 = v2[k]

sum += (t1-t2) * (t1 - t2)

return math.sqrt(sum/norm)

#------fill dense alpha list with initial values

def init_alpha(num_examples):

alpha_s = []

for i in range(num_examples):

alpha_s.append((0.0,i))

return alpha_s

#------dot products for two dict format vectors

def dot(v1,v2):

sum = 0.0

if len(v1) < len(v2):

for id in v1.keys():

if id in v2:

sum += v1[id] * v2[id]

else:

for id in v2.keys():

if id in v1:

sum += v1[id] * v2[id]

return sum

#------------kernel evaluation for two vectors

def kernel(v1, v2):

return dot(v1,v2)

#www.iplaypy.com

# build lower triangular kernel matrix compute_Q

def compute_Q(es,height):

q = []

for i in range(height):

q.append([])

for j in range(height):

if i>=j:

q[i].append(kernel(es[i],es[j]))

return q

# retrieve kernel matrix element on i,j

def ret_Q(q,i,j):

if i>=j:

return q[i][j]

else:

return q[j][i]

def read_examples(stream):

es = []

cs = []

width = 0

height = 0

for line in stream:

e = {}

c = float(line[0:line.find(" ")])

for t in line[line.find(" ")+1:].split():

ts = t.split(":")

id = int(ts[0])

e[id] = float(ts[1])

if id > width:

width = id

es.append(e)

cs.append(c)

height += 1

return height, width, cs,es

def main(C=1.0, max_iter=100, tol = 0.001, show_plot=False):

alpha_sparse = {} # current sparse alpha list

alpha_s_prim = {} # previous sparse alpha list

print >> sys.stderr, "loading examples..."

height_e, width_e, cs,es = read_examples(sys.stdin)

print >> sys.stderr, "example matrix: " , height_e, ",", width_e

print >> sys.stderr, "kernelizing..."

q = compute_Q(es,height_e)

alpha_s = init_alpha(height_e)

bias = 0

# stochastic gradient descent

for i in range(max_iter):

print >> sys.stderr, "¥nnew iteration:", i+1

gamma = 1

# sort alpha list in reversed order

alpha_s.sort(None, None, True)

print >> sys.stderr, alpha_s[0:30]

print >> sys.stderr, 'sparsity: ', len(alpha_sparse),':',height

2000

_e

alpha_s_prim = alpha_sparse.copy()

z_max = float("-infinity"); z_min= float("infinity")

for id in range(len(alpha_s)):

# update from the largest alpha

alpha = alpha_s[id][0]

j = alpha_s[id][1]

t = 0.0

for k in alpha_sparse.keys():

t += cs[k]* alpha_sparse[k] * ret_Q(q,j,k)

# check z_max and z_min for bias computation

if cs[j]>0:

if t < z_min:

z_min = t

else:

if t > z_max:

z_max = t

learning_rate = gamma * (1/ret_Q(q,j,j))

delta = learning_rate * ( 1 - t * cs[j] )

# check for soft-margin

alpha += delta

if alpha < 0 :

alpha = 0.0

if alpha > C:

alpha = C

# do update foe dense alpha list

alpha_s[id] = alpha,j

# do update for sparse alpha list

if math.fabs(alpha - 0.0) >= 1e-10:

alpha_sparse[j]=alpha

else:

if j in alpha_sparse:

del alpha_sparse[j]

# get bias

bias = (z_max+z_min)/2.0

# chekc for tolerance

tol1 = tolerance(alpha_sparse, alpha_s_prim, float(height_e))

print >> sys.stderr, "tolerance:", tol1

if tol1 < tol:

print >> sys.stderr, "¥nfinished in",i+1,"iterations"

break

svm_res ={'sv_s':[],'id_s':[],'alpha_s':[]}

# support vectors

for id,alpha in alpha_sparse.items():

svm_res['sv_s'].append(es[id])

svm_res['id_s'].append(id)

svm_res['alpha_s'].append(cs[id]*alpha)

svm_res['bias'] = bias

# plot graph if needed

if show_plot:

plot.draw(cs, es, svm_res)

return svm_res

if __name__ == "__main__":

t= main()

print 'support vectors:', t['sv_s']

print 'example IDs:', t['id_s']

print 'lagrange multipliers:',t['alpha_s']

print 'bias:', t['bias']

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/code/graphics/gr2477.html

相关文章 Recommend

python支持向量机分类器怎么用_可视化SVM分类器开源实现的python代码相关推荐

  1. python打印特殊符号_python plt可视化——打印特殊符号和制作图例代码

    1.打印特殊符号 matplotlib在公式书写上面跟latex很相似,接下来我们就特殊符号,上标下标来具体展示一下.import matplotlib.pyplot as plt x = [i+1 ...

  2. python 数组合并排重_并排深度学习:Julia vs Python

    python 数组合并排重 Julia could possibly be the biggest threat to Python. For a variety of applications, J ...

  3. python最好用的助手_推荐5款好用的Python工具

    这篇文章的内容是给大家推荐了5款好用的Python工具,有需要的朋友可以看一看 摘要:推荐5个酷毙的Python工具 工欲善其事必先利其器,一个好的工具能让起到事半功倍的效果,Python社区提供了足 ...

  4. python入门教程傻瓜版_毫无基础的人如何入门 Python ?Python入门教程拿走不谢啦!...

    随着人工智能的发展,Python近两年也是大火,越来越多的人加入到Python学习大军,对于毫无基础的人该如何入门Python呢?这里整理了一些个人经验和Python入门教程供大家参考. 如果你是零基 ...

  5. python模块cv2人脸识别_手把手教你使用OpenCV,Python和深度学习进行人脸识别

    使用OpenCV,Python和深度学习进行人脸识别 在本教程中,你将学习如何使用OpenCV,Python和深度学习进行面部识别.首先,我们将简要讨论基于深度学习的面部识别,包括"深度度量 ...

  6. python难度大的题_早看少被坑!Python 最难的问题

    超过十年以上,没有比解释器全局锁(GIL)让Python新手和专家更有挫折感或者更有好奇心. 未解决的问题 随处都是问题.难度大.耗时多肯定是其中一个问题.仅仅是尝试解决这个问题就会让人惊讶.之前是整 ...

  7. python构造方法与java区别_一张图秒懂Java和Python的区别,你知道吗?

    对于程序员的语言千千万JAVA\C\C++\PHP\Python不同的程序员使用着不同的语言,做着功能相似需求却不同的产品. 但是最近Python在人工智能的推动下突然出现在人们的面前,其实和Java ...

  8. python手机端编程环境_移动端自动化测试解决方案(Appium + Python) - (1) 环境搭建...

    最近对iOS自动化测试做了一番探究,希望通过自动化测试更好的去提高公司项目的测试效率 .在网上找了很多的文章和相关资料,都因为时间比较久导致无法实现基本环境的搭建,我在这儿分享给大家分享我的实现过程. ...

  9. python有什么用处案例_为什么大家都推荐你学python?看完这5个例子就明白了!...

    为什么大家都推荐你学Python?而不是C语言或者是JAVA呢? 因为-- python很灵活,一定程度上函数也可以传参和注入,所以代码的灵活性要大的多. python自带了函数的curry化以及迟滞 ...

最新文章

  1. 数学知识--Methods for Non-Linear Least Squares Problems(第二章)
  2. 51单片机的配p10端口c语言,stc12c5a16s2的单片机的p5口做普通端口怎么定义?
  3. MongoDB 的高级查询 aggregate 聚合管道
  4. 为什么二级菜单会被挡住_父页面弹出菜单被子页面挡住问题
  5. windows环境的python的环境变量_win的环境变量配置(Python实例)
  6. webuploader插件使用分析
  7. java插件化设计开发
  8. mac版本 sadptool_海康 设备 发现(SADPTool原理)
  9. ppt模板免费下载的网站有哪些?这个宝藏网站必须make
  10. 2022最新软考考试时间已公布
  11. 【笔记】FFC 20624 Winter 09的mil与mm显示转换
  12. 关于NVIDIA显卡驱动更新后,没有NVIDIA 控制面板的解决办法
  13. 罗马数字序号与word2013中如何插入
  14. Swift游戏实战-跑酷熊猫 09 移除场景之外的平台
  15. 微软官网操作系统下载方法
  16. cmaq实践学习-飓风案例运行bcon icon mcip cctm脚本修改运行
  17. pyPDF2或pyPDF4做pdf页面提取出错
  18. 人工智能html5背景,HTML5人工智能基础及实践
  19. 用while循环写四叶玫瑰数(自幂数)
  20. 二十二、商城 - 商品录入-FastDFS(10)

热门文章

  1. android标题栏上增加按钮,Android:向自定义标题栏添加按钮
  2. 马士兵java教程笔记_马士兵java教程笔记4
  3. mysql线程挣用问题_MySQL 并发线程的理解
  4. 在JS中使用trim 方法
  5. Jawin –Java/Win32互动项目 可调用DLL及COM的调用项目
  6. 安卓学习笔记18:常用控件 - 按钮、图像视图和图像按钮
  7. python随机颜色代码_python绘制随机颜色太阳花
  8. Android人脸识别开发入门--基于虹软免费SDK实现
  9. html5怎么让div集中,html – 如何集中5个div而不使用margin-left?
  10. android bitmap to base64_Android基础(11)—你需要知道的内存知识