即c的长度在数值上等于以a,b,夹角为θ组成的平行四边形的面积。
而c的方向垂直于a与b所决定的平面,c的指向按右手定则从a转向b来确定。
求点积时的两个向量一定要是单位向量,否则计算结果会大于Pi(正常范围是0到Pi)。
讲之前,先说下如果两个Rotation相加的意义,比如:
得到的结果FRotator Result(0.f, 90.f, 90.f),其意义是: 先将物体作Rot1旋转,即:Yaw方向(水平平面)旋转90度,然后再假设该物体相对坐标轴原点的旋转量为(0, 0, 0),即没有作任何旋转,但实际Rotation相对坐标轴原点为(0, 90, 0);然后再将物体进行Rot2旋转,即Pitch方向(垂直于(90, 0,
0)方向的平面)侧翻90度,因为侧翻90度前假设物体的Rotation是(0, 0, 0),所以侧翻时所在的平面不再是Yaw=90的平面(垂直于(0, 90, 0)方向),而是Yaw=0的平面(垂直于(90, 0, 0)方向)。没做相关配图,这段话理解起来有点绕,最好用空间思维想象下,可以用手掌比划。
0.f))传递给AddMovementInput
,因为InputValue需要相对摄像机的朝向来计算,否则当按下W键,期望角色摄像机正对方向移动,但实际是侧向移动。此时就可以通过旋转矩阵相乘来获取当前摄像机朝向方向下的MoveForward
和MoveRight
方向。
假设空间某点O的坐标为(Xo,Yo,Zo),空间某条直线上两点A和B的坐标为:(X1,Y1,Z1),(X2,Y2,Z2),设点O在直线AB上的垂足为点N,坐标为(Xn,Yn,Zn)。点N坐标解算过程如下: 首先求出下列向量:
由向量垂直关系(公式1
)
点N在直线AB上,根据向量共线(公式2
):
由公式2
得(公式3
):
把公式3
式代入公式1
式,式中只有一个未知数k,整理化简解出k(公式4):
把公式4
式代入公式3
式即得到垂足N的坐标。
// 二维空间点到直线的垂足
// 三维空间点到直线的垂足
计算p1、p2连成的直线上的离 q 点最近的点 f(即 q 点到直线 p1、p2的垂足坐标):
UE4引擎提供的工具函数:
UE4提供的工具函数:
三维凸包+点到平面距离+已知3点求平面方程
在机器学习和数据挖掘中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别。最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如 K 最近邻(KNN)和 K 均值(K-Means)等等。
各种“距离”的应用场景简单概括为,空间:欧氏距离,路径:曼哈顿距离,国际象棋国王:切比雪夫距离,以上三种的统一形式:闵可夫斯基距离,加权:标准化欧氏距离,排除量纲和依存:马氏距离,向量差距:夹角余弦,编码差别:汉明距离,集合近似度:杰卡德类似系数与距离,相关:相关系数与相关距离。
一般而言,定义一个距离函数 d(x,y), 需要满足下面几个准则:(即距离度量需要满足的性质)
此处的“文本”一词涵盖以下两个对象:
相关的度量方法可以分为两大类,各类下面再有一些具体的分类,比较常用的方法如见下图
Note: lz这里LCS也可以认为就是编辑距离吧。
总的来说,文本相似度量方法可以分为两大类:
[文本相似度量方法(1): 概览]
欧拉距离,来自于欧式几何,在数学上也可以成为范数。
L2范数:向量各个元素的平方求和然后求平方根,也叫欧式范数、欧氏距离。
Lp范数:向量各个元素绝对值的p次方求和然后求1/p次方。
L∞范数:向量各个元素求绝对值,最大那个元素的绝对值。也就是x,y在任意维度上差距最大的那个值。
║x║∞=max(│x1│,│x2│,…,│xn│)
分子是集合交集,分母是集合并集。即两个集合间的Jaccard similarity就是它们交集的大小除以它们并集的大小。
Jaccard相似度没有考虑评分的大小。
Dice 系数和 Jaccard 相似性起初被用于生态学上,作为一种判断物种间相似性的方法。在生态学上,要比较两个物种间相似程度时,通常会对该物种的特性进行采样,最后得到各自的特性集合,而 Dice 系数和 Jaccard 相似性都是通过比较两者之间的 共有特性 占比来度量相似性的,因此这两种方法都不是很关心每个 "Term" 的具体量,只是关心有没有某个 "Term"。
另一种扩展方法,用最大最小值函数来代替乘积和模计算,如下:
即用向量中每个分量的的最小值和最大值来参与计算。
个人理解,这个可以做如下解释。当集合A中的元素a1出现C(a1)次的时候,我们可以认为集合中的元素是允许重复存在的,即集合A中有C(a1)个元素;集合B也是这样,有C(b1)个相同的元素,则A和B在这个元素上的交集就是min(a1, b1) ,并集就是max(a1, b1) ,这样上述公式就是利用狭义Jaccard相似度计算的结果。
适合高维度向量vectors的相似度计算。
1. 两个向量间的余弦值可以很容易地通过使用欧几里得点积和量级公式推导
鉴于两个向量的属性, A 和B的余弦相似性θ用一个点积形式来表示其大小,如下所示:
也就是说两个向量的cosin距离就是这两个向量之间的夹角。
产生的相似性范围从-1到1:-1意味着两个向量指向的方向正好截然相反,1表示它们的指向是完全相同的,0通常表示它们之间是独立的,而在这之间的值则表示中度的相似性或相异性。
对于文本匹配,属性向量A 和B 通常是文档中的词频向量。余弦相似性,可以被看作是一个规范比较文件长度的方法。 在信息检索的情况下,由于一个词的频率(TF-IDF权)不能为负数,所以这两个文档的余弦相似性范围从0到1。并且,两个词的频率向量之间的角度不能大于90°。
2. 向量内积是线性代数里最为常见的计算,实际上它还是一种有效并且直观的相似性测量手段。向量内积的定义如下:
直观的解释是:如果 x 高的地方 y 也比较高, x 低的地方 y 也比较低,那么整体的内积是偏大的,也就是说 x 和 y 是相似的。举个例子,在一段长的序列信号 A 中寻找哪一段与短序列信号 a 最匹配,只需要将 a 从 A 信号开头逐个向后平移,每次平移做一次内积,内积最大的相似度最大。信号处理中 DFT 和 DCT 也是基于这种内积运算计算出不同频域内的信号组分(DFT 和 DCT 是正交标准基,也可以看做投影)。向量和信号都是离散值,如果是连续的函数值,比如求区间[-1, 1] 两个函数之间的相似度,同样也可以得到(系数)组分,这种方法可以应用于多项式逼近连续函数,也可以用到连续函数逼近离散样本点(最小二乘问题,OLS coefficients)中,扯得有点远了- -!。
向量内积的结果是没有界限的,一种解决办法是除以长度之后再求内积,这就是应用十分广泛的余弦相似度(Cosine similarity):
余弦相似度与向量的幅值无关,只与向量的方向相关,在文档相似度(TF-IDF)和图片相似性(histogram)计算上都有它的身影。
其实也没什么大不了。T(A,B)的分母是大于等于 cos similarity的分母,但且仅仅但 A,B长度一样是才相等。这就意味着,Tonimoto系数考虑了两个向量的长度差异,长度差异越大相似性约小。
另外需要注意一点的是,余弦相似度受到向量的平移影响,上式如果将 x 平移到 x+1, 余弦值就会改变。怎样才能实现平移不变性?
{也叫Centered Cosine,有时候也直接叫相关系数}Pearson相关系数(Pearson Correlation Coefficient)是用来衡量两个数据集合是否在一条线上面,它用来衡量定距变量间的线性关系。
皮尔逊相关系数具有平移不变性和尺度不变性,计算出了两个向量(维度)的相关性。不过,一般我们在谈论相关系数的时候,将 x 与 y 对应位置的两个数值看作一个样本点,皮尔逊系数用来表示这些样本点分布的相关性。
由于皮尔逊系数具有的良好性质,在各个领域都应用广泛,例如,在推荐系统根据为某一用户查找喜好相似的用户,进而提供推荐,优点是可以不受每个用户评分标准不同和观看影片数量不一样的影响。
相关系数多大才是显著相关?
相关系数的强弱仅仅看系数的大小是不够的。一般来说,取绝对值后,0-0.09为没有相关性,0.3-弱,0.1-0.3为弱相关,0.3-0.5为中等相关,0.5-1.0为强相关。
但是,往往你还需要做显著性差异检验,即t-test,来检验两组数据是否显著相关。
样本数越是大,需要达到显著性相关的相关系数就会越小。所以这关系到你的样本大小,如果你的样本很大,比如说超过300,往往分析出来的相关系数比较低,比如0.2,因为你样本量的增大造成了差异的增大,但显著性检验却认为这是极其显著的相关。
一般来说,我们判断强弱主要看显著性,而非相关系数本身。但你在撰写论文时需要同时报告这两个统计数据。
[怎样对数据做相关性检验]
当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:
rubyist:皮尔逊相关系数理解有两个角度
其一, 按照高中数学水平来理解, 它很简单, 可以看做将两组数据首先做Z分数处理之后, 然后两组数据的乘积和除以样本数,Z分数一般代表正态分布中, 数据偏离中心点的距离.等于变量减掉平均数再除以标准差.(就是高考的标准分类似的处理)
样本标准差则等于变量减掉平均数的平方和,再除以样本数,最后再开方,也就是说,方差开方即为标准差,样本标准差计算公式为:
所以, 根据这个最朴素的理解,我们可以将公式依次精简为:
其二, 按照大学的线性数学水平来理解, 它比较复杂一点,可以看做是两组数据的向量夹角的余弦。下面是关于此皮尔逊系数的几何学的解释,先来看一幅图,如下所示:
如上图,对于没有中心化的数据, 相关系数与两条可能的回归线y=gx(x) 和 x=gy(y) 夹角的余弦值一致。
对于没有中心化的数据 (也就是说, 数据移动一个样本平均值以使其均值为0), 相关系数也可以被视作由两个随机变量 向量 夹角 的 余弦值(见下方)。
利用通常的方法计算两个向量之间的夹角 (参见 数量积), 未中心化 的相关系数是:
(4)皮尔逊相关的约束条件
从以上解释, 也可以理解皮尔逊相关的约束条件:
在实践统计中,一般只输出两个系数,一个是相关系数,也就是计算出来的相关系数大小,在-1到1之间;另一个是独立样本检验系数,用来检验样本一致性。
Note: lz文本很短,关键词很少的时候,余弦距离就很难计算出准确的相似度。这时候可以使用主题模型。
汉明距离(Hamming distance)是指,两个等长字符串(一般适用于bit vectors)s1与s2之间的汉明距离定义为将其中一个变为另外一个所需要作的最小替换次数。
举个维基百科上的例子:
还可以用简单的匹配系数来表示两点之间的相似度——匹配字符数/总字符数。
在一些情况下,某些特定的值相等并不能代表什么。举个例子,用 1 表示用户看过该电影,用 0 表示用户没有看过,那么用户看电影的的信息就可用 0,1 表示成一个序列。考虑到电影基数非常庞大,用户看过的电影只占其中非常小的一部分,如果两个用户都没有看过某一部电影(两个都是 0),并不能说明两者相似。反而言之,如果两个用户都看过某一部电影(序列中都是 1),则说明用户有很大的相似度。在这个例子中,序列中等于 1 所占的权重应该远远大于 0 的权重,这就引出下面要说的杰卡德相似系数(Jaccard similarity)。
在上面的例子中,用 M11 表示两个用户都看过的电影数目,M10 表示用户 A 看过,用户 B 没看过的电影数目,M01 表示用户 A 没看过,用户 B 看过的电影数目,M00 表示两个用户都没有看过的电影数目。Jaccard 相似性系数可以表示为:
Jaccard similarity 还可以用集合的公式来表达,这里就不多说了。
一般P表示数据的真实分布,Q表示数据的理论分布、模型分布或P的近似分布。
分布越相似,kl距离越小,P和P自己的kl散度为0。
对于离散随机变量,其概率分布P 和Q的KL散度可按下式定义为
即按概率P求得的P和Q的对数差的平均值。KL散度仅当概率P和Q各自总和均为1,且对于任何i皆满足?及P(i)>0时,才有定义。式中出现0 \ln 0的情况,其值按0处理。
1. 相对熵的值为非负数
2. 尽管从直觉上KL散度是个度量或距离函数, 但是它实际上并不是一个真正的度量或距离。因为KL散度不具有对称性:从分布P到Q的距离(或度量)通常并不等于从Q到P的距离(或度量)。
L散度是不对称的,当然,如果希望把它变对称,
2. 概率分布之间的距离
实际上两个概率分布之间的距离是可以测量的。在统计学里面经常需要测量两组样本分布之间的距离,进而判断出它们是否出自同一个 population,常见的方法有卡方检验(Chi-Square)和 KL 散度( KL-Divergence),下面说一说 KL 散度吧。
先了解一下前面的基础知识[信息熵-信息熵的来源],而KL 散度又叫相对熵(relative entropy)。了解机器学习的童鞋应该都知道,在 Softmax 回归(或者 Logistic 回归),最后的输出节点上的值表示这个样本分到该类的概率,这就是一个概率分布。对于一个带有标签的样本,我们期望的概率分布是:分到标签类的概率是 1, 其他类概率是 0。但是理想很丰满,现实很骨感,我们不可能得到完美的概率输出,能做的就是尽量减小总样本的 KL 散度之和(目标函数)。这就是 Softmax 回归或者 Logistic 回归中 Cost function 的优化过程啦。(PS:因为概率和为 1,一般的 logistic 二分类的图只画了一个输出节点,隐藏了另外一个)
示例1:使用scipy实现
Note: 1 real_p, q维度必须相同。如果都是二维矩阵/数组,则默认是计算对应列向量的kl散度,计算行需要transpose。
2 entropy代码里面会自动对real_p, q的所有列进行标准化处理,即列和为1的标准化。相当于:
1. 计算出的结果自己和自己的kl散度为0,为了排序计算与别人的相似度应该将对角线中的元素改为max
2. 非对称kl散度不是对称的,而用pdist计算出的topic_similar_mat一定是对称的,因为pdist只计算上三角,所以使用pdist必须要用对称的kl散度
JS散度基于KL散度,同样是二者越相似,JS散度越小。
[python衡量数据分布的相似度/距离(KL/JS散度)]
闵可夫斯基距离(Minkowski distance)是衡量数值点之间距离的一种非常常见的方法,假设数值点 P 和 Q 坐标如下:
那么,闵可夫斯基距离定义为:
该距离最常用的 p 是 2 和 1, 前者是欧几里得距离(Euclidean distance),后者是曼哈顿距离(Manhattan distance)。假设在曼哈顿街区乘坐出租车从 P 点到 Q 点,白色表示高楼大厦,灰色表示街道:
绿色的斜线表示欧几里得距离,在现实中是不可能的。其他三条折线表示了曼哈顿距离,这三条折线的长度是相等的。
当 p 趋近于无穷大时,闵可夫斯基距离转化成切比雪夫距离(Chebyshev distance):
我们知道平面上到原点欧几里得距离(p = 2)为 1 的点所组成的形状是一个圆,当 p 取其他数值的时候呢?
闵可夫斯基距离比较直观,但是它与数据的分布无关,具有一定的局限性,如果 x 方向的幅值远远大于 y 方向的值,这个距离公式就会过度放大 x 维度的作用。所以,在计算距离之前,我们可能还需要对数据进行 z-transform 处理,即减去均值,除以标准差:
可以看到,上述处理开始体现数据的统计特性了。这种方法在假设数据各个维度不相关的情况下利用数据分布的特性计算出不同的距离。如果维度相互之间数据相关(例如:身高较高的信息很有可能会带来体重较重的信息,因为两者是有关联的),这时候就要用到马氏距离(Mahalanobis distance)了。
马氏距离实际上是利用 Cholesky transformation 来消除不同维度之间的相关性和尺度不同的性质。马氏距离的变换和 PCA 分解的白化处理颇有异曲同工之妙,不同之处在于:就二维来看,PCA 是将数据主成分旋转到 x 轴(正交矩阵的酉变换),再在尺度上缩放(对角矩阵),实现尺度相同。而马氏距离的 L逆矩阵是一个下三角,先在 x 和 y 方向进行缩放,再在 y 方向进行错切(想象矩形变平行四边形),总体来说是一个没有旋转的仿射变换。
考虑下面这张图,椭圆表示等高线,从欧几里得的距离来算,绿黑距离大于红黑距离,但是从马氏距离,结果恰好相反:
假设样本点(列向量)之间的协方差对称矩阵是 , 通过 Cholesky Decomposition(实际上是对称矩阵 LU 分解的一种特殊形式,可参考博客)可以转化为下三角矩阵和上三角矩阵的乘积: 。消除不同维度之间的相关性和尺度不同,只需要对样本点 x 做如下处理: 。处理之后的欧几里得距离就是原样本的马氏距离(为了书写方便,这里求马氏距离的平方):
Note: 这个也正是多维高斯分布的指数项的二次型,即高斯对于x的依赖的二次型表达。当为单位矩阵时,马氏距离就变成了欧氏距离。
下图蓝色表示原样本点的分布,两颗红星坐标分别是(3, 3),(2, -2):
由于 x, y 方向的尺度不同,不能单纯用欧几里得的方法测量它们到原点的距离。并且,由于 x 和 y 是相关的(大致可以看出斜向右上),也不能简单地在 x 和 y 方向上分别减去均值,除以标准差。最恰当的方法是对原始数据进行 Cholesky 变换,即求马氏距离(可以看到,右边的红星离原点较近):
将上面两个图的绘制代码和求马氏距离的代码贴在这里,以备以后查阅:
# 产生高斯分布的随机点 print '\n到原点的马氏距离分别是:' # 求变换后的欧几里得距离 print '\n变换后到原点的欧几里得距离分别是:'SimRank来自图论,说两个变量相似,因为他们链接了同一个或相似的节点。
[漫谈:机器学习中距离和相似性度量方法]
[大规模数据相似度计算时,解决数据倾斜的问题的思路之一(分块思想)]
关于两个样本x和x'的RBF核可表示为某个输入空间(input space)的特征向量,它的定义如下:
上面的分子部分 可以看做两个特征向量之间的平方欧氏距离。sigma 是一个自由参数。
因为RBF核函数的值随距离减小,并介于0(极限)和1(当x=x'的时候)之间,所以它是一种现成的相似性度量表示法。
核的特征空间有无穷多的维数;例如sigma=1时,其展开式为:
获取非线性的方式[核函数与径向基函数详解]
#根据高斯距离进行高斯坐标转换
文本语料上训练出来的特征向量习惯采用余弦距离,图片或视频上提取的特征向量一般采用欧氏距离。此外,还有特殊场景下定制的各种距离函数,此处介绍一个在搜索排序场景中使用的angular相似度度量函数,其可有效放大被召回的头部样本点之间的差异。
归一化向量之间的余弦距离可以跟欧氏距离进行直接转换,即euclidean_distance^2 = 1 - 2 * cosine_distance。所以很多代码在实现欧氏距离时先做归一化再直接相乘。
Note: 归一化向量之间的余弦距离可以跟欧氏距离进行直接转换是因为: 归一化的x^2=y^2=1,则到|x-y|^2 = 2-2x*y;通过绘图也可以看出。
ANN召回场景下:1)即使不做归一化,也可以直接让欧氏距离与余弦距离建立等价关系;2)任意向量内积的结果可与欧氏距离建立等价关系。
ANN中按欧氏距离计算出的近似K近邻点与按内积或余弦距离计算出来的近似K近邻点结果相同,所要做的仅仅是对所有待检索的向量做预处理即可,找出最大的常数φ,然后构造一个维度+1的新向量。
from:距离和相似度度量方法_皮皮blog-CSDN博客_相似度度量方法
ref: 如何计算两个文档的相似度
机器学习中的相似性度量
1、空间两个向量的向量积怎么求。
2、高数两个向量的向量积怎么求。
3、两个向量的向量积怎么求例题。
4、两个向量的向量积怎么求面积。
1.两个向量的向量积的求法是:两个向量a和b的叉积写作a×b,叉积可以定义为a×b=absinθn。
2.在这里θ表示a和b之间的角度(0°≤θ≤180°),位于这两个矢量所定义的平面上。
3.而n是一个和a、b所在平面均垂直的单位矢量。
4.向量积,也被称为叉积(即交叉乘积)、外积,是一种在向量空间中向量的二元运算。
5.和点积不同,它的运算结果是一个伪向量而不是一个标量。
6.并且两个向量的叉积和这两个向量都垂直。
总结:以上就是编辑:【上善若水】整理原创关于《
》优质内容解答希望能帮到您。