支持向量机(SVM)是一组用于分类、回归和异常值检测的有监督学习方法。
SVMs: LinearSVC, Linear SVR, SVC, Nu-SVC, SVR, Nu-SVR, OneClassSVM
支持向量机的优点是:
高维空间中的有效性。
在维数大于样本数的情况下仍然有效。
在决策函数中使用训练点的子集(称为支持向量),因此它也是内存有效的。
多功能:可以为决策函数指定不同的内核函数。提供了常见核函数,但也可以自定义核函数。
支持向量机的缺点包括:
如果特征数远大于样本数,通过选择核函数和正则项避免过拟合是至关重要的。
支持向量机不直接提供概率估计,这些计算使用计算量大的的5折-交叉验证。
最简单分类超平面,1维:x=0,2维:x1+x2=0
当θTXi与 θTX值大于1时,也就是距离分类边界大于1,此时无损,损失为1 - ||θTXi - θTX||,下限为0无上限。
import time
import numpy as np
import scipy.io as scio
import pandas as pd
from numpy import newaxis
#from pylab import * #包含了NumPy和pyplot常用的函数
from sklearn.cluster import KMeans
from sklearn import svm
from sklearn.svm import SVC
from sklearn.svm import LinearSVC
from sklearn.svm import NuSVC
from sklearn.svm import SVR
from sklearn.svm import LinearSVR
from sklearn.datasets import make_regression
from sklearn.datasets import make_classification
对于多分类问题,SVC采用的是one-vs-one投票机制,需要两两类别建立分类器,训练时间可能比较长。
SVC参数解释:
C: 误差项的惩罚系数C ,用来平衡分类间隔margin (误差距离平方和?cost1和cost2,大于1(-1)时损失为0)和错分样本的 (default=1.0);
kernel: 'linear', 'poly', 'rbf', 'sigmoid', 'precomputed' ,(default='rbf');
degree : 多项式核'poly'的阶数,(default=3);
gamma : 'rbf', 'poly' 及'sigmoid'的核系数,默认时为(1/特征个数),(default='auto');
coef0 : 核函数中的独立项,仅在'poly' 和 'sigmoid'中显著,(default=0.0);
probability : 是否使用概率估计,必须在'fit'前使用,并会减慢速度,(default=False);
shrinking :是否使用shrinking heuristic,(default=True);
tol:停止准则的门槛,(default=1e-3);
cache_size : 核缓存(in MB);在大样本的时候,缓存大小会影响训练速度,因此如果机器内存大,推荐用500MB or 1000MB。默认是200MB;
class_weight :类别权重,设置每个类别权重系数。对于每一个类别i设置惩罚系数C = class_weight[i]*C。如果不给出 (default=1);样本数量不均衡时设置为'balanced',权重自动调整为 n_samples / (n_classes * np.bincount(y)), 此时某种类型样本量越多,则权重越低;样本量越少,则权重越高;np.bincount(y)每个类的样本数;
verbose: 如果启用,可能无法在多线程环境正常工作,(default=False);
max_iter: 最大迭代次数,'-1'时无限制, (default=-1);
decision_function_shape : 返回一对多 'ovr'决策函数(n_samples, n_classes),或原始一对一'ovo'决策函数(n_samples, n_classes * (n_classes - 1) / 2),(default='ovr');
random_state: 设置随机数种子,如果设置了随机数种子,则每次实验都能得到一样的结果,即每次运行取随机数都能得到相同的数 (default=None);
输出:
support_ : 支持向量指数;
support_vectors_ : 支持向量;
n_support_ : 每一类的支持向量个数;
dual_coef_ : 决策函数中支持向量的系数,对于多分类为1-vs-1分类器的系数;
coef_ : 返回每个特征的权重,仅线性