您的位置:首页 > 其它

One-class SVM

2017-03-29 15:56 218 查看
这几天看了一篇文章,当样本极其不平衡的时候,可以用一分类,就是说结果是为是它,或者不是它这两种,至于不是它到底是谁,我们不关心。关于二分类问题,我们得到的结果为要么是A,要么是B。我目前在做异常事件检测,对于异常事件来说就是样本量极少的事件,对于检测这类事件我就可以利用libsvm中的One-class SVM ,利用正常情况下的数据训练出超平面,在用所有数据进行测试,在超平面之内则认为是正常事件,否则认为是异常事件。

为了学习One-class SVM,先在网上参考了此篇博客做了一些小测验,代码都可以正常运行,主要是研究了训练和预测这两句代码的含义。

model = svmtrain(Y1,X1,'-s 2 -t 2 -n 0.01');
[Y1,Y2,Y3] = svmpredict(Y,X,model);第一行为调用了svmtrain这句函数,-s后面跟2指的是调用了one-class-SVM ,-t后面跟2表示核函数调用了默认的 RBF 核,一共4种核函数,也可以试别的,效果不一样,对于这个小实验,采用默认的核函数准确率是最高的,-n表示防止过拟合,容忍误差的程度,可以通过调节这个会改变训练出来超平面的位置。
第二行代码为调用svmpredict这个函数,输入参数Y为输入数据的标签,X为输入数据,model为上一步训练好的模型,一起调用svmpredict函数,返回Y1表示预测的标签,Y2是一个三行一列的数据,第一行数据表示准确率,第二行和第三行数据表示做回归分析时看的数据。Y3参数是多分类问题时属于每一类的概率。

可以调节核函数的类型和调节惩罚因子C看结果的变化。可以参考这两篇有一些比较细致的说明。

点击打开链接点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: