精华内容
下载资源
问答
  • 论文研究-一种基于趋势分形维数的股指时间序列相似性分析方法.pdf, 为了提高股指时间序列相似性分析的准确性, 提出趋势分形维数的概念, 并基于此定义了相似性分析方法. ...
  • 现有的多元时间序列相似性度量方法难以平衡度量准确性和计算效率之间的矛盾。针对该问题,首先,对多元时间序列进行多维分段拟合;然后,选取各分段上序列点的均值作为特征;最后,以特征序列作为输入,利用动态时间...
  • 在经典的时间序列相似分析方法基础上,论文讨论了一些有代表性的现代时间序列相似性分析方法。对其基本思想加以分析和提炼,总结了这些方法的优缺点,为时间序列分析研究提供了较为完整的成果概览。
  • 为此,主要针对多元时间序列的相似性搜索进行综述,归纳了主要的相似模式度量方法,对比了不同相似模式度量下的序列搜索方法,并分析了不同方法的优缺点,以期为进一步研究多元时间序列相似性搜索提供帮助.
  • 针对欧几里德距离描述分段趋势的不足和各种模式距离对应分段之间距离值的离散化问题,提出一种基于形态相似距离的时间序列相似性度量方法,标准数据集上完成的识别和聚类实验表明了该方法的可行性和有效性。
  • 时间序列相似性

    万次阅读 2017-10-11 14:59:17
    对于两个序列来说,如果要比较两个波形的相似程度,可以使用DWT(动态时间规整)的方法...DTW通过把时间序列进行延伸和缩短,来计算两个时间序列性之间的相似性。 1,两个要进行匹配的数据A=[A1,A2,...An]和B=[B1,B

     对于两个序列来说,如果要比较两个波形的相似程度,可以使用DWT(动态时间规整)的方法。对于dwt方法,可以解决处理两个长度不一样的序列。

    DTW是一种衡量两个时间序列之间的相似度的方法,主要应用在语音识别领域来识别两段语音是否表示同一个单词,度量的特征量是:两个序列之间的最短距离。

    原理:

    DTW通过把时间序列进行延伸和缩短,来计算两个时间序列性之间的相似性。

    1,两个要进行匹配的数据A=[A1,A2,...An]和B=[B1,B2,...Bm]

    归整路径的形式为W=w1,w2,...,wK,其中Max(|A|,|B|)<=K<=|A|+|B|。

    wk的形式为(i,j),其中i表示的是A中的i坐标,j表示的是B中的j坐标.

    归整路径W必须从w1=(1,1)开始,到wK=(|X|,|Y|)结尾,以保证X和Y中的每个坐标都在W中出现.

    (i,j)必须是单调增加的,从w(a1,a2)沿着某条路径到达w(am,bn)。

    找路径满足:假如当前节点是w(ai,bj),那么下一个节点必须是在   w(i+1,j),w(i,j+1),w(i+1,j+1)之间选择,并且路径必须是最短的。

    计算的时候是按照动态规划的思想计算,也就是说在计算到达第(i,j)个节点的最短路径时候,考虑的是左下角也即第(i-1,j)、(i-1,j-1)、(i,j-1)这三个点到(i,j)的最短距离。

    最后的目标是要找到一个在两个序列之间的最短距离以及实现这个最短距离的路径。

    距离选用任意经典的距离计算方法:欧几里得距离

    2,代码实现-matlab

    function [Dist,D,k,w,rw,tw]=dtw(r,t,pflag)
    %
    % [Dist,D,k,w,rw,tw]=dtw(r,t,pflag)
    %
    % Dynamic Time Warping Algorithm
    % Dist is unnormalized distance between t and r
    % D is the accumulated distance matrix
    % k is the normalizing factor
    % w is the optimal path
    % t is the vector you are testing against
    % r is the vector you are testing
    % rw is the warped r vector
    % tw is the warped t vector
    % pflag  plot flag: 1 (yes), 0(no)
    %
    % Version comments:
    % rw, tw and pflag added by Pau Mic
    
    [row,M]=size(r); if (row > M) M=row; r=r'; end;
    [row,N]=size(t); if (row > N) N=row; t=t'; end;
    d=sqrt((repmat(r',1,N)-repmat(t,M,1)).^2); %this makes clear the above instruction Thanks Pau Mic
    dd=abs(repmat(r',1,N)-repmat(t,M,1));
    dd
    d
    D=zeros(size(d));
    D(1,1)=d(1,1);
    
    for m=2:M
        D(m,1)=d(m,1)+D(m-1,1);
    end
    for n=2:N
        D(1,n)=d(1,n)+D(1,n-1);
    end
    for m=2:M
        for n=2:N
            D(m,n)=d(m,n)+min(D(m-1,n),min(D(m-1,n-1),D(m,n-1))); % this double MIn construction improves in 10-fold the Speed-up. Thanks Sven Mensing
        end
    end
    
    Dist=D(M,N);
    n=N;
    m=M;
    k=1;
    w=[M N];
    w
    while ((n+m)~=2)
        if (n-1)==0
            m=m-1;
        elseif (m-1)==0
            n=n-1;
        else
            [values,number]=min([D(m-1,n),D(m,n-1),D(m-1,n-1)]);
            switch number
                case 1
                    m=m-1;
                case 2
                    n=n-1;
                case 3
                    m=m-1;
                    n=n-1;
            end
        end
        k=k+1;
        w=[m n; w]; % this replace the above sentence. Thanks Pau Mic
    end
    [values,number]
    D
    m
    n
    w
    % warped waves
    rw=r(w(:,1));
    tw=t(w(:,2));
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if pflag
        
        % --- Accumulated distance matrix and optimal path
        figure('Name','DTW - Accumulated distance matrix and optimal path', 'NumberTitle','off');
        
        main1=subplot('position',[0.19 0.19 0.67 0.79]);
        image(D);
        cmap = contrast(D);
        colormap(cmap); % 'copper' 'bone', 'gray' imagesc(D);
        hold on;
        x=w(:,1); y=w(:,2);
        ind=find(x==1); x(ind)=1+0.2;
        ind=find(x==M); x(ind)=M-0.2;
        ind=find(y==1); y(ind)=1+0.2;
        ind=find(y==N); y(ind)=N-0.2;
        plot(y,x,'-w', 'LineWidth',1);
        hold off;
        axis([1 N 1 M]);
        set(main1, 'FontSize',7, 'XTickLabel','', 'YTickLabel','');
        
        colorb1=subplot('position',[0.88 0.19 0.05 0.79]);
        nticks=8;
        ticks=floor(1:(size(cmap,1)-1)/(nticks-1):size(cmap,1));
        mx=max(max(D));
        mn=min(min(D));
        ticklabels=floor(mn:(mx-mn)/(nticks-1):mx);
        colorbar(colorb1);
        set(colorb1, 'FontSize',7, 'YTick',ticks, 'YTickLabel',ticklabels);
        set(get(colorb1,'YLabel'), 'String','Distance', 'Rotation',-90, 'FontSize',7, 'VerticalAlignment','bottom');
        
        left1=subplot('position',[0.07 0.19 0.10 0.79]);
        plot(r,M:-1:1,'-b');
        set(left1, 'YTick',mod(M,10):10:M, 'YTickLabel',10*rem(M,10):-10:0)
        axis([min(r) 1.1*max(r) 1 M]);
        set(left1, 'FontSize',7);
        set(get(left1,'YLabel'), 'String','Samples', 'FontSize',7, 'Rotation',-90, 'VerticalAlignment','cap');
        set(get(left1,'XLabel'), 'String','Amp', 'FontSize',6, 'VerticalAlignment','cap');
        
        bottom1=subplot('position',[0.19 0.07 0.67 0.10]);
        plot(t,'-r');
        axis([1 N min(t) 1.1*max(t)]);
        set(bottom1, 'FontSize',7, 'YAxisLocation','right');
        set(get(bottom1,'XLabel'), 'String','Samples', 'FontSize',7, 'VerticalAlignment','middle');
        set(get(bottom1,'YLabel'), 'String','Amp', 'Rotation',-90, 'FontSize',6, 'VerticalAlignment','bottom');
        
        % --- Warped signals
        figure('Name','DTW - warped signals', 'NumberTitle','off');
        
        subplot(1,2,1);
        set(gca, 'FontSize',7);
        hold on;
        plot(r,'-bx');
        plot(t,':r.');
        hold off;
        axis([1 max(M,N) min(min(r),min(t)) 1.1*max(max(r),max(t))]);
        grid;
        legend('signal 1','signal 2');
        title('Original signals');
        xlabel('Samples');
        ylabel('Amplitude');
        
        subplot(1,2,2);
        set(gca, 'FontSize',7);
        hold on;
        plot(rw,'-bx');
        plot(tw,':r.');
        hold off;
        axis([1 k min(min([rw; tw])) 1.1*max(max([rw; tw]))]);
        grid;
        legend('signal 1','signal 2');
        title('Warped signals');
        xlabel('Samples');
        ylabel('Amplitude');
        
    end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %% test
    clear  
    clc  
    a=[8 9 1 9 6 1 3 5]';  
    b=[2 5 4 6 7 8 3 7 7 2]';  
    [Dist,D,k,w,rw,tw] = DTW(a,b,1);  
    fprintf('最短距离为%d\n',Dist)  
    fprintf('最优路径为')  
    w
    


    3,代码实现-python code1--画图

    from math import *
    import matplotlib.pyplot as plt
    import numpy
    
    def print_matrix(mat) :
        print '[matrix] width : %d height : %d' % (len(mat[0]), len(mat))
        print '-----------------------------------'
        for i in range(len(mat)) :
            print mat[i]#[v[:2] for v in mat[i]]
    
    def dist_for_float(p1, p2) :
        dist = 0.0
        elem_type = type(p1)
        if  elem_type == float or elem_type == int :
            dist = float(abs(p1 - p2))
        else :
            sumval = 0.0
            for i in range(len(p1)) :
                sumval += pow(p1[i] - p2[i], 2)
            dist = pow(sumval, 0.5)
        return dist
    
    def dtw(s1, s2, dist_func) :
        w = len(s1)
        h = len(s2)
        
        mat = [([[0, 0, 0, 0] for j in range(w)]) for i in range(h)]
        
        #print_matrix(mat)
        
        for x in range(w) :
            for y in range(h) :            
                dist = dist_func(s1[x], s2[y])
                mat[y][x] = [dist, 0, 0, 0]
                
        #print_matrix(mat)
    
        elem_0_0 = mat[0][0]
        elem_0_0[1] = elem_0_0[0] * 2
    
        for x in range(1, w) :
            mat[0][x][1] = mat[0][x][0] + mat[0][x - 1][1]
            mat[0][x][2] = x - 1
            mat[0][x][3] = 0
    
        for y in range(1, h) :
            mat[y][0][1] = mat[y][0][0] + mat[y - 1][0][1]            
            mat[y][0][2] = 0
            mat[y][0][3] = y - 1
    
        for y in range(1, h) :
            for x in range(1, w) :
                distlist = [mat[y][x - 1][1], mat[y - 1][x][1], 2 * mat[y - 1][x - 1][1]]
                mindist = min(distlist)
                idx = distlist.index(mindist)
                mat[y][x][1] = mat[y][x][0] + mindist
                if idx == 0 :
                    mat[y][x][2] = x - 1
                    mat[y][x][3] = y
                elif idx == 1 :
                    mat[y][x][2] = x
                    mat[y][x][3] = y - 1
                else :
                    mat[y][x][2] = x - 1
                    mat[y][x][3] = y - 1
    
        result = mat[h - 1][w - 1]
        retval = result[1]
        path = [(w - 1, h - 1)]
        while True :
            x = result[2]
            y = result[3]
            path.append((x, y))
    
            result = mat[y][x]
            if x == 0 and y == 0 :
                break
            
        #print_matrix(mat)
    
        return retval, sorted(path)
    
    def display(s1, s2) :
    
        val, path = dtw(s1, s2, dist_for_float)
        
        w = len(s1)
        h = len(s2)
        
        mat = [[1] * w for i in range(h)]
        for node in path :
            x, y = node
            mat[y][x] = 0
    
        mat = numpy.array(mat)
        
        plt.subplot(2, 2, 2)
        c = plt.pcolor(mat, edgecolors='k', linewidths=4)
        plt.title('Dynamic Time Warping (%f)' % val)
    
        plt.subplot(2, 2, 1)
        plt.plot(s2, range(len(s2)), 'g')
        
        plt.subplot(2, 2, 4)
        plt.plot(range(len(s1)), s1, 'r')
            
    
        plt.show()
        
    
    s1 = [1, 2, 3, 4, 5, 5, 5, 4]
    s2 = [3, 4, 5, 5, 5, 4]
    s2 = [1, 2, 3, 4, 5, 5]
    s2 = [2, 3, 4, 5, 5, 5]
    #val, path = dtw(s1, s2, dist_for_float)
    display(s1, s2)
    


    4,代码实现-python  code2-只计算距离

    import numpy as np
    from numpy import *
    from numpy.matlib import repmat
    
    
    def DTW(r, t, plt=True):
        M = len(r)
        N = len(t)
        r_array = np.matrix(r)
        t_array = np.matrix(t)
        ### 距离计算公式
        distance_classical = abs(repmat(r_array.T, 1, N) - repmat(t_array, M, 1))
        D = np.zeros(shape(distance_classical))
        for m in range(1, M):
            D[m, 0] = distance_classical[m, 0] + D[m - 1, 0]
        for n in range(1, N):
            D[0, n] = distance_classical[0, n] + D[0, n - 1]
        for m in range(1, M):
            for n in range(1, N):
                D[m, n] = distance_classical[m, n] + min(D[m - 1, n], min(D[m - 1, n - 1], D[m, n - 1]))
        Dist = D[m, n]




    展开全文
  • 分析了当前主流的时间序列相似性度量算法,分别指出了各度量算法在度量时序数据相似性时存在的缺陷,并提出了基于数学形态学的时间序列相似性度量算法。通过将归一化的时间序列二值图像化表示,再引入了图像处理领域...
  • 台风相似性度量方法的研究对防灾减灾、辅助决策等具有重要...最后,针对台风时间序列的不等长问题,设计了一种基于主成分分析和动态时间弯曲距离的相似性度量方法。通过实验验证,该方法能够实现台风相似性的有效度量。
  • 为提高多维时间序列相似性搜索的效率,利用多维时间序列的协方差矩阵的特征值和特征向量构造加权Frobe- nius范数,将其作为多维时间序列主元之间距离,并将其用于对多维时间序列主元相似度的度量.在相似性搜索算法中...
  • 针对现有经典的时序数据相似性度量方法共同主成分分析(CPCA)和二维奇异值分解(2DSVD)中存在无法保存时序数据集合中蕴涵的某些重要局部特征的问题,提出了基于数据分块方式的CPCA方法和2DSVD方法。该算法首先对...
  • 在时间序列数据挖掘中, 时间序列相似性是一个重要的概念. 对于诸多算法而言, 能否与一种合适的相似性度量方法结合应用, 对其挖掘性能有着关键影响. 然而, 至今仍没有统一的度量相似性的方法. 对此, 首先综述了常用的...
  • 使用分层聚类算法分析它们在不同的交通流状态辨识中的效果,以此确定交通流时间序列的模式相似性度量方法。以上海南北高架东侧间部分路段固定线圈检测数据为例进行了实证分析,最终确定模式距离与欧氏距离组合方式为...
  • 分别分析时间序列特征表示和相似性度量在数据挖掘中的作用和意义, 对目前已有的主要方法进行了综述, 分析各自存在的优缺点; 同时, 探讨了将来值得关注的问题, 为进一步研究时间序列数据的特征表示和相似性度量提供...
  • 把匹配抽象时间序列相似性的方法引入到地震预报的应用中,结合大量地震历史源数据,地震领域...匹配实验分析,取得了可信度较高的实验结果,实验结果验证了所给时间序列相似性匹配控制策略的有效性、实 用性以及算法的优越
  • 时间序列相似性搜索总结

    万次阅读 2015-08-17 21:58:10
    对时序相似性搜索进行了总结,时序相似性搜索主要包括时序数据呈现技术以及时序数据相似性测量。这篇博文是对读过的论文的总结,对时序数据相似性搜索的过程梳理出一个框架。

    前言

    前段时间一直在看时间序列相似性搜索(Time Series Similarity Search)的相关论文,现在终于放暑假了,开心度假中,也正好对那段时间读的论文做些总结。

    首先来说明一下什么是时间序列(Time Series,以下简称时序),时序就是按相等的时间采样的数据点构成的序列,数据点是几维的就叫几维时序。实际中一般以一维和二维时序居多。与时序类似的关键词还有轨迹(trajectory),按我的理解他们的区别就是轨迹不一定是等时间间隔采样的,而时序一般是指按等时间间隔采样的序列。

    其实时序数据挖掘是一个比较热门的研究领域,因为现实生活中很多东西都能看做时序,比如股票的波动数据,病人的心电图数据等,或者更复杂的采样时间间隔不等的轨迹,也能通过等间隔插值的方法近似成时序然后进行处理。 因此时序能描述的东西是很多的,对它的研究也进行了很长时间了,现在依然非常热门。

    回到主题,那么时序搜索有什么用呢?如果能在历史的数据中找到与现在相似的时序,这可能能帮助我们预测时序未来的走势。此外,时序相似性搜索也是很多其他时序数据挖掘的基础,比如时序数据的分类和聚类等。

    正文

    下面开始说明怎样进行时序相似性搜索,我们的目的是给定一个时序查询Q,然后从一个时序数据库中返回与Q最相似的时序。

    数据预处理

    首先,由于时序是典型的高维数据,数据点可能相当多(你想啊,心电图可能几毫秒就采样一个点,这存下来几年的数据得有多少,当然,一条时序具体有多少个点还得看你怎么分割这些数据),我们需要预处理,需要将原始数据以一种合适的方式来呈现,以方便后期的处理,这种技术叫做时序呈现(time series representation),其实也就是维度缩减技术,目的是压缩数据但是保留主要信息。这类技术包括离散傅里叶变换(DFT),离散小波变换(DWT),主成分分析(PCA),奇异值分解(SVD),PAA,SAX等,这些东西可以在一些综述中找到,如09年的一篇综述“高效时序相似搜索技术“。

    另外,为了减少平移和缩放对相似性的影响,我们需要对原始数据进行标准化,常用的方法是z标准化(Z-score),就是每个数据点减去平均值,再除以偏标准差。公式为

    xμσ

    其中 μ 表示平均值, σ 表示标准差。
    对每一维数据经过这样处理后,每一维数据的平均值就变为0,标准差为1.
    至此,数据预处理部分完毕。

    相似性测量

    为了比较两个时序,我们需要一种评价方法来测量他们的相似性。最简单的,可以用欧氏距离(Euclidean Distance,以下简称ED)来测量。公式为

    ED(S,Q)=i=1n(SiQi)2

    但是欧式距离的缺点也很明显,一是它只能测量长度相等的时序,二是它对噪声是敏感的,因为个别很远的偏离平均值的点可能对结果造成很大的影响。
    为了克服这些缺点,人们又发明出了其他更好的测度。比如动态时间规整(dynamic time warping,DTW),最长公共子序列(LCSS)等。
    他们的公式为 LCSS&DTW公式
    公式中dist为点与点之间的距离计算函数,一般选用欧氏距离。
    推荐一篇论文”Experimental comparison of representation methods and distance measures for time series data”,这篇论文通过实验比较分析了不同的数据呈现技术以及时序测量技术。有很多论文认为DTW是最好的测量,原因一是DTW不需要设定参数,二是DTW虽然是平方算法,但是它有很多能线性计算的下界,利用下界可以进行剪枝,据”Addressing Big Data Time Series: Mining Trillions of Time Series Subsequences under Dynamic Time Warping”称,利用多种下界进行剪枝,在大规模数据集中剪枝率能达到99.9999%,也就是说实际计算DTW效率基本可以达到线性。三是利用DTW可以快速的计算子序列相似性,所谓子序列相似性就是给定序列S,Q,找到S的子序列使得它与Q的相似性最大。利用SPRING算法计算子序列相似性与计算全序列相似性的代价是一样的,具体可以参见论文”Stream Monitoring under the Time Warping Distance”

    论文”Addressing Big Data Time Series: Mining Trillions of Time Series Subsequences under Dynamic Time Warping”给出了可以用于工业进行时序相似性搜索的方法,基本思想是结合DTW的多种下界进行剪枝。关于DTW的下界可以参考论文”Boundary-based lower-bound functions for dynamic time warping
    and their indexing”

    展开全文
  • 序列相似性比较与同源性分析

    千次阅读 2019-09-24 15:22:44
    序列相似性比较与同源性分析 首先应该注意区分序列相似性与序列同源性的关系,序列相似不一定同源,但是判定同源性关系的时候有些算法(Maximum likelihood除外)要考虑到序列相似性序列相似性是将待...

    首先应该注意区分序列相似性与序列同源性的关系,序列相似不一定同源,但是判定同源性关系的时候有些算法(Maximum likelihood除外)要考虑到序列相似性。序列相似性是将待研究序列与DNA或蛋白质序列库进行比较,用于确定该序列的生物属性,也就是找出与此序列相似的已知序列是什么,完成这一工作只需要用到两两序列比较算法,常用的程序包有BLAST,FASTA等。同源性分析是将待研究序列加入到一组与之同源,但是来自不同物种的序列中进行多序列比对,以确定该序列与其它序列间的同源性大小。多序列比较算法常用的程序包有CLUSTAL等。

    1、  序列比对,从数据库中寻找相似序列: 首先打开NCBI的BLAST网站:https://blast.ncbi.nlm.nih.gov/Blast.cgi ,选择protein blast,然后将待比对序列粘贴进去,进行BLAST(一些参数的设置收藏夹或百度)。等待一定时间后将会出现与所选数据库的比对结果,按照打分高低将top100(可以设置成其他数值)的序列显示出来,然后可以将该100条序列下载下来。存成test.fasta文件。这个文件就是在mega中进行多序列比对建树所用的文件。

    2、  多序列比对:打开mega,ALIGN-BUILDALIGNMENT-Create a new alignment-protein-open-retrieve sequences from file-no -test.fasta(或者直接拖动进去,或者双击打开test.fasta),然后点击Alignment——Align by ClustalW——OK——OK。然后比对成功,选择Data——Export Alignment——MEGA format保存文件为test.meg,可以关闭Align会话框。

    3、  构建进化树:打开test.meg。点击PHYLOGENY——选择最上面的ML方法,参数可以选择默认参数。就出现了进化树。当然一些参数最好还是用到,比如说可信度验证的次数设置最好要大于等于500次。

    4、  进化树的美化与理解

    http://www.360doc.com/content/14/0617/22/17553313_387599563.shtml

    https://www.sohu.com/a/196872269_675868

     

    posted on 2019-07-12 22:18  计算之道 阅读( ...) 评论( ...) 编辑 收藏

    转载于:https://www.cnblogs.com/jszd/p/11178733.html

    展开全文
  • 本文在分析信息系统与多元时间序列关系的基础上,利用主成分的方差贡献率得到主成分的加权综合属性,从而达到将多元时间序列降为一元时间序列的目的;利用动态时间弯曲距离来刻划两个已经降为一元的时间序列相似性.
  • 一篇关于时间序列相似性分析很好很全面的比较文章
  • 提出了基于时间序列相似性度量的瓦斯报警信号自动识别技术。基于动态时间弯曲(DTW)距离对从山西某高瓦斯煤矿2010年瓦斯监测数据库中提取的150组数据采集周期为9~70s的采掘工作面瓦斯含量超限报警时间序列进行聚类...
  • 论文研究-基于多维形态特征表示的时间序列相似性度量.pdf, 特征表示和相似性度量是时间序列数据挖掘的基础工作, 其质量好坏直接影响后期的挖掘结果. 利用正交多项式回归...
  • 为提高时间序列相似匹配的精度和效率, 提出一种基于小波包变换的时间序列相似匹配算法. 首先利用小 波包可对信号进行精细分析的特点, 对时间序列进行维数约简, 用变换后的低频系数和部分高频均值系数作为特征...
  • 基于时间序列演变分析的有效相似性定义和聚类.pdf
  • 时间序列数据挖掘中的特征表示与相似性度量方法研究分析.pdf
  • (二)时间序列相似性度量的一个实例我们取2008年8月25日——2008年9月5日共10个交易日的所有中小板块股票的收盘价格构成数据集如下图。 在这10个交易日中,每天都有交易的中小板股票共有229支,再加上中小板指数...

    (二)时间序列相似性度量的一个实例

    我们取2008年8月25日——2008年9月5日共10个交易日的所有中小板块股票的收盘价格构成数据集如下图。

     

    在这10个交易日中,每天都有交易的中小板股票共有229支,再加上中小板指数(sz399005),共有230个时间序列数据,如果我们考察每两个时间序列的相似性,将有Combine(230,2)=26335个时间序列对。我们使用如下SAS程序可以计算出这26335个时间序列对的相似度指标。

     

    %let N=230;
    %let M=10;
    %let in=stock.finaldata;
    %let out=stock.similar;
    data temp(drop=stockid date close n k);
     do id=1 to (&N-1)*&M by &M;
      set &in point=id;
       var1=stockid;
      do j=(id+&M) to &N*&M by &M ;
       set &in  point=j;
       var2=stockid;
       do k=0 to (&M-1);
        d1=id+k;
        set &in point=d1;
        data1=close;
        d2=j+k;
        set &in point=d2;
        data2=close;
        output; 
       end;
      end;
     end;
    stop;
    run;
    data &out(keep=var1 var2 similar);
     do id=1 to last by &M;
      set temp nobs=last;
      total=0;
      do i=0 to (&M-1);
       row1=id+i;
       set temp point=row1;
       x1=data1;
       y1=data2;
       do j=i+1 to (&M-1);
       row2=id+j;
       set temp point=row2;
       x2=data1;
       y2=data2;
       temp=(log(max((x2/x1)/(y2/y1),(y2/y1)/(x2/x1))))/(&M*(&M-1)/2);
       total=total+temp;
       similar=exp(total)-1;
       end;
      end;
      output;
     end;
     stop;
    run;
    proc sort data=&out;
    by similar;
    run;

     

    结果我们发现,在所有229支股票中,sz002043(兔宝宝)和sz002047(成霖股份)两支股票的形态形似度最高,而sz002139(拓邦电子)和sz002174(梅花伞)相似度最低。这两对股票的2008年8月25日-9月5日走势图见以下两图,从图形直观上可以看出,这种方法至少从直观上是正确的,帮助我们从众多的中小板股票中,找出了形态形似性最大和最小的两对股票。

     

     

     

     

    展开全文
  • 提出了一种新的股票时间序列相似性的研究方法,该方法与已往的算法相比,具有很高的计算效率。首先将时间序列分段线性化,将近似直线的端点按时间顺序排列形成转折点序列来描述原始序列,从而降低了数据的数量和复杂度,...
  • 时间序列相似性搜索的数据挖掘方法应用于水文时间序列数据中,挖掘相似的水文过程.在分析欧氏距离和动态时间扭曲距离两种相似性距离度量方法特点的基础上,采用对时间轴的伸缩和弯曲具有较好适应性的动态时间扭曲...
  • 论文研究-中日股价序列相似性的比较分析.pdf, 将时间序列数据挖掘的方法应用到两国证券市场比较问题中,并在聚类分析中定义新的函数以判别最优的分类数. 我们发现:在指数...
  • 序列分解1、非季节性时间序列分解 移动平均MA(Moving Average)①SAM(Simple Moving Average) 简单移动平均,将时间序列上前n个数值做简单的算术平均。 SMAn=(x1+x2+…xn)/n②WMA(Weighted Moving Average) ...
  • 基于R的时间序列分析

    2019-01-09 11:50:48
    time series data mining 主要包括decompose(分析数据的各个成分,例如趋势,周期),prediction(预测未来的值),classification(对有序数据序列的feature提取与分类),clustering(相似数列聚类)等。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,566
精华内容 28,626
关键字:

时间序列相似性分析