SVM是一种用于分类、回归和异常值探测的有监督学习方法。
SVM的优点:在高维空间有效;在样本维度比样本数量多的情况下有效;支持向量使用了训练数据的子集,记忆有效;用途广泛:判定函数可以使用不同的核函数。
SVM的不足:特征数比样本数多很多的情况下,表现较差;不能直接给出估计概率,需要通过5折交叉验证(five-fold cross-validation).
在sklearn中,SVM支持密集矩阵(numpy.ndarray)和稀疏矩阵(scipy.sparse)作为输入。However, to use an SVM to make predictions for sparse data, it must have been fit on such data,为了得到最佳性能,使用dtype=float64的numpy.adarray 或者scipy.sparse.csr_matrix 。
分类
SVC,NuSVC和LinearSVC可以用于多类分类。
SVC和NuSVC是相似的方法,但是接受不同的参数并且有不同的数学公式;LinearSVC是有线性核的支持分类器。和其他分类器一样,SVC,NuSVC和LinearSVC的输入包括训练样本数组以及对应的标记数组。
多类分类
SVC和NuSVC使用“one-against-one”方法,如果有n类,每两类之间建立一个分类器,共需要建立 n(n-1)/2 个分类器。LinearSVC使用 "one-vs -the -rest"策略,如果有n类,将 其中n-1类归为一类,建立 n 个分类器。
小提示
1.避免数据拷贝:对于SVC、SVR、NuSVC、NuSVR,在运行前需要将数据转换为C-ordered contiguous;对于LinearSVC和LogisticRegression,任何输入都将拷贝并且转化为稀疏矩阵,如果不是用密集矩阵作为输入来做大规模的线性分类,最好使用SGDClassifier。
2.核缓存大小:对于SVC、SVR,NuSVC、NuSVR,核缓存的大小严重影响运行时间,在可能的情况下,不要使用默认设置 cache_size=200 (MB),设置为500或者1000比较好。
3.设置C值:C(惩罚因子)默认设置为1,如果有较多的异常观察值,最好降低C的值,它关系到估计的正则化。
4.标准化输入数据。
5.NuSVC、OneClassSVM、NuSVM中的参数 nu ,近似等于训练误差和支持向量的百分比,取值范围(0,1),一般取(0.1,0.8),代表样本落入间隔内的最小数目,即预测错误的比例。(The main motivation for the nu versions of SVM is that it has a has a more meaningful interpretation. This is because nu represents an upper bound on the fraction of training samples which are errors (badly predicted) and a lower bound on the fraction of samples which are support vectors. Some users feel nu is more intuitive to use than C or epsilon.)
6.在SVC中,如果是不平衡样本,设置 class_weight='balanced' 尝试用不同的C值来训练数据。
7.LinearSVC在拟合模型时随机选取了特征,这导致相同的数据会得到不同的结果,可以尝试小一点的 tol 参数;
8.LinearSVC 中使用 L1 范数将得到稀疏的结果,即只有一部分特征对判别函数有贡献;增加C的值将得到一个更加复杂的模型,因为选择了更多的特征;可以使用 sklearn.svm.l1_min_c 计算最小C值。
网友评论