参考链接:https://www.cnblogs.com/wj-1314/p/10701708.html
一、OneClassSVM的定义
- OneClass单分类算法:
- 无监督学习
- 只有一个类别,判断是否是这个类别
- OneClassSVM严格来说是新奇值检测
异常值检测:训练数据中含有异常值,通过相关算法找到训练数据的中心模式,忽略偏差观测值,从而检测出异常值。
奇异值检测:训练数据不包含异常值,只含有positive(正常)的数据,通过算法学习其pattern。之后用于检测未曾看到过新数据是否属于这个pattern,如果属于,该新数据是positive,否则negative,即奇异值。
- 严格来说,OneCLassSVM不是一种outlier detection,而是一种novelty detection方法:它的训练集不应该掺杂异常点,因为模型可能会去匹配这些异常点。但在数据维度很高,或者对相关数据分布没有任何假设的情况下,OneClassSVM也可以作为一种很好的outlier detection方法。
二、基本算法思路
- 基本思路:在特征空间中找到一个分割的超球体(相比svm的超平面),最小化该球体,落在球体以内的就认为是正例,否则就是反例。
- 目标函数:
- 约束条件:
其中r为半径,o为中心点,是松弛变量
三、使用代码
class sklearn.svm.OneClassSVM(kernel=’rbf’, degree=3, gamma=’auto’,
coef0=0.0, tol=0.001, nu=0.5, shrinking=True, cache_size=200, verbose=False,
max_iter=-1, random_state=None)
-
主要参数:
kernel:核函数(一般使用高斯核)
nu:设定训练误差(0, 1],表示异常点比例,默认值为0.5 -
主要方法
-
fit(X):训练,根据训练样本和上面两个参数探测边界。(注意是无监督)
-
predict(X):返回预测值,+1就是正常样本,-1就是异常样本。
-
decision_function(X):返回各样本点到超平面的函数距离(signed distance),正的维正常样本,负的为异常样本。
-
set_params(**params):设置这个评估器的参数,该方法适用于简单估计器以及嵌套对象(例如管道),而后者具有表单<component>_<parameter>的参数,,因此可以更新嵌套对象的每个组件。
-
get_params([deep]):获取这个评估器的参数。
-
fit_predict(X[, y]):在X上执行拟合并返回X的标签,对于异常值,返回 -1 ,对于内点,返回1。
-
网友评论