支持向量机

支持向量机

支持向量机 (Support Vector Machines)是一系列用于分类、回归和异常点检测的监督学习方法。

支持向量机的优点是:

  • 在高维数据空间的高效性
  • 当维度远大于样本数量时,仍然有效
  • 在决策函数中使用训练点的子集
  • 通用性:对于决策函数,可以使用不同的核函数。提供了通用的核,但是也可以指定定制化的核

支持向量机的缺点是:

  • 如果特征的数量远大于样本的数量时,为避免拟合,在选择核函数和正则项时非常关键
  • SVMs没有直接提供概率估计,需使用昂贵的五折交叉验证计算

在scikit-learn中,支持向量机可以使用密集的(numpy.ndarraynumpy.asarray)和稀疏的(scipy.sparse)样本向量作为输入。

分类

SVCNuSVCLinearSVC是能够用于执行多类别分类的算法。

# coding: utf-8
# Plot different SVM classifiers in the iris dataset

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets


def make_meshgrid(x, y, h=.02):
    """Create a mesh of points to plot in

    Parameters
    ----------
    x: data to base x-axis meshgrid on
    y: data to base y-axis meshgrid on
    h: stepsize for meshgrid, optional

    Returns
    -------
    xx, yy : ndarray
    """
    x_min, x_max = x.min() - 1, x.max() + 1
    y_min, y_max = y.min() - 1, y.max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                         np.arange(y_min, y_max, h))
    return xx, yy


def plot_contours(ax, clf, xx, yy, **params):
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)
    out = ax.contourf(xx, yy, Z, **params)
    return out


 iris = datasets.load_iris()
 
X = iris.data[:, :2]
y = iris.target

C = 1.0  # SVM regularization parameter
models = (svm.SVC(kernel='linear', C=C),
          svm.LinearSVC(C=C, max_iter=10000),
          svm.SVC(kernel='rbf', gamma=0.7, C=C),
          svm.SVC(kernel='poly', degree=3, gamma='auto', C=C))
models = (clf.fit(X, y) for clf in models)

# title for the plots
titles = ('SVC with linear kernel',
          'LinearSVC (linear kernel)',
          'SVC with RBF kernel',
          'SVC with polynomial (degree 3) kernel')

# Set-up 2x2 grid for plotting.
fig, sub = plt.subplots(2, 2)
plt.subplots_adjust(wspace=0.4, hspace=0.4)

X0, X1 = X[:, 0], X[:, 1]
xx, yy = make_meshgrid(X0, X1)

for clf, title, ax in zip(models, titles, sub.flatten()):
    plot_contours(ax, clf, xx, yy,
                  cmap=plt.cm.coolwarm, alpha=0.8)
    ax.scatter(X0, X1, c=y, cmap=plt.cm.coolwarm, s=20, edgecolors='k')
    ax.set_xlim(xx.min(), xx.max())
    ax.set_ylim(yy.min(), yy.max())
    ax.set_xlabel('Sepal length')
    ax.set_ylabel('Sepal width')
    ax.set_xticks(())
    ax.set_yticks(())
    ax.set_title(title)

plt.show()

SVCNuSVC是相同的方法,但是接受略微不同的参数集,且有不同的数学模型。另一方面,LinearSVC是在线性核下的支持向量分类。注意:LinearSVC不接受参数kernel,它同样也没有svcNuSVC的成员,如support_

支持向量机的决策函数依赖于训练数据的子集,称作支持向量。这些支持向量可以通过如下成员找到support_vectors_support_n_support

多类别分类

svcNuSVC使用one-against-one实施多类别分类。如果n_class表示类别的数量,那么需要构建n_class*(n_class-1)/2个分类器,且每个分类器在两个类的数据上训练。为了提供与其它分类器相同的接口,decision_function_shape允许单调地将one-against-one分类器的结果转化为大小为(n_samples, n_classes)的决策函数。

LinearSVC实施one-vs-the-rest多分类策略,训练n_class个模型。

# coding: utf-8

from sklearn import svm

X = [[0], [1], [2], [3]]
Y = [0, 1, 2, 3]  # 4 classes

clf = svm.SVC(decision
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值