精华内容
下载资源
问答
  • ​ 在很多任务中,获取的数据是一种时序数据,而最常见的任务就是分析两个时间序列的相似性,例如语音的孤立词语音识别,时序动作分类,轨迹相似度分析等领域.2.DTW原理的一些细节(个人见解)一维变多维度(也可以使用DB...

    3abbdbe42a577ad7e00e9de2aa3d2cc8.png

    1.概述

    ​ 作为一种Metric distance, 动态时间调整算法(Dynamic Time Warping, DTW)能够测量两个不同长度的时序信号的相似程度.

    ​ 在很多任务中,获取的数据是一种时序数据,而最常见的任务就是分析两个时间序列的相似性,例如语音的孤立词语音识别,时序动作分类,轨迹相似度分析等领域.

    2.DTW原理的一些细节(个人见解)

    • 一维变多维度(也可以使用DBA)

    ​ 欧式距离是计算序列中对应点的差距,并不会重复利用序列中的点.而DTW会重复使用序列中的点,从而达到扭曲对齐的.

    ​ 假设有两个时间序列QC,他们的长度分别为nm:

    $$ Q = left{q_1,q_2,q_3,...,q_nright} $$

    $$ C = left{c_1,c_2,c_3,...,c_nright} $$

    ​ 其中qi可以为多维度的特征.当qi和cj为一维时,可以使用abs(qi-cj)来描述距离;当qi和cj为多维时,可以使用欧式距离(qi^2 - cj^2)来描述距离.

    ​ 之后的步骤与DTW完全相同.

    • 在DTW中采用其他的距离来代替欧式距离

    ​ 如果特征值qi和cj的物理特征为向量,则可以使用余弦距离;如果特征值为编码,可以考虑使用最大公共子串或者汉明距离来衡量.

    • DTW作为一种是一种很"老"的metric learning方法,DTW性能由输入的特征值决定,特征值很差,则DTW表现很差.所以使用DTW前要做好特征提取的工作.

    3.DTW的应用

    • 孤立词语音识别:这个很常见,就不再描述.
    • 时序动作分类:提取人体骨骼点(Openpose)时间序列,然后提供一个标准动作,将输入骨骼与标准动作序列进行DTW对比,得到一个差距,然后不同的动作序列具有不同的DTW距离,这样就可以根据距离对动作的种类进行分类.参考文献
    • 轨迹相似度分析:将两个轨迹的序列送入DTW进行对比,得到距离.这种方法相对较为笼统,可以对轨迹分段,然后再提取一些特征,然后对特征DTW.参考文献

    4.Python代码

    import numpy as np
    ## DTW Distance
        def d(self,x,y):
            return np.sum((x-y)**2)
    
        def dtw_distance(self, mww=10000):
    
            ts_a = self.s1
            ts_b = self.s2
            M, N = np.shape(ts_a)[1], np.shape(ts_b)[1]
    
            cost = np.ones((M, N))
    
            # Initialize the first row and column
            cost[0, 0] = self.d(ts_a[:,0], ts_b[:,0])
            for i in range(1, M):
                cost[i, 0] = cost[i-1, 0] + self.d(ts_a[:,i], ts_b[:,0])
    
            for j in range(1, N):
                cost[0, j] = cost[0, j-1] + self.d(ts_a[:,0], ts_b[:,j])
    
            # Populate rest of cost matrix within window
            for i in range(1, M):
                for j in range(max(1, i - mww), min(N, i + mww)):
                    choices = cost[i-1, j-1], cost[i, j-1], cost[i-1, j]
                    cost[i, j] = min(choices) + self.d(ts_a[:,i], ts_b[:,j])
    
            # Return DTW distance given window 
            return cost[-1, -1]
    展开全文
  • ​ 在很多任务中,获取的数据是一种时序数据,而最常见的任务就是分析两个时间序列的相似性,例如语音的孤立词语音识别,时序动作分类,轨迹相似度分析等领域.2.DTW原理的一些细节(个人见解)一维变多维度(也可以使用DB...

    4834ea6a67a9040d28d2ed2a6594d53a.png

    1.概述

    ​ 作为一种Metric distance, 动态时间调整算法(Dynamic Time Warping, DTW)能够测量两个不同长度的时序信号的相似程度.

    ​ 在很多任务中,获取的数据是一种时序数据,而最常见的任务就是分析两个时间序列的相似性,例如语音的孤立词语音识别,时序动作分类,轨迹相似度分析等领域.

    2.DTW原理的一些细节(个人见解)

    • 一维变多维度(也可以使用DBA)

    ​ 欧式距离是计算序列中对应点的差距,并不会重复利用序列中的点.而DTW会重复使用序列中的点,从而达到扭曲对齐的.

    ​ 假设有两个时间序列QC,他们的长度分别为nm:

    $$ Q = left{q_1,q_2,q_3,...,q_nright} $$

    $$ C = left{c_1,c_2,c_3,...,c_nright} $$

    ​ 其中qi可以为多维度的特征.当qi和cj为一维时,可以使用abs(qi-cj)来描述距离;当qi和cj为多维时,可以使用欧式距离(qi^2 - cj^2)来描述距离.

    ​ 之后的步骤与DTW完全相同.

    • 在DTW中采用其他的距离来代替欧式距离

    ​ 如果特征值qi和cj的物理特征为向量,则可以使用余弦距离;如果特征值为编码,可以考虑使用最大公共子串或者汉明距离来衡量.

    • DTW作为一种是一种很"老"的metric learning方法,DTW性能由输入的特征值决定,特征值很差,则DTW表现很差.所以使用DTW前要做好特征提取的工作.

    3.DTW的应用

    • 孤立词语音识别:这个很常见,就不再描述.
    • 时序动作分类:提取人体骨骼点(Openpose)时间序列,然后提供一个标准动作,将输入骨骼与标准动作序列进行DTW对比,得到一个差距,然后不同的动作序列具有不同的DTW距离,这样就可以根据距离对动作的种类进行分类.参考文献
    • 轨迹相似度分析:将两个轨迹的序列送入DTW进行对比,得到距离.这种方法相对较为笼统,可以对轨迹分段,然后再提取一些特征,然后对特征DTW.参考文献

    4.Python代码

    import numpy as np
    ## DTW Distance
        def d(self,x,y):
            return np.sum((x-y)**2)
    
        def dtw_distance(self, mww=10000):
    
            ts_a = self.s1
            ts_b = self.s2
            M, N = np.shape(ts_a)[1], np.shape(ts_b)[1]
    
            cost = np.ones((M, N))
    
            # Initialize the first row and column
            cost[0, 0] = self.d(ts_a[:,0], ts_b[:,0])
            for i in range(1, M):
                cost[i, 0] = cost[i-1, 0] + self.d(ts_a[:,i], ts_b[:,0])
    
            for j in range(1, N):
                cost[0, j] = cost[0, j-1] + self.d(ts_a[:,0], ts_b[:,j])
    
            # Populate rest of cost matrix within window
            for i in range(1, M):
                for j in range(max(1, i - mww), min(N, i + mww)):
                    choices = cost[i-1, j-1], cost[i, j-1], cost[i-1, j]
                    cost[i, j] = min(choices) + self.d(ts_a[:,i], ts_b[:,j])
    
            # Return DTW distance given window 
            return cost[-1, -1]
    展开全文
  • PCA原理

    2013-08-23 10:18:03
    PCA是主成分分析,主要用于数据降维,对于系列sample的...所以我们的目的是找那些变化大的元素,即方差大的那些,而去除掉那些变化不大的,从而使feature留下的都是“精品”,而且计算量也小了。 对于

    PCA是主成分分析,主要用于数据降维,对于一系列sample的feature组成的多维向量,多维向量里的某些元素本身没有区分性,比如某个元素在所有的sample中都为1,或者与1差距不大,那么这个元素本身就没有区分性,用它做特征来区分,贡献会非常小。所以我们的目的是找那些变化大的元素,即方差大的那些维,而去除掉那些变化不大的维,从而使feature留下的都是“精品”,而且计算量也变小了。

    对于一个k维的feature来说,相当于它的每一维feature与其他维都是正交的(相当于在多维坐标系中,坐标轴都是垂直的),那么我们可以变化这些维的坐标系,从而使这个feature在某些维上方差大,而在某些维上方差很小。例如,一个45度倾斜的椭圆,在第一坐标系,如果按照x,y坐标来投影,这些点的x和y的属性很难用于区分他们,因为他们在x,y轴上坐标变化的方差都差不多,我们无法根据这个点的某个x属性来判断这个点是哪个,而如果将坐标轴旋转,以椭圆长轴为x轴,则椭圆在长轴上的分布比较长,方差大,而在短轴上的分布短,方差小,所以可以考虑只保留这些点的长轴属性,来区分椭圆上的点,这样,区分性比x,y轴的方法要好!

    所以我们的做法就是求得一个k维特征的投影矩阵,这个投影矩阵可以将feature从高维降到低维。投影矩阵也可以叫做变换矩阵。新的低维特征必须每个维都正交,特征向量都是正交的。通过求样本矩阵的协方差矩阵,然后求出协方差矩阵的特征向量,这些特征向量就可以构成这个投影矩阵了。特征向量的选择取决于协方差矩阵的特征值的大小。

    举一个例子:

    对于一个训练集,100个sample,特征是10维,那么它可以建立一个100*10的矩阵,作为样本。求这个样本的协方差矩阵,得到一个10*10的协方差矩阵,然后求出这个协方差矩阵的特征值和特征向量,应该有10个特征值和特征向量,我们根据特征值的大小,取前四个特征值所对应的特征向量,构成一个10*4的矩阵,这个矩阵就是我们要求的特征矩阵,100*10的样本矩阵乘以这个10*4的特征矩阵,就得到了一个100*4的新的降维之后的样本矩阵,每个sample的维数下降了。

    当给定一个测试的特征集之后,比如1*10维的特征,乘以上面得到的10*4的特征矩阵,便可以得到一个1*4的特征,用这个特征去分类。

    所以做PCA实际上是求得这个投影矩阵,用高维的特征乘以这个投影矩阵,便可以将高维特征的维数下降到指定的维数。

    在opencv里面有专门的函数,可以得到这个这个投影矩阵(特征矩阵)。

    1. void cvCalcPCA( const CvArr* data, CvArr* avg, CvArr* eigenvalues, CvArr* eigenvectors, int flags );  





    在OPENCV中使用PCA非常简单,只要几条语句就可以了。
    1、初始化数据
    //每一行表示一个样本
    CvMat* pData = cvCreateMat( 总的样本数, 每个样本的维数, CV_32FC1 );
    CvMat* pMean = cvCreateMat(1, 样本的维数, CV_32FC1);
    //pEigVals中的每个数表示一个特征值
    CvMat* pEigVals = cvCreateMat(1, min(总的样本数,样本的维数), CV_32FC1);
    //每一行表示一个特征向量
    CvMat* pEigVecs = cvCreateMat( min(总的样本数,样本的维数), 样本的维数, CV_32FC1);
    2、PCA处理,计算出平均向量pMean,特征值pEigVals和特征向量pEigVecs
    cvCalcPCA( pData, pMean, pEigVals, pEigVecs, CV_PCA_DATA_AS_ROW );
    3、选出前P个特征向量(主成份),然后投影,结果保存在pResult中,pResult中包含了P个系数
    CvMat* pResult = cvCreateMat( 总的样本数, PCA变换后的样本维数(即主成份的数目), CV_32FC1 );
    cvProjectPCA( pData, pMean, pEigVecs, pResult );
    4、 重构,结果保存在pRecon中
    CvMat* pRecon = cvCreateMat( 总的样本数, 每个样本的维数, CV_32FC1 );
    cvBackProjectPCA( pResult, pMean, pEigVecs, pRecon );
    5、重构误差的计算
    计算pRecon和pData的"差"就可以了.
    使用时如果是想用PCA判断“是非”问题,则可以先用正样本计算主成分,判断时,对需要判断得数据进行投影,然后重构,计算重构出的数据与原数据的差异,如果差异在给定范围内,可以认为“是”。
    如果相用PCA进行分类,例如对数字进行分类,则先用所有数据(0-9的所有样本)计算主成分,然后对每一类数据进行投影,计算投影的系数,可简单得求平 均。即对每一类求出平均系数。分类时,将需要分类得数据进行投影,得到系数,与先前计算出得每一类得平均系数进行比较,可判为最接近得一类。当然这只是最 简单得使用方法。

    参考:
    http://www.cnblogs.com/cvlabs/archive/2010/05/14/1735230.html


    展开全文
  • 对于一个函数,可能是一维或者多维的变量,给一个增量使它的值小,要使在这一步得最小,即下降最快,根据泰勒展开 这里舍去二阶导数后面的小量,那么要取得最小的值,就要使最小,向量的内积 当且仅...

    梯度下降法、牛顿法早就知道,怎么使用也很简单,但一直没搞太明白,为什么“梯度方向就是下降最快的方向”?什么站在山顶往下走只是结果,根本没解释原因,这次终于搞清楚了,写下来以防忘记。

    梯度下降法

    对于一个函数f(x)x可能是一维或者多维的变量,给x一个增量\Delta x使它的值变小,要使f(x+\Delta x)在这一步变得最小,即下降最快,根据泰勒展开

    f(x+\Delta x)=f(x)+{f}'(x)^{T}\Delta x+...

    这里舍去二阶导数后面的小量,那么要取得最小的f(x+\Delta x)值,就要使{f}'(x)^{T}\Delta x最小,向量的内积

    \left |{f}'(x)^{T}\Delta x \right |\geq -\left | {f}'(x) \right |\left | \Delta x \right |

    当且仅当\Delta x =- {f}'(x),上述不等式的等号成立。

    以上,说明梯度方向确实是函数在当前位置x最快下降的方向,同理可得\Delta x = {f}'(x)是最快上升的方向。

    牛顿法

    牛顿法是一种比梯度下降法速度更快的算法,这是因为它在泰勒展开时考虑了更精确,保留二阶导数的泰勒展开如下

    f(x+\Delta x)=f(x)+{f}'(x)^{T}\Delta x+\frac{1}{2}\Delta {x}^{T}{f}''(x)\Delta {x}

    这里的二阶导数项实际上是一个Hessian matrix,如下图,{f}''(x)=H(f)

    H(f)={\begin{bmatrix}{\frac  {\partial ^{2}f}{\partial x_{1}^{2}}}&{\frac  {\partial ^{2}f}{\partial x_{1}\,\partial x_{2}}}&\cdots &{\frac  {\partial ^{2}f}{\partial x_{1}\,\partial x_{n}}}\\\\{\frac  {\partial ^{2}f}{\partial x_{2}\,\partial x_{1}}}&{\frac  {\partial ^{2}f}{\partial x_{2}^{2}}}&\cdots &{\frac  {\partial ^{2}f}{\partial x_{2}\,\partial x_{n}}}\\\\\vdots &\vdots &\ddots &\vdots \\\\{\frac  {\partial ^{2}f}{\partial x_{n}\,\partial x_{1}}}&{\frac  {\partial ^{2}f}{\partial x_{n}\,\partial x_{2}}}&\cdots &{\frac  {\partial ^{2}f}{\partial x_{n}^{2}}}\end{bmatrix}}

    这时候我们从该式不再能轻易找到最小值,因此我们将二阶展开式对\Delta x求导并令其为0,

    {f}'(x)^{T}+H(f)\Delta {x}=0

    因此得\Delta {x}=-H(f)^{-1}{f}'(x)^{T}

    在这一过程中可以发现牛顿法有效是假设了上述求导置零得到的点就是最小值处,实际上他也可能是最大值点、驻点、鞍点等,因此牛顿法虽快但有更多的限制条件。函数要有连续二阶导数;海森矩阵是正定的,函数是凸函数,才能保证收敛(……深入的我也还没搞懂)。

     

    展开全文
  • ​ 在很多任务中,获取的数据是一种时序数据,而最常见的任务就是分析两个时间序列的相似性,例如语音的孤立词语音识别,时序动作分类,轨迹相似度分析等领域.2.DTW原理的一些细节(个人见解)一维变多维度(也可以使用DB...
  • 2.1Java数组

    2020-08-11 12:15:40
    文章目录一维数组数组的概念数组的定义数组的初始化动态初始化静态初始化数组的注意事项数组的遍历冒泡排序冒泡排序原理冒泡排序效果示例代码多维数组 在Java中,如果想要保存多个相同类型的值,我们就要使用个数组...
  • 《最优化理论与方法》

    千次阅读 2011-04-26 20:10:00
    第二篇,非线性规划:非线性规划数学基础,一维最优化方法,无约束多维非线性规划方法,约束问题的非线性规划方法,非线性规划中的一些其他方法; 第三篇,智能优化方法; 第四篇,分法与动态规划...
  • C#科学计算讲义[光盘源码]

    热门讨论 2013-10-22 16:15:41
    9.1 一维搜索之黄金分割法 305 9.1.1 基本原理 305 9.1.2 实验内容与数据 306 9.1.3 程序源代码 306 9.1.4 实验结论 310 9.2 连续抛物线插值法 311 9.2.1 基本原理 311 9.2.2 实验内容与数据 312 ...
  • 14.6 编码器解码器交互的差错控制 14.7 H.263和MPEG-4中的差错复原工具 14.8 小结 14.9 习题 14.10 文献目录 第15章 因特网和无线IP网络上的流视频 15.1 视频流系统的结构 15.2 视频压缩 15.3 流视频的应用层QoS...
  • 5.2.1一维情况 5.2.2 多维情况 5.3 模拟非连续现象的DSPH公式 5.3.1 DSPH公式 5.3.2 非连续的确定 5.4 数值性能研究 5.5 冲击波的模拟 5.6 结论 第6章 SPH在爆炸模拟中的应用 6.1 引言 6.2 HE爆炸和控制方程 6.2.1 ...
  • HITS算法是另外个链接算法,部分原理与PageRank算法是比较相似的,HITS算法引入了权威值和中心值的概念,HITS算法是受用户查询条件影响的,他一般用于小规模的数据链接分析,也更容易遭受到攻击。详细介绍链接 K-...
  • 13·4 一维随机变量的数学特征 13·5 随机向量的数字特征 13·6 母函数与特征函数 13·7 常用分布简表 13·8 极限定理 附录 第十四章 纯粹数学选题 14·1 集论 14·2 代数结构 14·3 一般拓扑学 14·4 勒贝格积分 14...
  • 陈 雪 -《问题中的与不变》 何 森 -《浅谈数据的合理组织》 胡伯涛 -《最小割模型在信息学竞赛中的应用》 陈瑜希 -《多角度思考创造性思维——运用树型动态规划解题的思路和方法探析》 周 冬 -《生成树的计数...
  • C# Primer Plus中文版

    热门讨论 2009-05-24 00:25:01
    1.1 C#是种面向对象编程语言 2 1.2 硬件 3 1.2.1 主存储器的实质 4 1.2.2 数字系统 5 1.2.3 字节 5 1.2.4 文件 6 1.3 软件 6 1.3.1 执行C#程序的大致过程 7 1.3.2 操作系统 7 1.3.3 编程语言和编译器 7 1.3.4 .NET...
  • 石润婷 -《隐蔽化、多维化、开放化──论当今信息学竞赛中数学建模的灵活性》 杨 帆 -《准确性、全面性、美观性——测试数据设计中的三要素》 周咏基 -《论随机化算法的原理与设计》 ## 2000 陈 彧 《信息学...
  • 于是,我们现在面临经济学中经常遇到的个难题:如何使用二的图形表达多维的函数关系?方程式212就是应用这种分析技巧进行简化的结果:  Qd=f(P,Ps,Pc,I,N,…) (2.1.2) 决定需求量的参数可分为两...
  • C# For Unity系列之中级篇

    千人学习 2019-04-29 09:39:49
    C) 多维数据(常用二数组)与交错数组。     D) 可参数 Params     E) 进一步解释“实参”,“形参”。     F) 类的实例化内存分配机制。 二:深入学习对象...
  • 疯狂JAVA讲义

    2014-10-17 13:35:01
    这样不可以扩展成三数组吗?甚至扩展到更多维的数组? 101 4.6.5 操作数组的工具类 102 4.6.6 数组的应用举例 103 4.7 本章小结 106 本章练习 106 第5章 面向对象(上) 107 5.1 类和对象 108 5.1.1 定义类...
  • 最后,读者将学习如何创建二数组以及如何使用嵌套循环来处理它们。 第6章:分支语句和逻辑操作符 如果程序可以根据实际情况调整执行,我们就说程序能够智能地行动。在本章,读者将了解到如何使用if 、if else...
  • 最后,读者将学习如何创建二数组以及如何使用嵌套循环来处理它们。 第6章:分支语句和逻辑操作符 如果程序可以根据实际情况调整执行,我们就说程序能够智能地行动。在本章,读者将了解到如何使用if 、if else...
  • 最后,读者将学习如何创建二数组以及如何使用嵌套循环来处理它们。 第6章:分支语句和逻辑操作符 如果程序可以根据实际情况调整执行,我们就说程序能够智能地行动。在本章,读者将了解到如何使用if 、if else...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

一维变多维原理