1. SVM原理理解
SVM——即支持向量机,是一种用于二分类问题的机器学习方法。它的基本思想是寻找到两类对象的一个分界面,并且使界面到两类对象最近的点距离最大,也就是间隔最大。
图中位于“蓝线”和“红线”上的点即为支持向量,“黑线”即为两类对象的分界面,支持向量机的作用就是寻找到这样一个“黑”色界面,它满足支持向量到界面的距离最大,其数学模型如下:
问题归结于求解出满足以边界条件的
其中:
同时,为了防止过拟合,一般会允许分界面不完全分割两类对象,存在一定的划分误差。但又为了尽量减小这种划分误差,在上述的计算模型中引入松驰变量,这样原数学模型又变为带松驰变量的模型:
用同样的方法,求解上述问题的“对偶问题”,并将原问题转换为:
同样采用SMO算法求得满足上述边界条件的
对于某些问题,并不是线性可分的,很难直接找到其分界面,但如果将特征转换到更高维度后,往往能很容易找到其分界面。
将特征转换到更高维度,需要进行更多更复杂的计算,假设转换关系为
这样就可以大大简化计算,但核函数一般很难直接找到,现在已有一些常用核函数。同时,对于一个特征,很难知道需要把特征转换到哪个维度才可以很好的分界,也就很难知道哪个核函数是适合的,在实际应用中只能进行多次实践。
另外,由于SVM是二元分类器,在进行多标签分类时,还需要采用一些其它策略,常用方法如下:
左侧图是指OVR方法(one versus rest):对于K个类别的情况, 训练K个SVM, 第 j 个SVM用于判读任意条数据是属于类别 j 还是属于类别非 j. 预测的时候, 具有最大值的 θ_i^T x表示给定的数据 x属于类别 i。
右侧图是指OVO方法(one versus one):对于K个类别的情况, 训练K * (K-1) /2 个SVM, 每一个SVM只用于判读任意条数据是属于K中的特定两个类别. 预测的时候, 使用K * (K-1) /2 个SVM做 K * (K-1) /2 次预测, 使用计票的方式决定数据被分类为哪个类别的次数最多, 就认为数据 x 属于此类别。
2. SVM实例应用
本实例来自贪心学院课堂实践内容,利用SVM进行人脸识别。
(1)首先,从sklearn中导入人脸识别数据。
(2)由于图像被转换为了62×47个像素值,特征维度较高,采用PCA主成分分析方法进行降维,最终降到150维。同时,由于每次训练模型都需要用PCA进行降维分析,因此采用pipeline的方法重复应用PCA降维后进行SVM模型训练。
(3)然后,利用sklearn中的model_selection对数据划分为训练数据和测试数据。
(4)由于SVM模型中还需要手动确定带允许误差的常数C,即带松驰变量模型中的C值,而一般这个最优C值是未知的,需要通过sklearn中的model_selection中的GridSearchCV进行交叉验证,得到最优参数C。
(5)选择带最优参数C值的最优模型,并用最优模型对测试数据进行预测。
(6)通过与测试数据比较预测结果,可以利用sklearn.metrics中的classification_report对模型预测准确性进行评估。其中precision是指某一对象预测的准确性,recall是该对象预测正确占总的预测正确的比值,f1是前两个值的综合评价指标,support 是该对象在测试数据中的数量。
(7)可以通过sklearn.metrics中的confusion_matrix输出混淆矩阵,可以查看每一个对象预测正确及预测错误的具体情况。