非线性SVM模型

非线性SVM模型

非线性支持向量机(SVM)是为了处理线性不可分数据而设计的。它通过使用核函数将数据映射到一个高维空间,在这个高维空间中,数据变得线性可分,从而实现分类。常见的核函数包括多项式核、径向基函数(RBF)核和 sigmoid 核等。

非线性 SVM 的优化目标
与线性 SVM 类似,非线性 SVM 通过引入核函数,将原始数据映射到高维空间,在高维空间中找到一个超平面来实现分类。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
import warnings
with warnings.catch_warnings():
    warnings.simplefilter("ignore")
X, y = datasets.make_moons(noise=0.15, random_state=666)

plt.scatter(X[y==0,0], X[y==0,1])
plt.scatter(X[y==1,0], X[y==1,1])
plt.show()

在这里插入图片描述

线性核函数

def LinearSVC():
    return Pipeline([
        ("std_scaler", StandardScaler()),
        ("svc", SVC(kernel="linear"))
    ])

linear_svc = LinearSVC()
linear_svc.fit(X, y)
vars(linear_svc)
{'steps': [('std_scaler', StandardScaler()), ('svc', SVC(kernel='linear'))],
 'memory': None,
 'verbose': False}
def plot_decisionboundary(model, X):
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    
    xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
                     np.arange(y_min, y_max, 0.02))

    predict = model.predict(np.c_[xx.ravel(), yy.ravel()])
    predict = predict.reshape(xx.shape)

    from matplotlib.colors import ListedColormap
    plt.contourf(xx, yy, predict, cmap=ListedColormap(['#CCCCFF', '#EF9A9A', '#90CAF9']))
plot_decisionboundary(linear_svc, X)
plt.scatter(X[y==0, 0], X[y==0,1], color='r')
plt.scatter(X[y==1, 0], X[y==1,1], color='b')
plt.show()

在这里插入图片描述

多项式核函数

def PolyKernelSVC(degree):
    return Pipeline([
        ("std_scaler", StandardScaler()),
        ("svc", SVC(kernel="poly", degree =degree, coef0=1,C=5))
    ])
polykernelsvc = PolyKernelSVC(degree=5)
polykernelsvc.fit(X, y)
vars(polykernelsvc)
{'steps': [('std_scaler', StandardScaler()),
  ('svc', SVC(C=5, coef0=1, degree=1, kernel='poly'))],
 'memory': None,
 'verbose': False}
plot_decisionboundary(polykernelsvc, X)
plt.scatter(X[y==0, 0], X[y==0,1], color='r')
plt.scatter(X[y==1, 0], X[y==1,1], color='b')
plt.show()

在这里插入图片描述

polykernelsvc = PolyKernelSVC(degree=1)
polykernelsvc.fit(X, y)

plot_decisionboundary(polykernelsvc, X)
plt.scatter(X[y==0, 0], X[y==0,1], color='r')
plt.scatter(X[y==1, 0], X[y==1,1], color='b')
plt.show()

在这里插入图片描述

高斯核函数(RBF Kernel)

## 需要调参的参数是gamma
def RBFKernelSVC(gamma):
    return Pipeline([
        ("std_scaler", StandardScaler()),
        ("svc", SVC(kernel="rbf", gamma=gamma))
    ])
rbf_svc = RBFKernelSVC(gamma=1)
rbf_svc.fit(X, y)
vars(rbf_svc)
{'steps': [('std_scaler', StandardScaler()), ('svc', SVC(gamma=1))],
 'memory': None,
 'verbose': False}
plot_decisionboundary(rbf_svc, X)
plt.scatter(X[y==0, 0], X[y==0,1], color='r')
plt.scatter(X[y==1, 0], X[y==1,1], color='b')
plt.show()

在这里插入图片描述

rbf100_svc = RBFKernelSVC(gamma=100)
rbf100_svc.fit(X, y)
plot_decisionboundary(rbf100_svc, X)
plt.scatter(X[y==0, 0], X[y==0,1], color='r')
plt.scatter(X[y==1, 0], X[y==1,1], color='b')
plt.show()

在这里插入图片描述

rbf01_svc = RBFKernelSVC(gamma=0.1)
rbf01_svc.fit(X, y)
plot_decisionboundary(rbf01_svc, X)
plt.scatter(X[y==0, 0], X[y==0,1], color='r')
plt.scatter(X[y==1, 0], X[y==1,1], color='b')
plt.show()

在这里插入图片描述

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在机器学习中,尤其是支持向量机(SVM)算法,通常用于解决线性可分或近似线性可分的问题。当数据是非线性可分的,即通过简单的线性决策边界无法准确分类时,我们可以使用非线性SVM来处理这种情况。非线性SVM的关键在于通过一种数学技巧将原始的输入数据映射到一个更高维度的空间,这个过程通常称为特征扩展或核方法。 首先,我们使用非线性函数,比如多项式函数、径向基函数(RBF,也称为高斯核)或sigmoid函数,将每个输入数据点x转换为一个复杂的特征表示φ(x)。这样,即使原始数据在二维或更低维度上是线性不可分的,映射后的数据可能在高维空间中变得线性可分。例如,RBF核函数可以创建无限维特征空间,使得数据在新的坐标系下可以被线性分割。 然后,线性SVM在新的高维特征空间中寻找最优的超平面,这个超平面最大化了分类间隔,同时最小化了错误。实际上,我们并没有在高维空间中直接操作,而是通过核函数计算样本之间的“内积”,这被称为“核技巧”或“核方法”,避免了实际的高维计算。 非线性SVM的优化问题通常可以表示为以下形式(对于二类情况): \[ \min_{\mathbf{w}, b, \xi} \frac{1}{2} \|\mathbf{w}\|^2 + C \sum_{i=1}^n \xi_i \] \[ \text{subject to: } y_i(\mathbf{w}^\top\phi(\mathbf{x}_i) + b) \geq 1 - \xi_i, \quad \xi_i \geq 0 \] 其中,C是正则化参数,控制了模型的复杂度,ξ_i是松弛变量,用来处理数据点无法完美分类的情况。优化目标是找到权重向量w、偏置项b以及合适的ξ值,使得决策边界最有利,并尽量减少错误分类(由ξ_i衡量)。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值