精华内容
下载资源
问答
  • 支持向量机SVM、支持向量回归SVR详细推导

    万次阅读 多人点赞 2019-06-30 09:31:52
    文章详细介绍了支持向量机SVM及其拓展,支持向量回归SVR.并从线性分类和非线性分类的角度出发,详细推导了硬间隔、软间隔和核函数的支持向量机。

    目录


    一、SVM简介

    简介:SVM的英文全称是Support Vector Machines,中文叫支持向量机。支持向量机是我们用于分类的一种算法。支持向量也可以用于回归,此时叫支持向量回归(Support Vector Regression,简称SVR)。

    发展历史:1963年,ATE-T Bell实验室研究小组在Vanpik的领导下,首次提出了支持向量机(SVM)理论方法。但在当时,SVM在数学上不能明晰地表示,人们对模式识别问题的研究很不完善,因此SVM的研究没有得到进一步的发展与重视。 1971年,Kimeldorf提出了使用线性不等约束重新构造SV的核空间,使一部分线性不可分的问题得到了解决。20世纪90年代,一个比较完善的理论体系——统计学习理论(Statistical Learning Theory,SLT)形成了,此时一些新兴的机器学习方法(如神经网络等)的研究遇到了一些重大的困难,比如欠学习与过学习问题、如何确定网络结构的问题、局部极小点问题等,这两方面的因素使得SVM迅速发展和完善,并在很多问题的解决中表现出许多特有优势,而且能够推广应用到函数拟合等其他机器学习问题中,从此迅速发展了起来,目前已经成功地在许多领域里得到了成功应用。

    思想:SVM的主要思想可以概括为如下两点:
    (1)它是针对线性可分的情况进行分析的。对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间,使其线性可分,从而使得在高维特征空间中采用线性算法对样本的非线性特征进行线性分析成为可能。
    (2)它基于结构风险最小化理论,在特征空间中构建最优分类面,使得学习器能够得到全局最优化,并且使整个样本空间的期望风险以某个概率满足一定上界。
      从上面的两点基本思想来看,SVM没有使用传统的推导过程,简化了通常的分类和回归等问题;少数的支持向量确定了SVM 的最终决策函数,计算的复杂性取决于支持向量,而不是整个样本空间,这就可以避免“维数灾难”。少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本,而且注定了该方法不但算法简单,而且具有较好的“鲁棒”性。

    数学基础:拉格朗日乘子法、对偶问题、KKT条件

    应用:人脸检测、验证和识别,说话人/语音识别,文字/手写体识别 ,图像处理等等

    二、推导过程

    SVM有三宝:间隔、对偶、核技巧。
    遇到的问题大致可以分为线性可分和线性不可分的情况,因此,我将分开介绍:

    1.线性可分

    1.1 硬间隔

    1. 基本模型

    训练样本集 D = { ( x 1 , y 1 ) , ( x 1 , y 1 ) , … … , ( x m , y m ) } , y i = 1 或 y i = − 1 D=\{(x_{1},y_{1}),(x_{1},y_{1}),……,(x_{m},y_{m})\},y_{i}=1或y_{i}=-1 D={(x1,y1),(x1,y1),(xm,ym)},yi=1yi=1,分类学习的思想:找一个划分超平面,将不同类别的样本分开。

    在这里插入图片描述
    划分的超平面很多,我们去找哪一个?直观上看,我们应该找位于两类训练样本“正中间”的超平面。

    在样本空间中,划分超平面可通过如下线性方程来描述: w T x + b = 0 {\color{Red} w^{T}x+b=0} wTx+b=0
    w = ( w 1 ; w 2 ; … ; w d ) w=(w_{1};w_{2};…;w_{d}) w=(w1;w2;;wd)为法向量,决定了超平面的方向;b为位移项,决定了超平面与原点之间的距离。
    显然,划分超平面可被法向量w和位移b确定,下面我们将其记为(w,b)。 样本空间中任意点x到超平面(w,b)的距离可写为 r = ∣ w T x + b ∣ ∥ w ∥ {\color{Red} r=\frac{\left | w^{T}x+b \right |}{\left \| w \right \|}} r=wwTx+b
    假设超平面(w,b)能将训练样本正确分类,即对 ( x i , y i ) ∈ D (x_{i},y_{i} )\in D (xi,yi)D,若 y i = + 1 y_{i}=+1 yi=+1,则 w T x i + b &gt; 0 w^{T}x_{i}+b&gt;0 wTxi+b>0.否则: w T x i + b &lt; 0 w^{T}x_{i}+b&lt;0 wTxi+b<0,令
    在这里插入图片描述
    对应如下:
    在这里插入图片描述
    问题只与投影方向有关,一旦方向定了,通过缩放w和b,总能使上式成立。所以,求超平面的问题转化为求w和b的问题。

    如下图所示,距离超平面最近的这几个训练样本点使上式的等号成立,它们被称为“支持向量”(support vector),两个异类支持向量机到超平面的距离之和为 : r = ∣ w T x + b ∣ ∥ w ∥ {\color{Red} r=\frac{\left | w^{T}x+b \right |}{\left \| w \right \|}} r=wwTx+b
    在这里插入图片描述
    上图中,两条虚线之间的距离为: γ = 2 ∥ w ∥ \gamma =\frac{2}{\left \| w \right \|} γ=w2,将其称之为间隔。欲找到具有“最大间隔”(maximum margin)的划分超平面,也就是找到参数w和b,使得γ最大,即:
    在这里插入图片描述
    上面的约束等价于如下约束:
    在这里插入图片描述
    即支持向量机(Support Vector Machine,简称SVM)的基本型。

    2. 模型求解

    上式中,其中w和b是模型参数。注意到上式本身是一个凸二次规划问题,能直接用现成的优化计算包求解,但我们可以有更高效的办法,可以求出闭式解。
    对式使用拉格朗日乘子法可得到其“对偶问题”(dual problem):
    在这里插入图片描述
    其中 α = ( α 1 ; α 2 ; … ; α m ) \alpha =(\alpha _{1};\alpha _{2};…;\alpha _{m}) α=(α1;α2;;αm),令 L ( w , b , α ) L(w,b,\alpha) L(w,b,α)对w和b的偏导数等于零得:
    在这里插入图片描述
    将第一个式代入L,即可将 L ( w , b , α ) L(w,b,α) L(w,b,α)中的w和b消去,再考虑第二个式的约束,就得到对偶问题:
    在这里插入图片描述
    解出α后,求出w和b即可得到模型:
    在这里插入图片描述
    从对偶问题解出的 α i α_i αi是拉格朗日乘子,它恰对应着训练样本 ( x i , y i ) (x_i,y_i) (xi,yi)。注意到支持向量机最优化问题中有不等式约束,因此上述过程需满足KKT条件,即要求:
    在这里插入图片描述
    最后一个条件,对任意训练样本 ( x i , y i ) (x_i,y_i) (xi,yi),总有 α i = 0 \alpha _{i}=0 αi=0 y i f ( x i ) = 1 y_{i}f(x_{i})=1 yif(xi)=1.
    则有以下两种情况:
    (1) 若 α i = 0 α_i=0 αi=0,则该样本将不会在求和中出现,不会对f(x)有任何影响;
    (2) 若 α i &gt; 0 α_i&gt;0 αi>0,则必有 y i f ( x i ) = 1 y_i f(x_i )=1 yif(xi)=1,位于最大间隔边界上,是一个支持向量。
    在这里插入图片描述
    这显示出支持向量机的一个重要性质:训练完成后,大部分的训练样本都不需保留,最终模型仅与支持向量有关.

    如何求解 α i α_i αi:二次规划问题,通过SMO算法求解。
    基本思路:每次选择两个变量α_i和α_j,并固定其他参数。这样,在参数初始化后,SMO不断执行如下两个步骤直至收敛:
    (1) 选取一对需更新的变量 α i α_i αi α j α_j αj
    (2) 固定 α i α_i αi α j α_j αj以外的参数,求解式获得更新后的 α i α_i αi α j α_j αj.

    分析:KKT条件违背的程度越大,则变量更新后可能导致的且标函数值减幅越大。
    第一个变量:SMO先选取违背KKT条件程度最大的变量。
    第二个变量:应选择一个使且标函数值减小最快的变量,使选取的两变量所对应样本之间的间隔最大。

    为什么更新两个,而非一个?原因是,若仅选择一个,则其可有其他变量导出。因此更新两个。
    在这里插入图片描述
    SMO算法之所以高效,是由于在固定其他参数后,仅优化两个参数的过程能做到非常高效
    之前的优化问题:
    在这里插入图片描述
    仅考虑 α i α_i αi α j α_j αj时,式中的约束可重写为:
    在这里插入图片描述
    其中c是使 ∑ i = 0 m α i y i = 0 ∑_{i=0}^mα_i y_i=0 i=0mαiyi=0成立的常数。用 α i y i + α j y j = c α_i y_i+α_j y_j=c αiyi+αjyj=c消去上式中的变量 α j α_j αj,则得到一个关于 α i α_i αi的单变量二次规划问题,仅有的约束是 α i ≥ 0 α_i≥0 αi0
    不难发现,这样的二次规划问题具有闭式解,于是不必调用数值优化算法即可高效地计算出更新后的 α i α_i αi α j α_j αj.

    确定偏移项b
    対任意支持向量 ( x i , y k ) (x_i,y_k) (xi,yk) 都有 y s f ( x s ) = 1 y_s f(x_s )=1 ysf(xs)=1,即
    在这里插入图片描述
    其中 S = { i ∣ α i &gt; 0 , i = 1 , 2 , … , m } S=\{i|α_{i}&gt;0,i=1,2,…,m\} S={iαi>0,i=1,2,,m} 为所有支持向量的下标集,但现实任务中常采用一种更鲁棒的做法:使用所有支持向量求解的平均值
    在这里插入图片描述

    1.2 软间隔

    在现实任务中往往很难确定合适的核函数使得训练样本在特征空间中线性可分。
    缓解该问题的一个办法是允许支持向量机在一-些样本上出错.为此,要引入“软间隔”的概念,如图所示:
    在这里插入图片描述
    在最大化间隔的同时,不满足约束的样本应尽可能少.于是,优化目标可写为:
    在这里插入图片描述
    即,在间隔上加一个损失,允许错分,但是损失应该尽量小。

    (1)0/1损失函数
    在这里插入图片描述
    显然,当C为无穷大时,迫使所有样本均满足约束,于是等价于经典支持向量机方法;
    当C取有限值时,允许一些样本不满足约束。
    然而, l 0 / 1 l_{0/1} l0/1非凸、非连续,不易直接求解。人们通常用其他一些函数来代替 l 0 / 1 l_{0/1} l0/1,称为“替代损失”(surrogate loss),通常是凸的连续函数且是 l 0 / 1 l_{0/1} l0/1的上界。

    (2)hinge损失函数
    若采用hinge损失,则代价函数变成:
    在这里插入图片描述
    引入“松弛变量”(slack variables) ξ i ≥ 0 ξ_i≥0 ξi0,可将重写为:
    在这里插入图片描述
    这就是常用的“软间隔支持向量机”。
    (3)其他损失函数

    在这里插入图片描述
    损失函数:
    在这里插入图片描述
    标准:>0时,尽可能小,<0时,尽可能大。从而保证分类的准确性。

    2.线性不可分(核函数)

    我们假设训练样本是线性可分的,超平面能将训练样本正确分类。然而在现实任务中,原始样本空间内也许并不存在一个能正确划分两类样本的超平面。例如图中的“异或”问题就不是线性可分的.
    在这里插入图片描述
    对这样的问题,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。

    例如在图中,若将原始的二维空间映射到一个合适的三维空间,就能找到一个合适的划分超平面。
    在这里插入图片描述
    如何映射?有没有通用的办法?

    幸运的是,如果原始空间是有限维,即属性数有限,那么一定存在一个高维特征空间使样本可分。 令∅(x)表示将x映射后的特征向量,于是,在特征空间中划分超平面所对应的模型可表示为:
    在这里插入图片描述
    其中w和b是模型参数。
    问题转化为:
    在这里插入图片描述
    其对偶问题是:
    在这里插入图片描述
    求解式涉及到计算 ϕ ( x i ) T ϕ ( x j ) ϕ(x_i )^T ϕ(x_j ) ϕ(xi)Tϕ(xj),这是样本 x i x_i xi x j x_j xj映射到特征空间之后的内积。
    由于特征空间维数可能很高,甚至可能是无穷维,因此直接计算 ϕ ( x i ) T ϕ ( x j ) ϕ(x_i )^T ϕ(x_j ) ϕ(xi)Tϕ(xj)通常是困难的。
    为了避开这个障碍,可以设想这样一个函数:
    在这里插入图片描述
    x i x_i xi x j x_j xj在特征空间的内积等于它们在原始样本空间中通过函数κ(∙,∙ )计算的结果。

    有了这样的函数,我们就不必直接去计算高维甚至无穷维特征空间中的内积。

    于是式可重写为:
    在这里插入图片描述
    于是,求解后即可得到:
    在这里插入图片描述
    这里的函数κ(∙,∙ )就是“核函数”(kernel function)。上式显示出模型最优解可通过训练样本的核函数展开,这一展式亦称“支持向量展式”(support vector expansion)。

    问题:显然,若已知合适映射ϕ(∙)的具体形式,则可写出核函数κ(∙,∙ ),但在现实任务中我们通常不知道ϕ(∙)是什么形式。

    合适的核函数是否一定存在呢?什么样的函数能做核函数呢?
    答案是肯定的。

    定理(核函数) 令χ为输入空间,κ(∙,∙ )是定义在 χ × χ χ×χ χ×χ上的对称函数,则κ是核函数当且仅当对于任意数据 D = { x 1 , x 2 , … , x m } D=\{x_{1},x_{2},…,x_{m}\} D={x1,x2,,xm},“核矩阵”(kernel matrix)K总是半正定的:
    在这里插入图片描述
    定理表明,只要一个对称函数所对应的核矩阵半正定,它就能作为核函数使用。

    在不知道特征映射的形式时,我们并不知道什么样的核函数是合适的,“核函数选择”成为支持向量机的最大变数。

    通常,可选择如下核函数,选择性能最优者作为某一问题的核函数:
    在这里插入图片描述
    注意:当d=1时,高斯核也成为径向基核函数(RBF)核。

    此外,还可通过函数组合得到,例如:
    (1) 若κ_1和κ_2为核函数,则对于任意正数 γ 1 、 γ 2 γ_1、γ_2 γ1γ2,其线性组合也是核函数:
    γ 1 κ 1 + γ 2 κ 2 γ_1 κ_1+γ_2 κ_2 γ1κ1+γ2κ2

    (2) 若κ_1和κ_2为核函数,则核函数的直积也是核函数;
    κ 1 ⊗ κ 2 ( x , z ) = κ 1 ( x , z ) κ 2 ( x , z ) κ_1 ⊗κ_2 (x,z)=κ_1 ( x,z)κ_2 (x,z) κ1κ2(x,z)=κ1(x,z)κ2(x,z)

    (3) 若κ_1为核函数,则对于任意函数g(x),也是核函数;
    κ ( x , z ) = g ( x ) κ 1 ( x , z ) g ( z ) κ(x,z)=g(x)κ_1 (x,z)g (z) κ(x,z)=g(x)κ1(x,z)g(z)

    3.SVR支持向量回归

    给定训练样本 D = { ( x 1 , y 1 ) , ( x 1 , y 1 ) , … … , ( x m , y m ) } , y i ∈ R D=\{(x_{1},y_{1}),(x_{1},y_{1}),……,(x_{m},y_{m})\},y_{i}∈R D={(x1,y1),(x1,y1),(xm,ym)},yiR,希望学得一个回归模型,使得 f ( x ) f(x) f(x) y y y尽可能接近, w w w b b b是待确定的模型参数。
    在这里插入图片描述
    假设我们能容忍 f ( x ) f(x) f(x) y y y之间最多有 ϵ ϵ ϵ的偏差,即仅当 f ( x ) f(x) f(x) y y y之间的差别绝对值大于 ϵ ϵ ϵ时才计算损失.

    于是,SVR问题可形式化为:
    在这里插入图片描述
    其中C为正则化常数, l ϵ l_ϵ lϵ是图中所示的ϵ -不敏感损失(ϵ -insensitive loss)函数:
    在这里插入图片描述
    引入松弛变量 ξ i ξ_i ξi ( ξ i ) (ξ_i ) (ξi),可将式重写为:
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190630091142826.png
    在这里插入图片描述
    引入拉格朗日乘子 μ i μ_i μi
    在这里插入图片描述
    再令 L ( w , b , α , α ^ , ξ , ξ ^ , μ , μ ^ ) L(w,b,\alpha ,\hat{\alpha },\xi ,\hat{\xi },\mu ,\hat{\mu }) L(w,b,α,α^,ξ,ξ^,μ,μ^) w w w b b b ξ i ξ_i ξi ξ i ^ \hat{ξ_i } ξi^ 的偏导为零可得:
    在这里插入图片描述
    上述过程中需满足KKT条件,即要求:
    在这里插入图片描述
    SVR的解形如
    在这里插入图片描述
    能使式中的 ( α i ^ − α i ) ≠ 0 (\hat{\alpha_i}-α_i )\neq 0 (αi^αi)̸=0的样本即为SVR的支持向量,它付必落在ϵ-同隔带之外.显然, SVR的支持向量仅是训练样本的一部分,即其解仍具有稀疏性.

    0 &lt; α i &lt; C 0&lt;α_i&lt;C 0<αi<C,则必有 ξ i = 0 ξ_i=0 ξi=0
    在这里插入图片描述
    实践中常采用一中更鲁棒的办法:迭取多个满足条件 0 &lt; α i &lt; C 0&lt;α_i&lt;C 0<αi<C的样本求解b后取平均値。

    若考虑特征映射形式,则:
    在这里插入图片描述
    则SVR可表示为:
    在这里插入图片描述
    其中 K ( x i T x ) = ∅ ( x i ) T ∅ ( x j ) K(x_i^T x)=∅(x_i )^T∅(x_j ) K(xiTx)=(xi)T(xj)为核函数。

    展开全文
  • Unity 向量转向 记录

    千次阅读 2018-05-23 17:12:04
    unity 提供常用的旋转: ... //目标(target)所在的位置(方向,距离)即向量 减 自身(move)所在的位置 //所得向量差 v单位化,即到目标方向。 Vector3 vT = target.localPosition - move.localPosition; ...

    unity 提供常用的旋转:

    //从物体所在方向 转向目标所在的方向 主要是旋转物体Z轴
     Quaternion.LookRotation();
     //目标(target)所在的位置(方向,距离)即向量 减 自身(move)所在的位置
     //所得向量差 v单位化,即到目标方向。
     Vector3 vT = target.localPosition - move.localPosition;
     move.localRotation=  Quaternion.LookRotation(vT.normalized);

    //从向量A 旋转到 向量B
    Quaternion.FromToRotation();
    UGUI 中 箭头方向 跟随目标点移动 始终指向目标点 可以使用改方法

    move是Image,需要构建一个方向,即和image的形状比如箭头方向一致
    构建向量vS = Vector3.right - move.localPosition;

    Vector3 vS = Vector3.right - move.localPosition;
    Vector3 vT = target.localPosition - move.localPosition;     
    move.localRotation=  Quaternion.FromToRotation(vS.normalized,vT.normalized);
    展开全文
  • C++_vector操作

    万次阅读 多人点赞 2019-05-28 11:24:15
    vector说明: vector是向量类型,可以容纳许多类型的数据,因此也...//定义具有10个整型元素的向量(尖括号元素类型名,它可以是任何合法的数据类型),不具有初值,其值不确定 方式2. vector<int>a...

    1. vector:

    1.1 vector 说明

    • vector是向量类型,可以容纳许多类型的数据,因此也被称为容器
    • (可以理解为动态数组,是封装好了的类)
    • 进行vector操作前应添加头文件#include <vector>

    1.2 vector初始化:

    方式1.

    //定义具有10个整型元素的向量(尖括号为元素类型名,它可以是任何合法的数据类型),不具有初值,其值不确定
    vector<int>a(10);
    

    方式2.

    //定义具有10个整型元素的向量,且给出的每个元素初值为1
    vector<int>a(10,1);
    

    方式3.

    //用向量b给向量a赋值,a的值完全等价于b的值
    vector<int>a(b);
    

    方式4.

    //将向量b中从0-2(共三个)的元素赋值给a,a的类型为int型
    vector<int>a(b.begin(),b.begin+3);
    

    方式5.

     //从数组中获得初值
    int b[7]={1,2,3,4,5,6,7};
    vector<int> a(b,b+7;
    

    1.3 vector对象的常用内置函数使用(举例说明)

    #include<vector>
    vector<int> a,b;
    //b为向量,将b的0-2个元素赋值给向量a
    a.assign(b.begin(),b.begin()+3);
    //a含有4个值为2的元素
    a.assign(4,2);
    //返回a的最后一个元素
    a.back();
    //返回a的第一个元素
    a.front();
    //返回a的第i元素,当且仅当a存在
    a[i];
    //清空a中的元素
    a.clear();
    //判断a是否为空,空则返回true,非空则返回false
    a.empty();
    //删除a向量的最后一个元素
    a.pop_back();
    //删除a中第一个(从第0个算起)到第二个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)结束
    a.erase(a.begin()+1,a.begin()+3);
    //在a的最后一个向量后插入一个元素,其值为5
    a.push_back(5);
    //在a的第一个元素(从第0个算起)位置插入数值5,
    a.insert(a.begin()+1,5);
    //在a的第一个元素(从第0个算起)位置插入3个数,其值都为5
    a.insert(a.begin()+1,3,5);
    //b为数组,在a的第一个元素(从第0个元素算起)的位置插入b的第三个元素到第5个元素(不包括b+6)
    a.insert(a.begin()+1,b+3,b+6);
    //返回a中元素的个数
    a.size();
    //返回a在内存中总共可以容纳的元素个数
    a.capacity();
    //将a的现有元素个数调整至10个,多则删,少则补,其值随机
    a.resize(10);
    //将a的现有元素个数调整至10个,多则删,少则补,其值为2
    a.resize(10,2);
    //将a的容量扩充至100,
    a.reserve(100);
    //b为向量,将a中的元素和b中的元素整体交换
    a.swap(b);
    //b为向量,向量的比较操作还有 != >= > <= <
    a==b;
    

    2. 顺序访问vector的几种方式,举例说明

    2.1. 对向量a添加元素的几种方式

    1.向向量a中添加元素

    vector<int>a;
    for(int i=0;i<10;++i){a.push_back(i);}
    

    2.从数组中选择元素向向量中添加

    int a[6]={1,2,3,4,5,6};
    vector<int> b;
    for(int i=0;i<=4;++i){b.push_back(a[i]);}
    

    3.从现有向量中选择元素向向量中添加

    int a[6]={1,2,3,4,5,6};
    vector<int>b;
    vector<int>c(a,a+4);
    for(vector<int>::iterator it=c.begin();it<c.end();++it)
    {
    	b.push_back(*it);
    }
    

    4.从文件中读取元素向向量中添加

    ifstream in("data.txt");
    vector<int>a;
    for(int i;in>>i){a.push_back(i);}
    

    5.常见错误赋值方式

    vector<int>a;
    for(int i=0;i<10;++i){a[i]=i;}//下标只能用来获取已经存在的元素
    

    2.2 从向量中读取元素

    1.通过下标方式获取

    int a[6]={1,2,3,4,5,6};
    vector<int>b(a,a+4);
    for(int i=0;i<=b.size()-1;++i){cout<<b[i]<<endl;}
    

    2.通过迭代器方式读取

     int a[6]={1,2,3,4,5,6};
     vector<int>b(a,a+4);
     for(vector<int>::iterator it=b.begin();it!=b.end();it++){cout<<*it<<"  ";}
    

    3.几个常用的算法

     #include<algorithm>
     //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列
     sort(a.begin(),a.end());
     //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
     reverse(a.begin(),a.end());
      //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
     copy(a.begin(),a.end(),b.begin()+1);
     //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置
      find(a.begin(),a.end(),10);
    

    4. 写在最后

    本人已经毕业半年有余,深刻感受到生活不易,之前更新博客的时候从没想到自己的博客会有这么多人喜欢,在这里感谢各位朋友的信任,同时也祝福各位同学前程似锦,学业进步!

    同时,在这里出售全套的文字学习资料:

    具体包括《C primer plus》原文、练习及源代码;C语言具体各部分详解书籍;

    《C++ primer plus》原文、练习及源代码;各种C++相关书籍;

    《数据结构 C++ 语言描述》《数据结构 C 语言描述》《数据结构》严蔚敏版;数据结构相关书籍;

    《powershell 入门教程》;《剑指offer 第二版》原文及源代码;《深入了解计算机系统》中文版,布莱恩特著,等等书籍;

    全套资料售价¥68.8,单套¥19.9

    展开全文
  • n维列向量记作: 几点说明: 如果kα=0,这里的0是零向量,k是常数,则要么k=0要么α=0。 向量组的定义 向量组:n个同维的行向量(列向量)组成的集合向量组。 向量组与矩阵 m个n维列向量所组成的向量组A:a1 ...

                                        线性代数之向量基础点

    向量的定义

    由n个按照次序排成的数组成的数组叫n维向量,每个数称为该向量的n的分量,其中第i个数 称为第i个分量。按照行(列)排列的向量叫做行(列)向量。

    n维列向量记作: 

    几点说明:

    • 如果kα=0,这里的0是零向量,k是常数,则要么k=0要么α=0

     

    向量组的定义

    向量组:n个同维的行向量(列向量)组成的集合向量组。

    向量组与矩阵

    m个n维列向量所组成的向量组A:a1  构成了n*m的矩阵,记作A=(a1  ,a2  … am  )

    注:这里n维列向量,即可看作行有n个。

    m个n维行向量所组成的向量组构成了m*n的矩阵,记作

     

    线性组合

    给定向量组 ,对于任意一组实数 则表达式

    则称为向量组A的线性组合。其中叫做该线性组合的系数。

     

    线性表示

    如果向量   则b是向量组A的线性组合,这是向量b可有向量组A线性表示。这里其实转换为了方程有解,全是0也是有解。

    特别的:

    • 线性表示时系数可以全是0
    • 0向量可有任意向量组表示。
    • 任何向量都可由 (1,0,...0),(0,1,0...0),(0,0,1...0) ...(0,0...0...1)表示

    向量组等价

    两个向量组可以相互线性表示,叫做第一个向量组等价于第二个向量组。向量组等价的性质:

    反身性:向量组和自己等价,A~A。

    对称性:向量组可以相互等价,A~B则B~A

    传递性: 向量组1等价于向量组2,向量组2等价于向量组3则,向量1等价于向量组3,即A~B,B~C则A~C

     

    线性相关

    向量是n个m维(每个向量分量的个数)的向量,若存在一组不全为0的   使得 则α 是线性相关的,反之线性无关。

    线性无关即等价于以下命题:

    1. 线性不相关
    2. 找不到一组不全0的    使得
    3.  全为0

    几种情况:

    关于单个向量

    • 向量组中两个向量成比例,则两个向量必线性相关
    • 含零向量的任向量组必线性相关(取0向量的系数为1或者k,其余均为0)
    • 一个零向量必线性相关
    • 一个非零向量必然线性无关
    • 一个向量线性相关的充要条件是向量为0向量

    关于向量组

    • 部分组线性相关则整体组也线性相关(这里的部分组是指向量组的部分,即假设向量组有n个向量,则此时部分组是它的 “部分”,即有k个,k小于n)

                  逆否命题整体组线性无关 则部分组也线性无关也成立。

    • 线性无关的向量组的接长向量组也无关(线性无关的向量组的每个向量按相同位置随机增加一些分量得到的高维向量组也是线性无关的,这里涉及向量组里每个向量的维数即单个向量元素个数。这里的接长即对于于每个向量的维数的增加。

                 逆否命题线性相关的向量组截短之后的向量组也线性相关。这里截断时仍保留原有的系数即可(因之前已经找不到不全为0的系数)。

    比如 b=(3,0,0,4), 则 

    如果截短,如果须按 即仍然线性相关。

    延展阅读

    • 向量组部分相关则整体组相关的理解:

    由定义则取原有系数不变(至少含不全为0系数),新增的向量(组)系数全部取0即可。(外部部分行代替整体行,可理解成内部有线性关系再外延还是有这个线性关系)

    • 逆否命题,整体组线性无关则部分组也线性无关的理解:

    由线性无关定义则原系数均为0,则取部分组时也是线性无关。(外部全体不行则部分不行)

    • 线性无关的接长向量组也无关的理解:

    由线性无关定义则原系数均为0,则向量组里每个向量里新接个元素系数为0时才能满足线性表示的定义,亦无关。(内部无关则扩大后仍无关)

    • 线性相关的向量组截短之后的向量组也线性相关的理解:

    由定义则取原有系数不变(至少含不全为0系数),截断的向量(组)系数仍取原有的。(内部相关则缩小后仍相关)

    线性相关与方程组

    针对n个n维的向量(向量的个数等于向量的维数,向量组的另外中说法)线性无关的充要条件是它的行列式不等于0(齐次方程系数行列式不等于0,必有唯一0解,即系数全为0),线性相关的充要条件是它的行列式等于0

    两点说明:

      线性组合充要条件方程有解(源于线性组合的定义);

    不是线性组合充要条件方程无解。

    线性相关的充要条件是方程有非零解(源于线性相关的定义);

        线性无关的充要条件是方程只有零解。

     

    极大无关组

    极大无关组

    假设有向量组A:a1  ,a2  … am  的部分组和部分组a1  ,a2  … ak  (这里k小于等于m,可从向量组里挑选)满足如下条件:

           1) 部分组之间线性无关

           2) 向量组里每个向量均可由该部分组线性表示。

           3)该向量组的向量个数最大

    则成这样的部分向量组为极大线性无关组。

    不难发现,极大无关组有如下特点:

    1. 任意两个极大无关组含向量个数是相同的。
    2. 极大无关组不唯一

    极大无关组求解步骤

       1) 原始矩阵均按照列组成向量

       2) 只应用行变换,形成行简化阶梯型

        3) 首非零元所在列为极大无关组

        4) 其余向量的系数用简化阶梯型按列填充

     

    向量组的秩

    极大无关组含向量的个数,记作 即称为向量组的秩。

    向量秩的特点:

    一定小于等于向量的维数,因为当找的向量个数大于维数时线性相关。

    向量组的秩大于0小于等于向量个数和向量维数的较小者。min{向量个数,向量维数}

    展开全文
  • 一般的课本上都会告诉我们判断两个向量是否正交可以通过它们的点积为0判断,那么到底什么? 向量 一个向量是有方向和长度的,我们记向量\(\overrightarrow{a}\)的长度\(\left\|a\right\|\),也叫向量的长度模...
  • 例如:向量A=(x1,y1)与向量B=(x2,y2)垂直则有x1x2+y1y2=0,进而可以解出一系列答案。 由于解是无限多的,给向量B的x2或者y2取一个合理的值,即可得出另外一个值。 使用向量的加减: 已知向量A,添加辅助向量B...
  • 图像转化特征向量作用

    千次阅读 2020-04-17 01:50:23
    首先 我认为,将图像转化特征向量在作为网络的输入,要远比图像直接作为网络输入的数据量要小得多。 同时 我认为,将图像使用网络模型特诊向量化时,也保留了图像的特征,不论在识别还是分...
  • 向量代数

    2020-11-04 23:57:32
    规定长度为0向量叫做零向量(zero vector),记为0\boldsymbol{0}0,零向量的起点和终点重合,方向是任意的;模1的向量叫做单位向量(Unit vector),与向量a\boldsymbol{a}a长度相等而方向相反的向量,称为a\...
  • dense_vector存储稠密向量,value是单一的float数值,可以是0、负数或正数,dense_vector数组的最大长度不能超过1024,每个文档的数组长度可以不同。 sparse_vector存储稀疏向量,value是单一的float数值,可以是0...
  • 向量向量空间

    千次阅读 2020-07-27 15:48:57
    向量向量空间 这一篇文章是线性代数系列的第一篇,国内外一般的课程与教材都是从线性方程组开始讲线性代数,从高斯消元、高斯约旦这些方法入门线性代数也是对新手比较友好的。这个系列的文章可能会比国内的教材更...
  • 向量向量

    千次阅读 2021-01-26 22:09:34
    向量 a 与 b 的向量积(外积)是一个向量做 a×b\mathbf{a}\times \mathbf{b}a×b 或 [ab][\mathbf{a}\mathbf{b}][ab],它的模是 ∣a×b∣=∣a∣∣b∣sin⁡∠(a,b) |\mathbf{a}\times \mathbf{b}| = |\mathbf{...
  • 它可以形象化地表示带箭头的线段。箭头所指:代表向量的方向;线段长度:代表向量的大小。与向量对应的只有大小,没有方向的量叫做数量(物理学中称标量)。  如果用Rn表示n个实数的有序集,Rn中的一个向量...
  • 向量投影与向量投影矩阵

    万次阅读 2018-12-03 21:03:11
    以下是向量a在向量b上的投影,θ 向量的夹角。 其中a = a||+a⊥,a||则是a在b上的投影。 所以投影公式如下: 向量投影矩阵 将以上投影公式写成矩阵形式,这里使用的是列优先的矩阵,即向量写成...
  • 向量基础知识

    千次阅读 2018-07-05 18:36:02
    设a=(x,y),b=(x’,y’). 一、向量的加法  向量的加法满足平行四边形... a+0=0+a=a.AB+BC=AC. a+b=(x+x′,y+y′). a+0=0+a=a.  AB+BC=AC.  a+b=(x+x',y+y').  a+0=0+a=a.    向量加法的运算律:  ...
  • 清晰而删繁就简, 避免引入不必要的概念, 号等. 此外, 本文并不需要读者有凸优化的基 础, 以减轻读者的负担. 对于用到的优化技术, 在文中均有其介绍. 尽管现在深度学习十分流行, 了解支持向量机 的原理, 对想法的...
  • 可见,以解向量作为行向量得到的新的方程组,解向量为A的行向量 例: 已知两个方程四个未知量的齐次线性方程组的通解x=k1[1,0,2,3]T+k2[0,1,-1,1],求原齐次线性方程组 x=k1+k2,则有A[,]=0。两边同时求转置...
  • 分布式系统-向量时钟(Vector Clock)

    千次阅读 2019-10-26 01:46:16
    分布式系统-向量时钟(Vector Clock) Leslie Lamport的论文中《Time, Clocks and the Ordering of Events in a Distributed System》首次提出了逻辑时钟的概念,解决了分布式系统的事件全序关系,但是对于同时发生的...
  • 一文纵览向量检索

    千次阅读 2020-09-28 15:07:22
    首先我们了解下什么是向量,所谓向量就是由n个数字(二值向量由n个比特组成)组成的数组,我们称之n维向量。而向量检索就是在一个给定向量数据集中,按照某种度量方式,检索出与查询向量相近的K个向量(K-Nearest ...
  • 把空间中所有的向量的尾部都拉到坐标原点,这样N维点空间可以与N维向量空间建立一一对应关系:N维点空间中点(0000)取作原点,那么每一个点都可以让一个向量和它对应,这个向量就是从坐标原点出发到这个点为止...
  • 向量、函数和傅里叶级数(变换)

    千次阅读 2019-04-14 10:46:19
    但傅里叶级数的公式还是有点复杂的,以致很多人不住。本文就 讲授一种有利于记忆的方法,以作科普。 向量 对于傅里叶级数,我从向量开始讲。有人可能会问,这两者似乎没什么太大的联系?别 急,且看...
  • 本文介绍了向量的定义、向量的模、负向量、单位向量、零向量以及向量加减法的三种实现方法。
  • unity中向量旋转后获得新向量

    千次阅读 2020-07-09 10:44:37
    两点距离,向量夹角角度,向量旋转后的新向量
  • 向量的几何意义

    千次阅读 2017-10-26 14:26:57
     大小和方向(物理:矢量)向量的数学表示: 把空间中所有的向量的尾部都拉到坐标原点,这样N维点空间可以与N维向量空间建立一一对应关系:N维点空间中点(0000)取作原点,那么每一个点都可以让一个向量和它...
  • 距离向量算法

    万次阅读 多人点赞 2019-06-08 20:12:10
    将该 RIP 报文中的下一跳地址修改 X,且跳数增加 1 对每个项目执行如下步骤 a.若原路由表没有 RIP 中的目的网络 N,直接添加到原路由表中 b.若原路由表中有 RIP 中的目的网络 N,但下一跳地址不是 X ,选择跳数少...
  • 通用向量搜索服务 faiss是个高效的向量搜索解决方案,经过测试对比,可以感受到它的飞速,关于faiss性能测试的见这里:faiss包装与性能对比 这次开源的是使用faiss搭建的通用向量搜索服务。 项目开源地址:...
  • 向量的点乘(一)

    万次阅读 2019-05-18 10:46:52
    向量u和向量v之间最小的夹角我们[u,v],如下图所示,两个向量之间的夹角我们用绿色弧形表示,其中一个夹角用绿色矩形表示,这意味着这两个向量的夹角90度或者是π/2,即[u,v]=π/2。表示这两个向量正交(垂直...
  • 空间向量及其运算

    千次阅读 2020-11-05 11:39:09
    平面内任意向量p\boldsymbol{p}p都可以用两个不共线的向量a\boldsymbol{a}a b\boldsymbol{b}b来表示,这是平面向量的基本定理。类似的我们定义,如果三个向量不共面,那么对空间中的任一向量p\boldsymbol{p}p,存在...
  • 正交向量

    千次阅读 2020-03-22 14:17:16
    局部坐标转化全局坐标 %把局部坐标转化全局坐标 function tscan = Transform(scan, pose) %-------------------------------------------------------------------------- %输入 % pose当前位姿(x坐标tx y...
  • 基于支持向量机的图像分类(上篇)

    万次阅读 多人点赞 2018-03-31 21:25:39
    将这部分内容分为上下两篇:上篇重点详细介绍实现原理,下篇衔接上篇进行编程实现并对程序进行解释,本篇上篇。本文将主要介绍以下几个方面: 图像分类任务 收集训练集与测试集 支持向量机分类基本原理 特征选择...
  • 点云法向量

    万次阅读 多人点赞 2019-07-30 09:58:00
    一、点云法向量向量是点云中各点的重要属性之一。众多点云算法的实施都基于精确的法向量估计,例如许多表面重建算法、点云分割算法、点云去噪算法以及特征描述算法等。 由空间变换可知,点云中每一点的法向量...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 149,362
精华内容 59,744
关键字:

向量记为0