关于python使用One Class&nbs…

来源:互联网 发布:arcgis 地图数据制作 编辑:程序博客网 时间:2024/05/29 13:21
系本人原创,转载请著名出处:http://blog.sina.com.cn/s/blog_76bf40cd0102v4a7.html
由于工作需要,前段时间使用一下One Class SVM。SVM算法一般是用来进行分类的,从One Class SVM的名字看出,One Class SVM并不是用来进行分类的,而是用来检测新的数据是否属于原始数据一类。由于本人不是一心一意搞机器学习的,所以对于One ClassSVM的原理和具体数学推导不了结,所以在这里只能介绍One Class SVM使用的问题。我自己所使用的库是来自台湾大学林智仁(LinChih-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 -n0.01')  y和x分别是上一部得到的结果,-s 2-n 0.01 其中的s标识SVM的类型,2就是表示One Class SVM,-n在2类SVM中标识两个类的比例(?),但是在OneClass 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表示训练精度,对于OneClassSVM精度计算好像存在问题(当使用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 ClassSVM标签一般只有一个,建议使用+1,格式中别的数据是怎么得到的就要看怎么进行归一化。
原创粉丝点击