link : https://github.com/Kaslanarian/PySVM.
实现LIBSVM中的SVM算法,对标sklearn.svm模块
我们实现了针对一般SVM对偶问题
\[\begin{aligned} \min_{\pmb\alpha}\quad&\frac12\pmb\alpha^T\pmb Q\pmb\alpha+\pmb p^T\pmb\alpha\\ \text{s.t.}\quad&\pmb y^T\pmb\alpha=0\\ &0\leq\alpha_i\leq C,i=1,\cdots,l \end{aligned}\]的SMO算法求解器Solver
,和针对NuSVM对偶问题
的SMO算法求解器NuSolver
,从而实现支持向量分类,回归和异常检测。
我们实现了下面几种SVM:
具体实现的层次框架:
其中RFF是随机傅里叶特征,LRU cache缓存机制用于处理极大数据的场景。
cache_size
参数,我们会使用核函数缓存计算核矩阵,避免大数据情况下核矩阵存储开销;更多可以查阅项目文档。
输入
git clone https://github.com/Kaslanarian/PySVM
cd PySVM
python setup.py install
进行安装,然后运行一个简单的例子
>>> from sklearn.datasets import load_iris
>>> from pysvm import LinearSVC
>>> X, y = load_iris(return_X_y=True)
>>> X = (X - X.mean(0)) / X.std(0) # 标准化
>>> clf = LinearSVC().fit(X, y) # 训练模型
>>> clf.score(X, y) # 准确率
0.94
在tests
中,我们编写了5个例子,分别是
使用三种SVM对sklearn自带数据集分类(默认参数、选取20%数据作为测试数据、数据经过标准化):
Accuracy | Iris | Wine | Breast Cancer | Digits |
---|---|---|---|---|
Linear SVC | 94.737% | 97.778% | 96.503% | 95.556% |
Kernel SVC | 97.368% | 97.778% | 96.503% | 98.222% |
NuSVC | 97.368% | 97.778% | 92.308% | 92.222% |
使用三种SVM对sklearn自带数据集回归(默认参数、选取20%数据作为测试数据、数据经过标准化):
R2 score | Boston | Diabetes |
---|---|---|
Linear SVR | 0.6570 | 0.4537 |
Kernel SVR | 0.6992 | 0.1756 |
NuSVR | 0.6800 | 0.1459 |
分别用LinearSVC和KernelSVC对人工构造的二分类数据集进行分类,画出分类结果图像和决策函数值图像:
用三种SVR拟合三种不同的数据:线性数据,二次函数和三角函数:
用One Class SVM进行异常检测: