我们知道,SVM是在机器学习中最常见的分类器之一,它简单,而且分类效果也不错。最常用的使用SVM的方法是用libsvm的库,然而使用那个库的话大多数情况下都是在命令行下使用他的toolkit,数据的IO不是很方便。最近试了一下scipy着一个机器熊希的工具包,用起来相当方便,这里我大概讲讲怎么用scipy中的SVM模块做分类。

如果没有安装scikit-learning,我们首先要安装他:pip install -U scikit-learn 。安装好以后,我们就可以用它来训练模型了。

第一步:准备数据

要训练模型必不可少的是数据,数据包含两类,一个是训练数据,一个是测试数据,训练数据用来训练模型,测试数据用来测试这个模型的性能,当然还有交叉验证以及grid search这些我们暂且不表。我们现在只看只有训练数据以及测试数据这种情况。对于每一类数据,都有分为两个部分,一个是标签一个是数据,在训练之前,要把这两个数据准备好,假设数据有M个N维的数据,那么对应的数组应该就是M行N列,对应的numpy的shape就是(M,N)的样子。对于标签,有M个数据对应就有M个标签,所以标签的shape就是(M,)

第二步:训练分类器的模型

代码如下:

from sklearn import svm
clf=svm.LinearSVC().fit(datTrain,lblTrain)

当然,可以在分类时后指定参数,比如C的大小:

from sklearn import svm
clf=svm.LinearSVC(C=0.1).fit(datTrain,lblTrain)

#第三步:拿分类器进行分类: 我们可以直接得到分类的accuracy:

testAcc=clf.score(datTest,lblTest)

也可以得到未知标签的分类结果

res=clf.predict(datTest)