关于python使用One Class&nbs…

系本人原创,转载请著名出处:http://blog.sina.com.cn/s/blog_76bf40cd0102v4a7.html
由于工作需要,前段时间使用一下One Class SVM。SVM算法一般是用来进行分类的,从 One Class SVM的名字看出, One Class SVM并不是用来进行分类的,而是用来检测新的数据是否属于原始数据一类。由于本人不是一心一意搞机器学习的,所以对于One Class SVM的原理和具体数学推导不了结,所以在这里只能介绍 One Class SVM使用的问题。 我自己所使用的库是来自台湾大学林智仁( Lin Chih-Jen)所设计和实现的库 LibSVM(地址:http://www.csie.ntu.edu.tw/~cjlin/libsvm/),里面包含很多种语言的版本,我使用的是 python版本。
在python的README文档中,主要用到了几个函数:svm_read_problem、svm_train、svm_predict、svm_load_model、svm_save_model,这几个函数主要是用来从文件中读数据训练和存储模型。 1、svm_read_problem是使用如下所示:y, x = svm_read_problem('data.txt')   data.txt是原始数据训练集(参见注),返回的y和x是一个列表,里面存储一些数据用来进行下一步。当然这里 也可以不使用这种从文件读的方式,具体使用见README文档。 2、svm_train函数的使用如下所示:m = svm_train(y, x, '-s 2 -n 0.01')   y和x分别是上一部得到的结果, -s 2 -n 0.01 其中的s标识SVM的类型,2就是表示One Class SVM,-n在2类SVM中标识两个类的比例(?),但是在One Class SVM表示异常数据所占的比例,我们在这里设置其为0.01,m就是就是得到的训练模型。 3、svm_predict函数的使用所如下所示:p_label, p_acc, p_val = svm_predict(y, x, m)   这里的y和x是从测试数据集中使用的svm_read_problem函数得到的y和x,m就是刚刚训练得到的模型。返回值为三个数p_label、p_acc、p_val, p_label是一个元组标识对应测试集中每一行数据的结果,1表示属于该集,-1标识不属于该集;p_acc表示训练精度,对于One Class SVM精度计算好像存在问题(当使用1作为标签,得到的精度是正确的,当使用-1作为标签就相反了。不知道这算不算一个bug。。);p_val我们就不管它了。 4、svm_save_model函数就将svm_train得到的模型m存到外部的一个文件里面,其使用如下:svm_save_model('heart_scale.model', m),'heart_scale.model'就是文件名。 5、svm_load_model函数的作用与svm_save_model相反,就是从外部文件中读取模型,其使用如下所示:m = svm_load_model('heart_scale.model')。

关于One Class SVM国内还没有讲的比较好的博客,望大牛们多多为广大爱好者多作贡献。

注:对于两类SVM问题,其标签一般有两种,一般使用+1和-1,见:http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/a2a     对于One Class SVM标签一般只有一个,建议使用+1,格式中别的数据是怎么得到的就要看怎么进行归一化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值