-
2020-04-21 15:46:14
1、超平面一般表示形式
在n维空间中,设任意点坐标为
x = [ x ( 1 ) , x ( 2 ) , . . . x ( n ) ] T ∈ R n x=[x^{(1)},x^{(2)},...x^{(n)}]^T\in{R^n} x=[x(1),x(2),...x(n)]T∈Rn设超平面参数
w = [ w ( 1 ) , w ( 2 ) , . . . w ( n ) ] T ∈ R n w=[w^{(1)},w^{(2)},...w^{(n)}]^T\in{R^n} w=[w(1),w(2),...w(n)]T∈Rnb ∈ R b\in{R} b∈R
则超平面方程可表示为
w T x + b = 0 (1) w^T x+b=0\tag{1} wTx+b=0(1)
2、超平面的法向量
超平面的法向量满足:超平面中任意向量都与该法向量垂直。设超平面上的两个点为 x 1 x_1 x1和 x 2 x_2 x2,分别满足:
w T x 1 + b = 0 (2) w^T x_1+b=0\tag{2} wTx1+b=0(2)w T x 2 + b = 0 (3) w^T x_2+b=0\tag{3} wTx2+b=0(3)
两式相减,可得
w T ( x 1 − x 2 ) = 0 (4) w^T (x_1-x_2)=0\tag{4} wT(x1−x2)=0(4)记 v = ( x 1 − x 2 ) \bm{v}=(x_1-x_2) v=(x1−x2),由于 x 1 x_1 x1和 x 2 x_2 x2是任取的,故 v \bm{v} v 表示超平面上的任意向量。这时我们可以发现,式 ( 4 ) (4) (4)的含义恰好是:平面上任意一个向量都与 w w w 相互垂直,因此 w w w 就是超平面 w T x + b = 0 w^T x+b=0 wTx+b=0的一个法向量。
3、点到超平面的距离
记超平面外一点为 x 0 x_0 x0 ,记点 x 3 x_3 x3 在超平面 w T ⋅ x + b = 0 w^T\cdot x+b=0 wT⋅x+b=0上的投影点为 x 0 ′ x_0' x0′,满足:
w T ⋅ x 0 ′ + b = 0 (5) w^T\cdot x_0'+b=0\tag{5} wT⋅x0′+b=0(5)则有向量 u = ( x 0 − x 0 ′ ) \bm{u}=(x_0-x_0') u=(x0−x0′) 与平面 w T x + b = 0 w^T x+b=0 wTx+b=0的法向量 w \bm{w} w互相平行,则两者的数量积:
w T ( x 0 − x 0 ′ ) = w ⋅ ( x 0 − x 0 ′ ) = ∣ w ∣ ∗ ∣ x 0 − x 0 ′ ∣ ∗ c o s ( 0 o r π ) = ± ∣ w ∣ ∗ d (6) w^T(x_0-x_0')=w\cdot (x_0-x_0')=|w|*|x_0-x_0'|*cos(0~or~\pi)=\pm|w|*d\tag{6} wT(x0−x0′)=w⋅(x0−x0′)=∣w∣∗∣x0−x0′∣∗cos(0 or π)=±∣w∣∗d(6)其中 d = ∣ x 0 − x 0 ′ ∣ d=|x_0-x_0'| d=∣x0−x0′∣ 即为待求的点到超平面间的距离。
另一方面,根据式 ( 5 ) (5) (5)消去可得
w T ( x 0 − x 0 ′ ) = w T x 0 − w T x 0 ′ = w T x 0 − ( − b ) = w T x 0 + b (7) w^T(x_0-x_0')=w^Tx_0-w^Tx_0'=w^Tx_0-(-b)=w^Tx_0+b\tag{7} wT(x0−x0′)=wTx0−wTx0′=wTx0−(−b)=wTx0+b(7)
结合 ( 6 ) ( 7 ) (6)(7) (6)(7),考虑到 d ≥ 0 d\ge0 d≥0,可得
d = ∣ w T x 0 + b ∣ ∣ w ∣ (8) d=\frac{|w^Tx_0+b|}{|w|}\tag{8} d=∣w∣∣wTx0+b∣(8)这里上式中的 ∣ w ∣ |w| ∣w∣ 表示 w w w 的模长,模长作为绝对值概念的推广,在欧式空间中,模长常常称为L2范数(也称为Euclidean范数或者Frobenius范数):
∣ ∣ w ∣ ∣ F = ( w ( 1 ) ) 2 + ( w ( 2 ) ) 2 + . . . + ( w ( n ) ) 2 ||w||_F=\sqrt{(w^{(1)})^2+(w^{(2)})^2+...+(w^{(n)})^2} ∣∣w∣∣F=(w(1))2+(w(2))2+...+(w(n))2所以, d d d 的表达式即为:
d = ∣ w T x 0 + b ∣ ∣ ∣ w ∣ ∣ F (9) d=\frac{|w^Tx_0+b|}{||w||_F}\tag{9} d=∣∣w∣∣F∣wTx0+b∣(9)这样来看,平面直角坐标系下的点到直线距离公式便是上式的一个特例。
4、平行超平面之间的距离公式
趁热打铁,继续推导平行超平面间的距离公式,设两个不重合的平行超平面分别为:
w 1 T x + b 1 = 0 w_1^T x+b_1=0 w1Tx+b1=0w 2 T x + b 2 = 0 w_2^T x+b_2=0 w2Tx+b2=0
由于两个超平面互相平行,因此由 2 2 2 中对法向量的讨论可知,两个超平面的法向量互相平行,我们取两个互相重合的法向量,即
w = w 1 = w 2 w=w_1=w_2 w=w1=w2则可得
w T x + b 1 = 0 (10) w^T x+b_1=0\tag{10} wTx+b1=0(10)w T x + b 2 = 0 (11) w^T x+b_2=0\tag{11} wTx+b2=0(11)
设 P ( x 0 ) P(x_0) P(x0) 为平面1上的一个点,即满足:
w T x 0 + b 1 = 0 (12) w^Tx_0+b_1=0\tag{12} wTx0+b1=0(12)则根据点到超平面的距离公式可得点 P ( x 0 ) P(x_0) P(x0) 到超平面2的距离 d d d 满足:
d = ∣ w T x 0 + b 2 ∣ ∣ ∣ x 0 ∣ ∣ F = ∣ − b 1 + b 2 ∣ ∣ ∣ w ∣ ∣ F d=\frac{|w^Tx_0+b_2|}{||x_0||_F}=\frac{|-b_1+b_2|}{||w||_F} d=∣∣x0∣∣F∣wTx0+b2∣=∣∣w∣∣F∣−b1+b2∣上式最后一步用到了式 ( 12 ) (12) (12)。最后我们得到了平行超平面之间的距离公式为
d = ∣ b 2 − b 1 ∣ ∣ ∣ w ∣ ∣ F (13) d=\frac{|b_2-b_1|}{||w||_F}\tag{13} d=∣∣w∣∣F∣b2−b1∣(13)更多相关内容 -
常用的向量距离公式
2020-03-22 18:53:27欧几里得度量(educlidean metric),指在m维空间中两点之间的真实距离,或者向量的自然长度,即该点到原点的距离。 import numpy as np dist = np.sqrt(np.sum(np.square(x-y))) #或者 from scipy.spatial....目录
1、欧式距离
欧几里得度量(educlidean metric),指在m维空间中两点之间的真实距离,或者向量的自然长度,即该点到原点的距离。
import numpy as np dist = np.sqrt(np.sum(np.square(x-y))) #或者 from scipy.spatial.distance import pdist dist = pdist(np.vstack([x,y]))
2、曼哈顿距离
Manhattan Distance,也称为城市街区距离(City Block distance)。如果把欧式距离理解成点到点的直线距离,那么曼哈顿距离就指的是两点之间的实际距离(不一定是直线)。
import numpy as np dist = np.sum(np.abs(x-y)) #或者 from scipy.spatial.distance import pdist dist = pdist(np.vstack([x,y]),'cityblock')
3、切比雪夫距离
(Chebyshev Distance)
import numpy as np dist = np.max(np.abs(x-y)) #or from scipy.spatial.distance import pdist dist = pdist(np.vstack([x,y]),'chebyshev')
4、马氏距离
(Mahalanobis Distance)
,其中S为协方差矩阵。
若协方差矩阵是单位矩阵,即各个样本向量之间独立同分布,则公式就变成了欧式距离:
若协方差矩阵是对角矩阵,公式就变成了标准化欧式距离:
import numpy as np X = np.vstack([x,y]) X_T = X.T S = np.cov(X)#两个维度之间协方差矩阵 SI = np.linalg.inv(S)#协方差矩阵的逆矩阵 n = XT.shape[0]#样本之间两两组合 dist = [] for i in range(0,n): for j in range(i+1,n): delta = X_T[i] - X_T[j] d = np.sqrt(np.dot(np.dot(delta,SI), delta.T)) dist.append(d) #or from scipy.spatial.distance import pdist X = np.vstack([x,y]) X_T = X.T dist = pdist(X_T,'mahalanobis') #标准化欧式距离 si = np.var(np.vstack([x,y]), axis=0, ddof=1) dist = np.sqrt(((x-y) **2 /si).sum()) #or dist = pdist(np.vstack([x,y]), 'seuclidean')
-
计算两向量的欧式距离,余弦相似度
2020-12-22 19:42:09就是在机器学习中都可以用来计算相似度,但是两者的含义有很大差别,以我的理解就是:前者是看成坐标系中两个 点 ,来计算两点之间的 距离 ; 后者是看成坐标系中两个 向量 ,来计算两向量之间的 夹角 。 ...>>>import numpy
>>>vec1=[[1,1,1],[2,2,2]]
>>>vec2=[[2,2,2],[1,1,1]]
>>>vec1=numpy.array(vec1)
>>>vec2=numpy.array(vec2)
>>>vec1
array([[1, 1, 1],
[2, 2, 2]])
>>>vec2
array([[2, 2, 2],
[1, 1, 1]])
>>>dist = numpy.sqrt(numpy.sum(numpy.square(vec1 - vec2)))
>>>dist
2.4494897427831779
>>>numpy.linalg.norm(vec1-vec2)
2.4494897427831779
余弦相似度:
>>>vec1
array([[1, 1, 1],
[2, 2, 2]])
>>>vec2
array([[2, 2, 2],
[1, 1, 1]])
>>>num=float(numpy.sum(vec1*vec2))
>>>num
12.0
>>>denom=numpy.linalg.norm(vec1)*numpy.linalg.norm(vec2)
>>>cos=num/denom
>>>denom
15.000000000000002
>>>cos
0.79999999999999993
>>>sim=0.5+0.5*cos
>>>sim
0.89999999999999991
两者相同的地方,就是在机器学习中都可以用来计算相似度,但是两者的含义有很大差别,以我的理解就是:前者是看成坐标系中两个 点 ,来计算两点之间的 距离 ;
后者是看成坐标系中两个 向量 ,来计算两向量之间的 夹角 。
前者因为是 点 ,所以一般指 位置 上的差别,即 距离 ;
后者因为是 向量 ,所以一般指 方向 上的差别,即所成 夹角 。
如下图所示:
数据项A和B在坐标图中当做点时,两者相似度为距离dist(A,B),可通过欧氏距离(也叫欧几里得距离)公式计算:
当做向量时,两者相似度为cosθ,可通过余弦公式计算:
假设||A||、||B||表示向量A、B的2范数,例如向量[1,2,3]的2范数为:
√(1²+2²+3²) = √14
numpy中提供了范数的计算工具: linalg.norm()
所以计算cosθ起来非常方便(假定A、B均为列向量):num= float(A.T * B) #若为行向量则 A * B.T
denom= linalg.norm(A) * linalg.norm(B)
cos= num / denom #余弦值
sim=0.5+0.5* cos #归一化
因为有了linalg.norm(),欧氏距离公式实现起来更为方便:dist= linalg.norm(A - B)
sim=1.0/ (1.0+ dist) #归一化
关于归一化:
因为余弦值的范围是 [-1,+1] ,相似度计算时一般需要把值归一化到 [0,1],一般通过如下方式:
sim = 0.5 + 0.5 * cosθ若在欧氏距离公式中,取值范围会很大,一般通过如下方式归一化:
sim = 1 / (1 + dist ( X,Y ))
说完了原理,简单扯下实际意义,举个栗子吧:
例如某T恤从100块降到了50块(A(100,50)),某西装从1000块降到了500块(B(1000,500))
那么T恤和西装都是降价了50%,两者的价格变动趋势一致,余弦相似度为最大值,即两者有很高的 变化趋势相似度
但是从商品价格本身的角度来说,两者相差了好几百块的差距,欧氏距离较大,即两者有较低的 价格相似度
-
数字信号处理7——点到向量的距离
2020-11-21 16:44:34二、点到线段的最短距离——向量法 三、点到直线的最短距离——直线法 四、点到直线最短距离——向量法 一、前言 其实在工程应用中很多情况下计算点到直线或者点到线段的距离,比如在unity3d游戏软件设计中...目录
一、前言
其实在工程应用中很多情况下计算点到直线或者点到线段的距离,比如在unity3d游戏软件设计中计算任意形状路径起点和终点连线距离最远的点,比如用于雷达聚类后在多目标跟踪算法中计算哪个sensor距离track最近,另外还需要知道要计算的点位于直线的哪一侧,这些计算在游戏开发或者数字信号后处理要求实时性,因此需要高效的运算。这里记录一下几种计算方法,方便需要时回忆。
需要记住的是点乘(内积)计算的一个向量在另一个向量上的投影cos,叉乘计算的是从同一点出发的两个向量,一个向量在距离另一个向量垂直距离sin。
二、点到线段的最短距离——向量法
要求:计算平面一点到两点连成的线段,哪一个端点最近;另外计算点到两点形成向量的最短距离的计算(PC);
向量法计算在处理数据运算量多的地方相比联合求方程有显著的运算效率。
上面的
是
方向上的单位向量,其意义是给所求向量确定方向。
是的两个向量的内积,且
,其中θ为向量AP与AB之间的夹角
是向量长度。
根据向量的方向性可以推出以下表达,分别对应上述的(a)(b)(c):
三、点到直线的最短距离——直线法
参考1中提供了8中不同的计算方法,可以开阔思维,但是工程中,我们更习惯使用简单的两点法求直线方程:
直线一般公式 为:
;
直线外一点 (x0,y0) 到直线距离公式 :
;
假设首尾两点
, 待计算点
把p1,p2带入直线一般公式得:
, 两式得
设
把A, B带入方程求解C:
求得
, 将A,B,C带入点到直线距离公式可求得距离值:
总结起来:
四、点到直线最短距离——向量法
向量法其实与直线法的求解结果一样,但是更直观也更容易理解。
假设首尾两点
, 待计算点
,
参考:
点到直线的八种计算方法(求解方法思路众多,但是运算着实麻烦):https://zhuanlan.zhihu.com/p/26307123
点到向量距离(核心思想有,但是有一些表达错误):https://blog.csdn.net/lkj345/article/details/80878128
unity3d 点到向量的距离算法(方法描述ok,但是求解两侧位置不如向量法直接):https://blog.csdn.net/qq_40795166/article/details/100030169
点到线段的最短距离:https://blog.csdn.net/angelazy/article/details/38489293
-
平面向量内积的坐标运算与距离公式
2020-12-28 20:30:07notforcommercialuse平面向量内积的坐标运算与距离公式德清乾元职高朱见锋【教材分析】:本课是在平面向量坐标运算、内积定义基础上学习的,主要知识是平面向量内积的坐标运算与平面内两点间的距离公式,是后面学习... -
计算不同长度的两个向量之间的距离
2021-02-05 22:15:34欧几里德距离公式找出了欧几里德空间中任意两点之间的距离.欧几里德空间中的一点也被称为欧几里德矢量.您可以使用欧氏距离公式来计算两个不同长度的向量之间的距离.对于不同维度的矢量,适用相同的原理.假设较低维度... -
2020学年新教材高中数学第六章平面向量初步6.2.2直线上向量的坐标及其运算6.3.2两点间的距离中点坐标公式及...
2021-09-09 09:56:212019_2020学年新教材高中数学第六章平面向量初步6.2.2直线上向量的坐标及其运算6.3.2两点间的距离中点坐标公式及向量平行课时作业新人教B版必修第二册 -
向量距离(Distance)
2019-10-31 20:31:35向量是一个有向线段,计算两个向量之间的距离,其实就是计算两个点之间的距 离。 在 Unity 引擎内,我们可以直接通过 Vector3.Distance(v1, v2)来得到 两个向量之间的距离。 数学公式: 例: 公式解析: 1.求... -
计算Python Numpy向量之间的欧氏距离实例
2020-12-04 12:49:46计算Python Numpy向量之间的欧氏距离,已知vec1和vec2是两个Numpy向量,欧氏距离计算如下:import numpydist = numpy.sqrt(numpy.sum(numpy.square(vec1 - vec2)))或者直接:dist = numpy.linalg.norm(vec1 - vec2)... -
NLP中常用的向量间距离计算方式
2020-06-22 17:00:33欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式。 (1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离: (2)三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离: (3)两个n维向量a... -
python 各类距离公式实现
2021-02-09 08:38:19所列的距离公式列表和代码如下:闵可夫斯基距离(Minkowski Distance)欧氏距离(Euclidean Distance)曼哈顿距离(Manhattan Distance)切比雪夫距离(Chebyshev Distance)夹角余弦(Cosine)汉明距离(Hamming distance)... -
向量空间中各类距离表示
2018-04-02 13:28:57两个n维变量A(x11,x12,…x1n)与B(x21,x22,…,x2n)间的闵可夫斯基距离的定义为: 其中p是一个变参数 [ ] 当p=1时,就是曼哈顿距离。 [ ] 当p=2时,就是欧式距离。 [ ] 当p→∞时,就是切比雪夫距离。 2. 欧氏... -
点到平面的距离公式
2020-08-14 17:09:17准备知识 平面的一般式方程 Ax +By +Cz + D = 0 其中n = (A, B, C)是平面的法...给定两个向量V1(x1, y1, z1)和V2(x2, y2, z2)则他们的内积是 V1V2 = x1x2 + y1y2 + z1z2 点到平面的距离 有了上面的准备知识,则 -
多维向量空间中点到线的距离公式
2017-03-09 17:07:59在做多维向量索引,需要用到多维空间中的一些通用距离公式,在此罗列,包括:点-线距离,。 -
(转)unity3d 点到向量的距离算法和判断点位于向量哪一侧的算法
2019-08-23 09:01:16这两个算法来源于一个3DRTS游戏的需求,回顾了一下高中数学知识,这里简单介绍下。 这两个算法需求均是出自3D游戏,但是计算方式都是投射到X,Z平面来求解。 所以先拓展Vector3向量的方法。 /// <summary> ... -
数学----向量点积公式推导
2019-03-10 09:52:01向量的点积有两种形式的定义,代数定义和几何定义。 一 几何定义: 向量点积:a·b=|a||b|cosα 注意:该定义只对2维3维空间有效。 二 代数定义: 设二维空间内有两个向量和,定义它们的数量积(又叫内积、点... -
点到平面的距离公式推导
2016-04-01 09:33:05简单推导点到直线的距离公式 -
三维空间距离公式
2020-05-29 11:11:54求点P到直线l的距离: 任取l上一点M,l方向向量为n,则 -
matlab求两点间距离
2021-04-19 02:32:35end for k=1:N %Floyd算法求解任意两点的最短距离 for i=1:N for j=1:N if D(i,j)>D(i,k)+D(k,j) D(i,j)=D......Matlab求解边值问题方法+例题_工学_高等教育_教育专区。常微分方程边值问题Matlab程序 Matlab求解... -
向量叉乘公式_向量外积的高中数学运用
2020-11-21 09:49:08与点积不同,它的运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量和垂直。其应用十分广泛,通常应用于物理学光学和计算机图形学中。如图,这是 ,我们得到了一个实数 ,而其绝对值为平行四边形... -
三维点沿指定向量方向到平面的距离计算方法及C++代码实现
2020-12-29 21:38:21则计算点P沿方向向量d到平面Q的距离,可以通过下式计算 (P+t* d)* n=D [1] 其中t为待求的常数。下面将[1]式分两个步骤解释一下该式子的意义(理解了以后其实就很简单): P... -
点到平面的距离公式的推导
2017-03-22 10:09:41点到平面的距离公式 准备知识 平面的一般式方程 Ax +By +Cz + D = 0 其中n = (A, B, C)是平面的法向量,D是将平面平移到坐标原点所需距离(所以D=0时,平面过原点) 向量的模(长度) 给定一个向量V(x, y, z)... -
向量积的坐标运及度量公式.ppt
2020-12-30 13:38:07向量积的坐标运及度量公式* * 向量数量积的 坐标运算与度量公式 一.复习回顾: 2. 二.探究新知: 三.新课讲授: 1.向量内积的坐标运算 结论:两个向量的数量积等于它们 对应坐标的乘积的和。 即: x o B(b1,b2) A(a1,a2... -
利用向量求点到线的最短距离
2020-02-20 16:24:03参考JTS的CGAlgorithms类distancePointLine方法,实现原理是根据...两个向量a和b的叉积(向量积)可以被定义为: 在这里θ表示两向量之间的角夹角(0° ≤ θ ≤ 180°),它位于这两个矢量 所定义的平面上。 向... -
Python Numpy计算各类距离的方法
2020-12-06 03:05:53详细:1.闵可夫斯基距离(Minkowski Distance)2.欧氏距离(Euclidean Distance)3.曼哈顿距离(Manhattan Distance)4.切比雪夫距离(Chebyshev Distance)5.夹角余弦(Cosine)6.汉明距离(Hamming distance)7....贝叶斯公式1... -
线性代数-距离公式汇总
2020-03-06 19:19:59文章目录距离公式汇总欧式... 假设nnn维空间中有两个点xix_ixi和xjx_jxj,其中xi=(xi(1),xi(2),⋯ ,xi(n))Tx_i = (x_i^{(1)},x_i^{(2)},\cdots,x_i^{(n)})^Txi=(xi(1),xi(2),⋯,xi(n))T,xj=(xj(1)... -
向量的几种距离计算方法
2019-06-19 19:16:32本文展示了4中距离计算方法:欧氏距离、曼哈顿距离、切比雪夫距离、夹角余弦距离。 另外:向量可以自己根据需要来构造,本文的...1.获取一些随机均匀分布的点,作为向量A a=numpy.random.randint(-20,high=160,size=... -
使用向量的方法计算点到直线的距离
2015-06-19 16:57:48使用向量的方法计算点到直线的距离 -
Eigen库计算向量之间的距离和夹角
2021-07-05 10:26:53一、求一点到原点的距离 Vector3d v(x,y,z); double dis1= v.norm();...二、求两点之间的距离 Vector3d v1(x1,y1,z1); Vector3d v2(x2,y2,z2); double dis = (v1-v2).norm(); 三、两个向量之间的夹角 Vector3d v