(李航统计学习方法)SVM的python实现

本文介绍了支持向量机(SVM)的基本概念,强调了间隔最大化的重要性,以及SVM在分类问题中的应用。内容涵盖线性可分与非线性支持向量机,合页损失函数,SVM的Python实现流程,包括SMO算法和KKT条件的运用。还讨论了核函数的选择,如线性、多项式和高斯核,并提供了参数调优的建议。
摘要由CSDN通过智能技术生成

支持向量机是一种二分类模型,基本模型是定义在特征空间的间隔最大的线性分类器。间隔最大化使它有别于感知机。在面试中,经常遇到手推SVM,所以公式的推导也很重要。
模型:
策略:间隔最大化,形式化为求解凸二次规划,等价于正则化的合页损失函数最小化
算法:略
支持向量机包括:线性可分支持向量机,线性支持向量机,非线性支持向量机
间隔最大化的直观解释:对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类。使其面对最难分的实例点也有足够大的确信度将它们分开,这样在面对未知的新实例也有很好的分类预测能力。
支持向量:在数据线性可分的情况下,训练数据的样本点与分离超平面最近的样本点
献上我看到的最好的讲解:https://blog.csdn.net/v_july_v/article/details/7624837(因为链接中的大神讲解非常好,就不写自己的理解了)
关于smo的公式推导:https://www.jianshu.com/p/eef51f939ace
合页损失函数
支持向量机的另外一种解释就是最小化合页损失函数
在这里插入图片描述
在这里插入图片描述
SVM的损失函数就是合页损失函数加上正则项,第一项是经验损失,第二项是w的L2范数;它与SVM求最优解的目标函数的形式很相似
可以看到
在这里插入图片描述
从图中我们可以看到,

1)0-1损失

当样本被正确分类时,损失为0;当样本被错误分类时,损失为1。

2)感知机损失函数

当样本被正确分类时,损失为0;当样本被错误分类时,损失为-y(wx+b)。

3)合页损失函数

当样本被正确分类且函数间隔大于1时,合页损失才是0,否则损失是1-y(wx+b)。

相比之下,合页损失函数不仅要正确分类,而且确信度足够高时损失才是0。也就是说,合页损失函数对学习有更高的要求。

python代码实现:

import numpy as np
from sklearn.metrics.pairwise import rbf_kernel
from scipy.io import loadmat
from sklearn import datasets
"""
svm模型
"""

def linearKernel():
    """线性核函数
    """
    def calc(X, A):
        return X * A.T
    return calc

def rbfKernel(delta):
    """rbf核函数
    """
    gamma = 1.0 / (2 * delta**2)

    def calc(X, A):
        return np.mat(rbf_kernel(X, A, gamma=gamma))
    return calc

def getSmo(X, y, C, tol, maxIter, kernel=linearKernel()):
    """SMO, X 训练样本,y标签集 C正规化参数 tol容忍值 maxIter最大迭代次数,K所用的核
    Args:
        X 训练样本
        y 标签集
        C 正规化参数
        tol 容忍值
        maxIter 最大迭代次数
        K 所用核函数
    Returns:
        trainSimple 简化版训练算法
        train 完整版训练算法
        predict 预测函数
    """
    m, n = X.shape
    # 存放核函数的转化结果
    K = kernel(X, X)
    # Cache存放预测误差,用以加快计算速度
    ECache = np.zeros((m,2))

    def predict(X, alphas, b, supportVectorsIndex, supportVectors):
        """计算权值向量
        Args:
            X 预测矩阵
            alphas alphas
            b b
            supportVectorsIndex 支持向量坐标集
            supportVectors 支持向量
        Returns:
            predicts 预测结果
	这里因为对预测起作用的是支持向量,
        非支持向量的前面的alphas为0,支持向量的0<alphas<C(使用软间隔)
        """
        Ks = kernel(supportVectors, X)
        predicts = (np.multiply(alphas[supportVectorsIndex], y[
            supportVectorsIndex]).T * Ks + b).T
        predicts = np.sign(predicts)
        return predicts

    def w(alphas, b, supportVectorsIndex, supportVectors):
        """计算权值
        Args:
            alphas alphas
            b b
            supportVectorsIndex 支持向量坐标
            supportVectors 支持向量
        Returns:
            w
李航的《统计学习方法》是一本经典的统计学习教材,其中涵盖了统计学习的基本理论和方法。该书主要介绍了统计学习的三要素:模型、策略和算法。引用提到,训练集用来训练模型,验证集用来选择模型,测试集用于对学习方法的评估。这些三要素是统计学习方法的基础。引用进一步解释了统计学习的目标,即通过构建概率统计模型对数据进行准确的预测与分析,并提高学习效率。引用提到了一种常用的统计学习方法,即提升(boosting),它通过改变训练样本的权重,学习多个弱分类器,并将它们线性组合成一个强分类器,以提高分类的性能。 总结起来,李航的《统计学习方法》笔记主要围绕统计学习的基本理论和方法展开,介绍了统计学习的三要素、目标和提升等常用方法。这本书对于学习统计学习的人来说是一本非常有价值的参考资料。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [统计学习方法——李航 笔记](https://blog.csdn.net/qq_45383347/article/details/110482540)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [李航统计学习方法学习笔记](https://blog.csdn.net/liuzuoping/article/details/98840923)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值