支持向量机(三)——利用核函数得到非线性分类器

3 核函数与非线性支持向量机

3.1 核函数

如果训练数据本身是非线性的,比如按下图分布:

这里写图片描述

那么此时原输入空间没有超平面能将训练集很好地分离开,但存在这样的超曲面。而我们仍然希望用求解线性分类问题的方法求解非线性问题。这时可以将原输入空间中的数据点通过非线性变换,映射到新特征空间去,在此特征空间中,训练集是线性可分的,这时可以使用线性分类的方法找解决分类问题。比如上图中,将左边的原始输入空间映射到右边的新特征空间中去,然后用线性分类器在新空间中解决分类问题。

核函数
X 是输入空间(欧式空间 Rn 的子集或者离散集合),设 H 为特征空间(希尔伯特空间),如果存在一个从 X H 的映射

ϕ(x):XH
使得对所有的 x,zX ,函数 K(x,z) 满足条件
K(x,z)=ϕ(x)ϕ(z)

则称 K(x,z) 为核函数, ϕ(x)

但是, ϕ 是输入空间 Rn 到特征空间 H 的映射,而 H 一般是高维的甚至是无穷维的,所以直接求 ϕ(x) 是比较困难的。核技巧的想法是,只定义核函数 K(x,z) ,而不显示定义非线性映射函数 ϕ ,这对支持向量机来说再合适不过了,因为无论是支持向量机的优化问题还是其最优超平面,都只涉及变换后的内积,而并不需要变换值。(这里多提一句,对于确定的核函数 K(x,z) ,其对应的特征空间 H 和映射 ϕ 并不唯一。)

3.2 非线性支持向量机

于是在特征空间中的支持向量机优化问题为:

minαs.t.12i=1mj=1mαiαjyiyjK(xi,xj)i=1mαii=1mαiyi=00αiC(50)

对应的最优超平面为:

i=1mαiyiK(xi,x)+b=0(51)

3.3 常用核函数

核函数并不好构造,不过有几个常用的核函数:

  • 多项式核

    K(x,z)=(xz+1)p

  • 高斯核

    K(x,z)=exp(||xz||22σ2)

    又称为径向基核函数,可以将数据映射到无穷维空间。

核函数有如下性质:

  • 如果 K1 K2 为核函数,那么对于任意正数 γ1,γ2 ,线性组合
    K(x,z)=γ1K1+γ2K2
    也是核函数。
  • 如果 K1 K2 为核函数,那么核函数的乘积也是核函数:
    K(x,z)=K1(x,z)K2(x,z)
  • 如果 K1 为核函数,那么对于任意函数 g(x)
    K(x,z)=g(x)K1(x,z)g(z)
    也是核函数。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用线性核函数支持向量机分类器画图的Python代码示例: ```python import matplotlib.pyplot as plt from sklearn import svm import numpy as np # 构造训练数据 X_train = np.array([[0, 0], [1, 1], [1, 0], [0, 1]]) y_train = np.array([0, 0, 1, 1]) # 定义SVC模型 svc = svm.SVC(kernel='linear') # 训练模型 svc.fit(X_train, y_train) # 绘制决策边界 w = svc.coef_[0] a = -w[0] / w[1] xx = np.linspace(-0.5, 1.5) yy = a * xx - (svc.intercept_[0]) / w[1] margin = 1 / np.sqrt(np.sum(svc.coef_ ** 2)) yy_down = yy - np.sqrt(1 + a ** 2) * margin yy_up = yy + np.sqrt(1 + a ** 2) * margin # 绘制数据点和决策边界 plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=plt.cm.Paired) plt.plot(xx, yy, 'k-') plt.plot(xx, yy_down, 'k--') plt.plot(xx, yy_up, 'k--') # 设置图像标题和坐标轴标签 plt.title("Linear SVM") plt.xlabel("Feature 1") plt.ylabel("Feature 2") # 显示图像 plt.show() ``` 在这个示例中,我们首先构造了训练数据`X_train`和`y_train`,其中`X_train`是一个4行2列的矩阵,每行代表一个数据点的特征,`y_train`是一个1维数组,代表每个数据点的类别。接下来,我们定义了一个SVC模型,并将其拟合到训练数据上。然后,我们使用训练好的模型绘制出决策边界。具体来说,我们首先计算出超平面的斜率和截距,然后根据这些参数绘制出超平面和支持向量所构成的线段。最后,我们使用`plt.scatter`函数绘制出数据点,并设置图像标题和坐标轴标签,最终将图像显示出来。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值