One class SVM可以用来做异常点检测,到底是无监督还是有监督学习?或者是半监督?
4个回答
虽然说是one class,但我感觉应该还是监督式学习,因为在训练时,你是知道所有的样本都是同一类的。
而非监督式学习时,你并不知道样本是否是一类或者几类。
网上有说无监督,有说有监督的,也有人说是半监督的。
我觉得更像是有监督的。因为在one class svm里,你不会对训练集进行聚类,而是把训练集的样本全部标签当作已知的。
不过这个不重要吧,会用就行了。
我觉得用了kernel (RBF)的one class svm可用于无监督的clustering,把数据分为几个clusters,而linear one class svm可看作把空间分为两份,所有数据点在其中一半,相当于imbalanced two classes svm。但第二种情况估计没人用,所以可笼统的看作无监督。
再看一下two classes SVM的dual problem公式(来至wiki),
其中$y$是$+1/-1$的标签,$x$是数据,$c$是数据点的重要性系数,$c>0$的点是support vector。可以看到当$y_i=-1$时,$y_i*x_i=1*-x_i$,也就是把标签为$-1$的点$x_i$沿坐标原点对称得到$-x_i$,并当做标签为$1$的点。此时就是one class SVM,所有数据点在分割平面的一侧。
------------------------------------------------------------
当 one class SVM做异常点检查时应该是无监督的,因为不知道是否为异常点的标签。当求出分割边沿后,可以定义离边沿一定距离的点为异常点。
SofaSofa数据科学社区DS面试题库 DS面经One-class SVM is used for novelty detection, that is, given a set of samples, it will detect the soft boundary of that set so as to classify new points as belonging to that set or not. The class that implements this is called OneClassSVM.
In this case, as it is a type of unsupervised learning, the fit method will only take as input an array X, as there are no class labels.