【机器学习|学习笔记】最小二乘支持向量机(Least squares support vector machine,LS-SVM )详解,附代码。

【机器学习|学习笔记】最小二乘支持向量机(Least squares support vector machine,LS-SVM )详解,附代码。

【机器学习|学习笔记】最小二乘支持向量机(Least squares support vector machine,LS-SVM )详解,附代码。



欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “学术会议小灵通”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/147567533


前言

  • Least Squares Support Vector Machines (LS‑SVM) 是对经典支持向量机(SVM)的一种改进,通过将原本的二次规划问题转化为线性方程组求解,显著降低了计算复杂度并简化了模型训练过程。
  • 它最早由 Johan A.K. Suykens 和 Joos Vandewalle 于1999年提出,并在随后的几十年中发展出稀疏化、迭代算法和多任务扩展等多种变体
  • 其核心在于用最小二乘代价替代传统 SVM 的铰链损失与不等式约束,从而通过求解线性系统获得模型参数,兼具核方法的非线性映射能力与最小二乘的闭式解优势
  • LS‑SVM 已广泛应用于分类、回归、故障检测、光谱分析等领域,并可通过 NumPy/Scipy 或专门工具箱高效实现。

以下将从起源、发展、原理、应用及 Python 代码实现五个方面详细阐述。

起源

  • LS‑SVM 最早由 Suykens 和 Vandewalle 在 1999 年的论文 “Least squares support vector machine classifiers” 中提出,在同年发表于 Neural Processing Letters 上 。
  • 他们的创新在于将 Vapnik 的 SVM 二次规划(QP)问题改写为带等式约束的最小二乘问题,从而可通过线性方程组求解 。
  • 相比经典 SVM,LS‑SVM 通过引入误差平方和惩罚,既保留了核技巧带来的高维映射能力,又避免了 QP 求解的高昂成本。

发展

  • 2002年,Suykens 等人在 World Scientific 出版了专著《Least Squares Support Vector Machines》,系统总结了 LS‑SVM 的理论与算法 。
  • 为处理大规模数据,研究者提出基于共轭梯度的迭代训练算法(CG‑LS‑SVM),将一次性矩阵求逆替换为多次矩阵–向量乘法 。
  • 针对高维稀疏场景,又出现了稀疏化 LS‑SVM(Sparse LS‑SVM),通过引入额外正则化或截断技术减少支持向量数量 。
  • 学术界还研究了 LS‑SVM 与经典 SVM 之间的等价性,证明在一定条件下两者输出相同,强化了 LS‑SVM 在实际应用中的可信度 。
  • 此外,多任务和一类 LS‑SVM(twin/one‑class LS‑SVM)等变体被提出,用于多输出和异常检测任务。

原理

优化目标

  • LS‑SVM 将经典 SVM 的铰链损失与不等式约束:
    在这里插入图片描述
  • 替换为最小二乘损失与等式约束:

在这里插入图片描述

  • 这里 e i e_i ei 为残差, γ γ γ 为正则化参数,其值相当于 C C C 的倒数。

拉格朗日与线性系统

  • 构造拉格朗日函数并对 w , b , e w,b,e w,b,e 求偏导,可消除原始变量,最终得出线性方程组:

在这里插入图片描述

  • 其中 Ω i j = K ( x i , x i ) Ω_{ij} =K(x_i,x_i) Ωij=K(xi,xi)为核矩阵, α α α 为拉格朗日乘子。
  • 求解该系统即可同时得到偏置 b b b 和系数 α α α,预测时仅需计算 ∑ i α i K ( x , x i ) + b ∑_iα_i K(x,x_i)+b iαiK(x,xi)+b

核函数与正则化

  • LS‑SVM 支持任意 Mercer 核,如 RBF、Polynomial、Sigmoid 等;核宽度和 γ γ γ 的选择可通过交叉验证或贝叶斯证据框架自动确定。

应用

  • 近红外光谱分析:在化学成分预测中,LS‑SVM 避免了传统 SVM 的复杂 QP 求解,并在速度和精度上均优于 PLS 回归。
  • 大规模回归:工业过程建模中,LS‑SVM 在样本量大时仍能保持与 SVM 相当的准确率,同时降低计算资源消耗。
  • 多任务分类:Multi‑task Twin LS‑SVM 将共享信息引入多分类器训练,实现多场景并行识别。
  • 水资源预测:利用 LS‑SVM 进行水量时间序列预测,在中长期趋势捕捉上优于 ARIMA 模型。
  • 通用模式识别:在 UCI 基准数据集(Iris、Wine 等)上,LS‑SVM 与经典 SVM 和神经网络性能相当。

Python 代码实现

  • 下面给出一个基于 NumPy/Scipy 的简易 LS‑SVM 分类器实现,并在 Iris 数据集上演示:
import numpy as np
from scipy.linalg import solve
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from scipy.spatial.distance import cdist

class LSSVM:
    def __init__(self, kernel='rbf', gamma=1.0, sigma=1.0):
        self.kernel = kernel
        self.gamma = gamma      # regularization parameter
        self.sigma = sigma      # RBF width

    def _compute_kernel(self, X1, X2):
        if self.kernel == 'rbf':
            # Gaussian RBF kernel
            d2 = cdist(X1, X2, 'sqeuclidean')
            return np.exp(-d2 / (2 * self.sigma**2))
        else:
            raise ValueError("Unsupported kernel")

    def fit(self, X, y):
        N = X.shape[0]
        # build kernel matrix Ω
        Omega = self._compute_kernel(X, X)
        # build linear system
        A = np.block([
            [0,           np.ones((1, N))],
            [np.ones((N,1)), Omega + np.eye(N)/self.gamma]
        ])
        b = np.concatenate(([0], y))
        # solve for [b; alpha]
        sol = solve(A, b)
        self.bias_ = sol[0]
        self.alpha_ = sol[1:]
        self.X_train = X

    def predict(self, X):
        K = self._compute_kernel(X, self.X_train)
        y_pred = K.dot(self.alpha_) + self.bias_
        return np.sign(y_pred)

# 演示
data = load_iris()
X, y = data.data[y:= (data.target != 0).astype(int)], (data.target[y] > 0).astype(int)*2-1
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
scaler = StandardScaler().fit(X_train)
X_train_s = scaler.transform(X_train)
X_test_s  = scaler.transform(X_test)

model = LSSVM(gamma=10.0, sigma=1.0)
model.fit(X_train_s, y_train)
y_pred = model.predict(X_test_s)
acc = np.mean(y_pred == y_test)
print(f"Iris 测试集准确率: {acc:.4f}")

  • 此代码实现了 LS‑SVM 的核心步骤:构造核矩阵、组装线性系统并求解、基于核展开进行预测。用户可通过调整 gamma
    sigma,或替换核函数,满足不同场景需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力毕业的小土博^_^

您的鼓励是我创作的动力!谢谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值