机器学习——SVM

目录

引言

SVM的原理

线性可分的情况

非线性可分和核函数

目标函数和优化

软间隔和松弛变量

SVM的优点和缺点:

优点

缺点

代码实现

超参数调优

核函数

结论



引言

机器学习是一种通过数据训练模型以实现预测或决策的方法。其目标是从历史数据中学习规律,并利用这些规律对未知的数据进行分类、回归等操作,从而实现对未来事件的预测。机器学习在领域包括但不限于金融、医学、自然语言处理、图像识别等。

SVM的原理

线性可分的情况

在数据线性可分的情况下,SVM的目标是找到一个最优超平面,将两个不同类别的样本点完全分开。超平面是一个n-1维的线性子空间,在特征空间中具有最大的间隔,即离两个类别最近的样本点的距离最大。

假设训练集{(x1​,y1​),(x2​,y2​),...,(xm​,ym​)},其中xi​∈Rn为样本的特征向量,yi​∈{−1,1}为样本的类别标签。超平面可以表示为:

其中,w=(w1​,w2​,...,wn​)是一个n维的向量,b是一个标量,x=(x1​,x2​,...,xn​)是一个n维的特征向量。对于任意点x0​,它到超平面的距离为:

其中,

SVM的目标是找到最大化间隔的超平面,并且保证每个类别的支持向量都位于相应的边界上。支持向量是离超平面最近的样本点,它们对于确定超平面的位置和方向至关重要。SVM通过计算样本点到超平面的距离来定义间隔,最大化这个间隔可以使分类器更具鲁棒性和泛化能力。

非线性可分和核函数

当数据不是线性可分时,SVM引入了核函数的概念。核函数能够将样本从原始特征空间映射到更高维的特征空间,使得数据在新的空间中线性可分。常用的核函数包括线性核、多项式核和高斯核(径向基函数)等。核函数的形式为:

其中,xi​和xj​是两个样本点,ϕ(x)是一个从原始特征空间到新特征空间的映射函数。对于不同的核函数,映射函数的形式也不同。

线性核:

多项式核:

高斯核:

其中,p和σ都是超参数,在训练阶段需要选择合适的超参数。

目标函数和优化

SVM通过最小化目标函数来求解最优超平面。目标函数由间隔的最大化和对模型复杂度的惩罚项组成,通常使用正则化项来平衡两者。SVM的目标函数为:

其中,C是一个正则化系数,控制着间隔和误分类点的权衡,ξi​是松弛变量,表示样本点的错误程度。目标函数的第一项是间隔的最大化,第二项是所有误分类点的惩罚项。SVM的优化问题可以转化为一个二次规划(Quadratic Programming)问题,通过求解拉格朗日乘子来得到最优解。

目标函数中的\frac{1}{2}\left | \left | w \right | \right |^{2}项表示了模型的复杂度,它的值越小代表模型越简单,具有更好的泛化能力。而∑i=1m​ξi​项表示了误分类点的数量和松弛变量的总和,它的值越小代表模型对误分类点的容忍度越低,具有更好的鲁棒性。

软间隔和松弛变量

在实际情况中,数据往往不是完全线性可分的,存在一定的噪声和异常点。SVM引入了软间隔和松弛变量的概念,允许一些样本点位于超平面的错误一侧或在间隔内部。松弛变量表示了样本点的错误程度,目标是最小化错误的数量和松弛变量的总和。目标函数的形式为:

其中,ξi​和ξi∗​分别表示第i个样本点在超平面错误一侧和间隔内部的程度,C是一个正则化系数,用于控制误分类点和松弛变量之间的权衡。

SVM的优点和缺点:

优点

  1. 有效处理高维数据:SVM算法在高维特征空间中进行计算,能够有效地处理高维数据,避免了所谓的“维数灾难”问题。
  2. 泛化能力强:SVM通过最大化间隔的方式选择超平面,使得分类器对于未见过的样本具有较好的泛化能力,具有较低的错误率。
  3. 鲁棒性好:SVM通过引入支持向量来定义决策边界,支持向量对于确定超平面的位置和方向至关重要,使得SVM对于噪声和异常点具有较好的鲁棒性。
  4. 可解释性强:SVM的决策边界是由支持向量决定的,支持向量可以直接反映样本的分布情况,因此SVM具有很好的可解释性。

缺点

  1. 计算复杂度高:SVM算法的训练过程涉及到求解二次规划问题,随着样本数量的增加,计算复杂度呈现二次或立方级别的增长,对于大规模数据集可能会面临计算困难。
  2. 参数选择敏感:SVM算法需要人工设置一些参数,如正则化系数C、核函数的参数等,不同的参数选择会对结果产生影响,需要进行调参工作。
  3. 对缺失数据敏感:SVM算法对于缺失数据敏感,对于存在大量缺失数据的情况,可能需要进行额外的处理或使用其他算法。
  4. 处理多类问题困难:SVM本身是一种二分类算法,对于多类问题需要进行扩展,常用的方法有一对一和一对多策略,但在某些情况下可能存在类别不平衡的问题。

代码实现

代码:

import numpy as np

class LinearSVM:
    def __init__(self, learning_rate=0.01, reg=0.1, max_iter=1000, tol=1e-3):
        self.learning_rate = learning_rate  # 学习率
        self.reg = reg  # 正则化强度
        self.max_iter = max_iter  # 最大迭代次数
        self.tol = tol  # 收敛阈值
        self.w = None  # 权重向量
        self.b = 0  # 偏差项
    
    def fit(self, X, y):
        n_samples, n_features = X.shape
        
        # 初始化权重向量
        self.w = np.zeros(n_features)
        
        # 迭代训练模型
        for _ in range(self.max_iter):
            for i in range(n_samples):
                # 计算预测值
                f = np.dot(X[i], self.w) + self.b
                
                # 判断是否误分类
                if y[i] * f >= 1:
                    self.w -= self.learning_rate * (2 * self.reg * self.w)
                else:
                    self.w -= self.learning_rate * (2 * self.reg * self.w - np.dot(X[i], y[i]))
                    self.b -= self.learning_rate * y[i]
            
            # 判断是否收敛
            if np.linalg.norm(2 * self.reg * self.w - np.dot(X.T, y) + self.b * y) <= self.tol:
                break
    
    def predict(self, X):
        scores = np.dot(X, self.w) + self.b
        pred = np.sign(scores)
        return pred

超参数调优

核函数

SVM算法中的核函数是将样本从原始特征空间映射到更高维的特征空间,使得数据在新的空间中线性可分。常见的核函数有线性核、多项式核和高斯核等。

  1. 线性核

线性核是最简单的核函数,它没有进行任何映射,直接在原始特征空间中进行计算。线性核的形式为:

其中,xi​和xj​是两个样本点。

  1. 多项式核

多项式核是一种非线性核函数,它可以通过增加多项式项来扩展原始特征空间。多项式核的形式为:

其中,p是多项式的阶数,通常取2或3。

  1. 高斯核

高斯核(也称为径向基函数)是一种常用的非线性核函数,它能够将样本点投影到无限维的特征空间中。高斯核的形式为:

其中,∣∣xi​−xj​∣∣2表示欧几里得距离的平方,σ是高斯核的带宽参数,控制着样本点在新特征空间中的分布范围。

除了以上三种核函数,还有其他类型的核函数,例如拉普拉斯核、Sigmoid核等。不同的核函数适用于不同的数据集和应用场景,选择合适的核函数是使用SVM算法的重要因素之一。

结论

SVM是一种经典的机器学习算法,主要应用于分类和回归问题。其基本思想是通过找到一个最优超平面将数据分为两类,最优超平面是指离分割超平面最近的点到该超平面的距离最大化,这些点被称为支持向量。SVM具有处理高维、非线性数据以及避免过拟合等优点,在图像分类、文本分类、语音识别、生物信息学等领域得到了广泛应用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值