SVM原理理解

2023-12-16

目录

概念推导:

共识:距离两个点集距离最大的分类直线的泛化能力更好,更能适应复杂数据。

怎么能让margin最大?

最大化margin公式:

求解最大margin值:

拉格朗日乘子法:

为什么公式中出现求和符号?

SVM模型:

求解拉格朗日乘子:

如何求解?

1.计算实例:

2.求解算法--SMO

求解问题:

工作原理:

为什么每次要选择两个变量来更新,而不是一个变量呢?

代码:

小结:


学习资料:

猫都能看懂的SVM【从概念理解、优化方法到代码实现】_哔哩哔哩_bilibili

不简单的SVM - 知乎 (zhihu.com)

机器学习中的超平面wx+b=0?_平面方程wx+b=0-CSDN博客

优化-拉格朗日乘子法 - 知乎 (zhihu.com)

概念推导:

样本集: D={(x1,y1),(x2,y2),,,(xn,yn)}

类别标签: y\epsilon \begin{Bmatrix} -1 ,& 1 \end{Bmatrix}

分类直线: f=w^{\Gamma }x+b

f=w^{\Gamma }x+b=0 时,表示点在分类直线上; f=w^{\Gamma }x+b>0 表示该点在直线上方,表示该点为正样本; f=w^{\Gamma }x+b<0 表示该点在直线下方,该点为负样本;将上述转化为数学语言,即:

y_{i}\times (w^{\Gamma }x_{i}+b)\geq 0

对于二分类问题,我们可以找到许多分类直线将不同点集正确区分。如下图:灰色面中的直线都是分类直线。margin表示间隔。

共识:距离两个点集距离最大的分类直线的泛化能力更好,更能适应复杂数据。

因此我们希望所有的点都被正确分类并且落在两条直线的两侧,且直线内区域尽量大 对上述公式进行改进:即 (w^{\Gamma }x_{i}+b) 在(-1,1)时,不分类

(w^{\Gamma }x_{i}+b)\geq 1 yi=1

(w^{\Gamma }x_{i}+b)\geq -1 yi=-1

y_{i}\times (w^{\Gamma }x_{i}+b)\geq 1

怎么能让margin最大?

计算最大间隔: X_{+}X_{-} 表示分类直线边界上里最佳分类直线距离最近的两点;最大间隔margin为 X_{+}X_{-} 之间的距离,等于 d_{+}+d_{-}

由直线外一点到直线的距离:直线: Ax+By+C =0

d=\frac{\begin{vmatrix} Ax+By+C \end{vmatrix}}{(A^{2}+^B{2})^{1/2}}

(二维平面上公式:ax+by+c=0 点坐标为(x,y),二分类散点图上点坐标为(x1,x2)表示不同特征

w和x是矩阵 wx+b=w1x1+w2x2+b。所以直线上点满足w1x1+w2x2+b=0,

机器学习中的超平面wx+b=0?_平面方程wx+b=0-CSDN博客

得:

d_{+}=\frac{\begin{vmatrix} w^{\Gamma }X_{+}+b \end{vmatrix}}{\begin{Vmatrix} w \end{Vmatrix}}

d_{-}=\frac{\begin{vmatrix} w^{\Gamma }X_{-}+b \end{vmatrix}}{\begin{Vmatrix} w \end{Vmatrix}}

又:

w^{\Gamma }X_{+}+b=1

w^{\Gamma }X_{-}+b=-1

得:

margin=\frac{2}{\left \| w \right \|}

最大化margin公式:

argmax_{w,b} \frac{2}{\left \| w \right \|} , y_{i}\times (w^{\Gamma }x_{i}+b)\geq 1 \Rightarrow

argmin_{w,b} \left \| w \right \| , \left \| w \right \|=(w1^{2}+w2^{2}+,,,+wn^{2})^{1/2}=(w^{\Gamma }w)^{1/2} \Rightarrow

argmin_{w,b}w^{\Gamma }w

求解最大margin值:

w^{\Gamma }w 最小值,需要对 w^{\Gamma }w 求偏导数,令其等于0,得到可能的极值点

对其求偏导(可以看成w可以看成(w1,w2,w3,,,wn),对 w^{\Gamma }w 求偏导是多元函数求偏导,对wi求偏导)

\frac{\partial w^{\Gamma }w}{\partial wi}=\frac{\partial (w1^{2}+w2^{2}+,,,wn^{2})}{\partial wi}=2wi \Rightarrow

\frac{\partial \frac{1}{2}w^{\Gamma }w}{\partial wi}=wi

故:

argmax_{w,b} \frac{2}{\left \| w \right \|} , y_{i}\times (w^{\Gamma }x_{i}+b)\geq 1 \Rightarrow

argmin_{w,b}\frac{1}{2}w^{\Gamma }w

问题转化:求 y_{i}\times (w^{\Gamma }x_{i}+b)\geq 1 条件下, \frac{1}{2}w^{\Gamma }w 的极值->寻找多元函数 不等式约束下 极值

拉格朗日乘子法:

优化-拉格朗日乘子法 - 知乎 (zhihu.com)

拉格朗日乘子法(Lagrange multipliers)是一种寻找多元函数 在一组约束下 极值 的方法。

通过引入拉格朗日乘子,可将有 d个变量与 k 个约束条件的最优化问题转化为具有 d+k个变量的无约束优化问题求解。

即:求f(x)在g(x)<=0的极值点。转化为:求L(x,u)=f(x)+ug(x)(u表示为拉格朗日乘子)的极值点。

求L(x,u)极值点的条件:(KKT条件)

\bigtriangledown _{x}L=\bigtriangledown f+u\bigtriangledown g=0

g(x)\leq 0

ug(x)= 0

u\geq 0

y_{i}\times (w^{\Gamma }x_{i}+b)\geq 1 条件下, \frac{1}{2}w^{\Gamma }w 的极值,数学语言表示:

argmin_{w,b}\frac{1}{2}w^{\Gamma }w

s.t. 1-yi(w^{\Gamma }xi+b)\leq 0

L(w,b,\alpha )=\frac{1}{2}w^{\Gamma }w+\sum \alpha _{i}[1-yi(w^{\Gamma }xi+b)]

为什么公式中出现求和符号?

L(x,u)=f(x)+ug(x)中:一个u对应一个x.

L(w,b,a)中w={w1,w2,,,wn},需要对应n个拉格朗日乘子。 L(w,b,\alpha )=\sum L(wi,b,\alpha i)

KKT条件:

\bigtriangledown _{w,b}L=0\Rightarrow \frac{\partial L}{\partial w}=w-\sum aiyixi=0 , \frac{\partial L}{\partial b}=\sum aiyi=0

1-yi(w^{\Gamma }xi+b)\leq 0 \Rightarrow yi(wxi+b)\geq 1

\alpha _{i}[1-yi(w^{\Gamma }xi+b)]=0

\alpha _{i}\geq 0

注意:对于不在两分类直线上的点( yi(wxi+b)> 1 ), \alpha i=0

如图所示:

\frac{\partial L}{\partial w}=w-\sum aiyixi=0\frac{\partial L}{\partial b}=\sum aiyi=0

带入 y=w^{\Gamma }x+b .

得:

y=\sum a_{i}y_{i}x_{i} ^{\Gamma }x+b .

\frac{\partial L}{\partial w}=w-\sum aiyixi=0\frac{\partial L}{\partial b}=\sum aiyi=0

代入 L(w,b,\alpha )=\frac{1}{2}w^{\Gamma }w+\sum \alpha _{i}[1-yi(w^{\Gamma }xi+b)]

得:

L(w,b,\alpha )=\frac{1}{2}\sum_{m}^{i=1}\sum_{m}^{j=1}a_{i}a_{j}y_{i}y_{j}x_{i}^{\Gamma }x_{j}+\sum_{m}^{i=1}a_{i}-\sum_{m}^{i=1}a_{i}y_{i}w^{\Gamma }x_{i} =-\frac{1}{2}\sum_{m}^{i=1}\sum_{m}^{j=1}a_{i}a_{j}y_{i}y_{j}x_{i}^{\Gamma }x_{j}+\sum_{m}^{i=1}a_{i}

( \frac{\partial L}{\partial b}=\sum aiyi=0 \neq \sum aiyix_{i}=0 )

L(w,b,\alpha )=\frac{1}{2}w^{\Gamma }w+\sum \alpha _{i}[1-yi(w^{\Gamma }xi+b)] ,

\alpha _{i}\geq 0

, 1-yi(w^{\Gamma }xi+b)\leq 0

得:当 \alpha 取零时,L取到最大值: maxL(w,b,\alpha )=\frac{1}{2}w^{\Gamma }w

得: min_{w,b}\frac{1}{2}w^{\Gamma }w=min_{w,b}max_{\alpha }L(w,b,\alpha )

由: max_{\alpha }L\geq L\geq min_{w,b}L

得: min_{w,b}max_{\alpha }L(w,b,\alpha )=L(w,b,\alpha )=max_{\alpha }min_{w,b}L(w,b,\alpha )

原问题转化: min_{w,b}\frac{1}{2}w^{\Gamma }ws.t. 1-yi(w^{\Gamma }xi+b)\leq 0\Rightarrow

min_{w,b}max_{\alpha }L(w,b,\alpha )s.t. 1-yi(w^{\Gamma }xi+b)\leq 0 , \alpha \geq 0 ,\sum \alpha _{i}y_{i}=0 \Rightarrow

max_{\alpha }min_{w,b}L(w,b,\alpha ) , s.t. 1-yi(w^{\Gamma }xi+b)\leq 0 , \alpha \geq 0 ,\sum \alpha _{i}y_{i}=0 \Rightarrow

max_{\alpha }-\frac{1}{2}\sum_{m}^{i=1}\sum_{m}^{j=1}a_{i}a_{j}y_{i}y_{j}x_{i}^{\Gamma }x_{j}+\sum_{m}^{i=1}a_{i} , s.t.\alpha \geq 0 ,\sum \alpha _{i}y_{i}=0

SVM模型:

y=w^{\Gamma }x+b=\sum_{i=1}^{m} a_{i}y_{i}x_{i} ^{\Gamma }x+b

由: \frac{\partial L}{\partial w}=w-\sum_{i=1}^{m} aiyixi=0

b=y_{j}-w^{\Gamma }x_{j}=y_{i}-\sum_{i=1}^{m} aiyixi^{\Gamma }x_{j}

xi表示特征,yi表示标签,均为已知。

\alpha _{i} 是唯一未知数。

且:对于不在两分类直线上的点( yi(wxi+b)> 1 ), \alpha i=0

说明边界外的 \alpha _{i} ,对w和b的求解不起作用;在边界上的点X,对w和b的求解有作用,称为支持向量。

求解拉格朗日乘子 \alpha _{i}

\alpha _{i} 取值满足:

max_{\alpha }-\frac{1}{2}\sum_{m}^{i=1}\sum_{m}^{j=1}a_{i}a_{j}y_{i}y_{j}x_{i}^{\Gamma }x_{j}+\sum_{m}^{i=1}a_{i}s.t.\alpha \geq 0 ,\sum \alpha _{i}y_{i}=0 时,取到最大间隔margin,此时的直线 y=\sum a_{i}y_{i}x_{i} ^{\Gamma }x+b 的拟合效果最好。

如何求解 \alpha _{i}

1.计算实例:

6-求解决策方程_哔哩哔哩_bilibili

2.求解算法--SMO
求解问题:

max_{\alpha }-\frac{1}{2}\sum_{m}^{i=1}\sum_{m}^{j=1}a_{i}a_{j}y_{i}y_{j}x_{i}^{\Gamma }x_{j}+\sum_{m}^{i=1}a_{i}s.t.\alpha \geq 0 ,\sum \alpha _{i}y_{i}=0

工作原理:

1.每次选择满足 s.t.\alpha \geq 0 ,\sum \alpha _{i}y_{i}=0 的两个变量 \alpha _{i},\alpha _{j}

2.固定 \alpha _{i},\alpha _{j} 以外的 \alpha 参数(固定 \alpha 参数表示,给 \alpha _{i},\alpha _{j} 以外的 \alpha 赋值,只把 \alpha _{i},\alpha _{j} 作为变量。),求解 max_{\alpha }-\frac{1}{2}\sum_{m}^{i=1}\sum_{m}^{j=1}a_{i}a_{j}y_{i}y_{j}x_{i}^{\Gamma }x_{j}+\sum_{m}^{i=1}a_{i} 来更新 \alpha _{i},\alpha _{j}

为什么每次要选择两个变量来更新,而不是一个变量呢?

s.t.\alpha \geq 0 ,\sum \alpha _{i}y_{i}=0 ,如果我们每次只改变一个 \alpha ,可能不满足 \sum \alpha _{i}y_{i}=0

代码:

1.数据集创建(和 基于Logistic回归实现二分类-CSDN博客 中创建的方式相同)

def boolean_int(y):
    return [1 if cell else -1 for cell in  y]
def createtraindataset():

    np.random.seed(0)
    n_samples=100
    X=np.random.randn(n_samples,2)
    y=np.random.randint(2,size=100)
    #featur2>2*feature1时 y为1,否则y为-1
    y=(X[:,1]>2*X[:,0].astype(int))
    train_y=np.array(boolean_int(y)).reshape(100,1)
    train_X = X
    print("y",train_y)
    plt.scatter(X[y==0,0],X[y==0,1],c='r',marker='x',label='Class 1')
    plt.scatter(X[y==1,0],X[y==1,1],c='b',marker='o',label='Class -1')

    plt.xlabel('Feature 1')
    plt.ylabel('Feature 2')
    plt.legend()
    plt.title("Classification Dataset")
    plt.show()
    return train_X,train_y

2.简化版SMO实现:(详解待续)

#m是a参数的总数,i是第一个ai值,选择第二个aj值
def select_random_index(m, i):
    j = i
    while j == i:
        j = np.random.randint(0, m)
    return j
#调整alpha的值
def clip_alpha(alpha, L, H):
    if alpha < L:
        return L
    elif alpha > H:
        return H
    else:
        return alpha

def smo_simple(data, labels, C, tol, max_passes):
    m, n = data.shape
    alphas = np.zeros(m)
    b = 0
    passes = 0

    while passes < max_passes:
        #表示a是否被改变?
        num_changed_alphas = 0
        for i in range(m):
            # 计算损失
            Ei = np.dot(alphas * labels, np.dot(data, data[i])) + b - labels[i]
            #判断是否a可以被优化
            if (labels[i] * Ei < -tol and alphas[i] < C) or (labels[i] * Ei > tol and alphas[i] > 0):
                #随机选择aj
                j = select_random_index(m, i)
                Ej = np.dot(alphas * labels, np.dot(data, data[j])) + b - labels[j]
                alpha_i_old, alpha_j_old = alphas[i], alphas[j]
                if labels[i] != labels[j]:
                    L = max(0, alphas[j] - alphas[i])
                    H = min(C, C + alphas[j] - alphas[i])
                else:
                    L = max(0, alphas[j] + alphas[i] - C)
                    H = min(C, alphas[j] + alphas[i])
                if L == H:
                    continue
                eta = 2 * np.dot(data[i], data[j]) - np.dot(data[i], data[i]) - np.dot(data[j], data[j])
                if eta >= 0:
                    continue
                alphas[j] -= labels[j] * (Ei - Ej) / eta
                alphas[j] = clip_alpha(alphas[j], L, H)
                if abs(alphas[j] - alpha_j_old) < 1e-5:
                    continue
                alphas[i] += labels[i] * labels[j] * (alpha_j_old - alphas[j])
                b1 = b - Ei - labels[i] * (alphas[i] - alpha_i_old) * np.dot(data[i], data[i]) - labels[j] * (alphas[j] - alpha_j_old) * np.dot(data[i], data[j])
                b2 = b - Ej - labels[i] * (alphas[i] - alpha_i_old) * np.dot(data[i], data[j]) - labels[j] * (alphas[j] - alpha_j_old) * np.dot(data[j], data[j])
                if 0 < alphas[i] < C:
                    b = b1
                elif 0 < alphas[j] < C:
                    b = b2
                else:
                    b = (b1 + b2) / 2
                num_changed_alphas += 1
        if num_changed_alphas == 0:
            passes += 1
        else:
            passes = 0
    return alphas, b

data,labels = createtraindataset()
alphas, b = smo_simple(data, labels, 0.6, 0.001, 40)
print("alphas",alphas,"b",b)

小结:

1.Logistic算法和SVM的区别和联系:

模型不同: y=\sum a_{i}y_{i}x_{i} ^{\Gamma }x+by=w^{\Gamma }x+b ,Logistic模型更简单,SVM更复杂。

决策边界不同,都能解决分类问题:Logistic解决二分类问题,得到分类直线;SVM可以解决二分类,使用间隔最大化确定一个决策面。

2.上述解释的SVM算法属于硬间隔SVM,在实际应用中可能存在问题:

如下,标圆圈的样本处于决策边界以内,而且难以被决策直线完全区分;这些样本可能是噪声。

就算能够完全可分,也可能出现过拟合。

为了更加符合实际,需要允许少量样本不满足约束。

即:

yi(wxi+b)\geq 1 \Rightarrow yi(wxi+b)\geq 1-\varepsilon

\varepsilon 表示松弛向量, \varepsilon >0

argmin_{w,b}\frac{1}{2}w^{\Gamma }ws.t.yi(wxi+b)\geq 1-\varepsilon

argmin_{w,b}\frac{1}{2}w^{\Gamma }w+C\sum_{i=1}^{m}\varepsilon _{i} ,

s.t.s.t.yi(wxi+b)\geq 1-\varepsilon ,\varepsilon >0,C\geq 0

C很大,margin很大,决策面大,分类不太严格;反之分类很严格。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SVM原理理解 的相关文章

随机推荐

  • Springboot+FastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)

    场景 若依前后端分离版手把手教你本地搭建环境并运行项目 若依前后端分离版手把手教你本地搭建环境并运行项目 前后端分离项目本地运行 CSDN博客 在上面搭建SpringBoot项目的基础上 并且在项目中引入fastjson hutool lo
  • 四种数据库执行脚本文件导入数据的方式

    执行脚本文件的方式 Mysql mysql执行sql脚本文件的方法 1 在命令行输入mysql uroot h10 235 5 55 p 123456 P3306 lt F hello niuzi sql 2 在命令行输入 source F
  • maven上传jar包到代码仓库

    一 前言 一般被引用的包开发都是要求放在nexus仓库中 等到有jar包服务需要引用该包的时候直接从nexus仓库中获取即可 实现了该引用包的公用 二 代码配置 编辑代码中的pom xml文件配置 vi pom xml
  • Sybase死锁问题查询与解决

    Sybase死锁问题查询与解决 sp who 查看锁表情况 sp lock 查看被锁的表的id号 查看数据库lock配置 sp config number of lock 数据库锁资源使用情况 sp lock 检查锁资源使用情况 selec
  • 用RPA轻松获取亚马逊销售订单详细信息,提升业务效率!

    在电商行业中 获取销售订单的详细信息是一项重要且繁琐的任务 传统的方法是手动登录亚马逊平台 逐个查看订单并复制粘贴相关信息 这不仅耗费大量时间和人力资源 还容易出现错误和遗漏 八爪鱼rpa作为一款强大的机器人流程自动化工具可以帮助企业自动化
  • Linux环境变量执行顺序

    环境变量执行顺序 etc profile etc profile d sh bash profile bashrc etc bashrc
  • 生意参谋竞品分析RPA机器人,让你在商战中立于不败之地

    作为电商企业 了解竞争对手的动态和策略对于制定有效的竞争策略至关重要 但是竞对分析是一项繁琐而费时的工作 往往需要大量的人力和时间投入 在这样的情况下 八爪鱼rpa机器人的出现为电商企业带来了新的解决方案 rpa机器人是一种基于自动化软件的
  • mysql执行带函数命令的sql脚本报错

    一 前言 开发给了一个带函数的sql文件让我执行 但是执行导入时报以下错误 This function has none of DETERMINISTIC NO SQL or READS SQL DATA in its declaratio
  • 万字整理Redis核心知识点

    1 Redis介绍 Redis 是 NoSQL 但是可处理 1 秒 10w 的并发 数据都在内存中 使用 java 对 redis 进行操作类似 jdbc 接口标准对 mysql 有各类实现他的实现类 我们常用的是 druid 其中对 re
  • mysql开启查询日志

    mysql默认不开启查询日志 可以通过命令查询 show VARIABLES LIKE general 开启查询日志 并更改日志存放目录 不过存放的目录一定要有权限不然会报错 手动创建一下log目录下的mysql目录并赋予权限 mkdir
  • 客户案例 | 博睿数据全面保障昆仑银行业务稳定性

    新兴市场和不断增长的客户群体需求的崛起 正推动着基于互联网模式的财富陪伴 财富管理和财富生态的全新业务范式的形成 昆仑银行是一家总部位于北京 分支机构遍布全国性的城商行 提供广泛的金融产品和服务 主要包括个人银行业务 企业金融服务 资产管理
  • final的安全发布

    final的安全发布 两个关键字 发布 安全 所谓发布通俗一点的理解就是创建一个对象 使这个对象能被当前范围之外的代码所使用 比如Object o new Object 然后接下来使用对象o 但是对于普通变量的创建 之前分析过 大致分为三个
  • Postgresql在Windows中使用pg_dump实现数据库(指定表)的导出与导入

    场景 Windows中通过bat定时执行命令和mysqldump实现数据库备份 Windows中通过bat定时执行命令和mysqldump实现数据库备份 mysqldump bat CSDN博客 Windows上通过bat实现不同数据库之间
  • 程序员那么卷,就业那么难,为什么你还当一名程序员

    前言 这是很早之前看到的一个问题 那时候应该也和今年的情形一样 只不过没有现在这么严重 因为以前只是企业一方面的问题导致的裁员潮流 而到了2023年就不仅仅是因为疫情之类的原因导致企业不景气的问题 更多的是程序员太多了 是的相比较与10年轻
  • 用RPA解放人力,实现未发货订单超时预警

    在电商行业中 未发货订单的处理是一个重要的环节 对于电商企业而言 及时发货是保证客户满意度的关键 然而 由于订单数量庞大 人工处理订单需要耗费大量时间和人力资源 容易出现遗漏和延误的情况 影响客户体验和企业形象 在面对未发货订单超时预警这一
  • SpringBoot+线程池实现高频调用http接口并多线程解析json数据

    场景 Springboot FastJson实现解析第三方http接口json数据为实体类 时间格式化转换 字段包含中文 Springboot FastJson实现解析第三方http接口json数据为实体类 时间格式化转换 字段包含中文 C
  • 学籍服务平台省内转学批量自动申请

    学籍服务平台是指用于管理学生学籍信息的在线平台 包括学生的基本信息 学习成绩 奖惩记录等 在学籍服务平台上 学生可以进行选课 申请转学等操作 然而 目前的学籍服务平台存在一些问题 繁琐的操作流程 目前的学籍服务平台上 学生申请转学需要填写大
  • 用RPA轻松实现课程自动通知

    在教育领域 课程通知是一项重要的工作 但通常需要教师手动发送通知 记录学生反馈等繁琐的操作 这不仅耗费教师大量时间和精力 还容易出现遗漏或错误 为了提高效率和减轻教师的工作负担 可以使用八爪鱼rpa实现课程自动通知 八爪鱼rpa是一款强大的
  • mitm抓包实践---可用于投票、日常类任务运用

    文章目录 一 安装mitm 二 证书导入 三 抓包 三 后话补充 一 安装mitm 第一种方式 官网下载 https mitmproxy org downloads 第二种方式 py库安装 pip install mitmproxy 我是第
  • SVM原理理解

    目录 概念推导 共识 距离两个点集距离最大的分类直线的泛化能力更好 更能适应复杂数据 怎么能让margin最大 最大化margin公式 求解最大margin值 拉格朗日乘子法 为什么公式中出现求和符号 SVM模型 求解拉格朗日乘子 如何求解