zoukankan      html  css  js  c++  java
  • 量化投资_数据离散化的处理方法

    1  我们拿到一组数据之后就要对它进行模型的直接分析,这种方式是不可取的,因为模型都有自己的假设条件,也就是先前假设,但是数据的状态大多数情况并不符合模型的要求,因此首先要对数据进行变换处理,达到模型对数据的要求。这样模型对于数据处理的结果才具有可参考性。因此很多人只关心和研究模型,而忽略了对数据的处理。

    2  原则:

      原则1:数据的变换其内涵是转换对于数据的观察角度,而不是经过变形后其原先的内涵产生变化。

      原则2:

    3  数据标准化的方法:

    3.1  Z_score规范化

      也就是常说的Z变换,先贴代码:

    load lawdata;
    plot([gpa,lsat])
    

      

      我们观察到两组数据的值差别太大了,如果对这两组数据进行分析很难得到想要的结果,这个时候可以考虑用Z-scores的方式

    %% z-scores 变换
    clear;clc;
    load lawdata;
    plot([gpa,lsat])
    % z-score变换
    gpa_mean = mean(gpa);
    gpa_std = std(gpa);
    for i = 1:length(gpa)
        Zgpa1(i,1) =  (gpa(i,1) - gpa_mean) / gpa_std;
    end
    Zgpa = zscore(gpa);
    disp([Zgpa1';Zgpa'])
    % % 显示结果:
    %   1 至 6 列
    %     1.2128    0.8432   -1.1690   -0.2656    1.4181   -0.1013
    %     1.2128    0.8432   -1.1690   -0.2656    1.4181   -0.1013
    %   7 至 12 列
    %    -0.3888    1.3771    1.0896    0.1451    0.1040   -1.4565
    %    -0.3888    1.3771    1.0896    0.1451    0.1040   -1.4565
    %   13 至 15 列
    %    -1.3743   -0.8815   -0.5530
    %    -1.3743   -0.8815   -0.5530
    

      我们通过公式和MATLAB自带函数计算的结果一致,对于lsat就不公式计算了,直接得到两组数据的结果如下:

    Zgpa = zscore(gpa);
    Zlsat = zscore(lsat);
    plot([Zgpa, Zlsat])
    legend('gpa z-scores','lsat z-scores','Location','Northeast')
    

      

      结果:这样对于两组数据进行评价,就容易进行比较了。

    小结:

      1  如果两组以上的数据值差别较大时(一般都有较大差别),引入z-scores这把“尺子”,能够容易衡量不同组向量之间的关系。

      2  这种方式一般用于多组向量值之间的比较比较合适。

    3.2  中心化

       这种做法是经过中心化变化之后,均值为0,但是方差矩阵不变。

      代码如下:

    %% 中心化
    clear;clc;
    load lawdata;
    gpa_mean = mean(gpa);
    gpa_lsat = mean(lsat);
    for i = 1:length(gpa)
        Zgpa(i,1) =  (gpa(i,1) - gpa_mean);
    end
    for i = 1:length(lsat)
        Zlsat(i,1) =  (lsat(i,1) - gpa_lsat);
    end
    subplot(221)
    plot(gpa)
    title('gpa非中心化处理')
    subplot(223)
    plot(Zgpa)
    title('gpa中心化处理')
    
    subplot(222)
    plot(lsat)
    title('lsat非中心化处理')
    subplot(224)
    plot(Zlsat)
    title('lsat中心化处理')
    

      

    小结:

      1  这种处理方式可以理解为分位的处理方式,用均值把数据一分为二的处理。处理单一数据比较合适。

     3.3  极差标准化:

       我们运用了极值的方法,代码如下:

    %% 极差标准化
    clear;clc;
    load lawdata;
    gpa_mean = mean(gpa);
    gpa_limit = max(gpa) - min(gpa);
    lsat_mean = mean(lsat);
    lsat_limit = max(lsat) - min(lsat);
    for i = 1:length(gpa)
        Cgpa(i,1) =  (gpa(i,1) - gpa_mean) / gpa_limit;
    end
    for i = 1:length(lsat)
        Clsat(i,1) =  (lsat(i,1) - lsat_mean) / lsat_limit;
    end
    subplot(221)
    plot(gpa)
    title('gpa非极差处理')
    subplot(223)
    plot(Cgpa)
    title('gpa极差处理')
    
    subplot(222)
    plot(lsat)
    title('lsat非极差处理')
    subplot(224)
    plot(Clsat)
    title('lsat极差处理')
    

      

    小结:

      1  发现极差处理化的方法和中心化处理的方法不同之处在于,对于分位都会限制在一定的范围之内,可以统一两组数据进行标准化比较。

    3.4  小数规范化(略)

    3.5  Box_Cox变换(重点) 

      Box和Cox是两位大牛在1964年从实际数据出发提出了一种很有效的变化,分常见变化和拓展变化:

      作用:

      *改变分布形状,使之正太分布,至少是对称的。

      *当X>=0时,能够保持数据大小次序

      *对变换结果有很好的解释:

        1.k = 2 为平方变换

        2.k=1 为恒等变换

        3.k=0.5平方根变换

        4.k=-0.5为平方根倒数变换

        5.k=0为对数变换

        6.k=-1为倒数变换

      If λ is not = 0, then

      data(λ)=dataλ1λ

      If λ is = 0, then

      data(λ)=log(data)

      当然MATLAB工具箱也提供这种变化的函数,先贴代码:

    %% Box_Cox变换
    clear;clc;
    textdata = [];  % 手工导入一个交易时间段的close数据
    BCtextdata = boxcox(textdata);
    
    subplot(221)
    plot(textdata)
    title('非Box\_cox处理')
    subplot(223)
    plot(BCtextdata)
    title('Box\_cox处理')
    subplot(222)
    hist(textdata)
    title('未Box\_cox处理后直方图')
    subplot(224)
    hist(BCtextdata)
    title('Box\_cox处理后直方图')
    

      

    小结:

      1  这里注意用boxcox处理方式,数值必须是正值

    4  另外,我们再用一种处理方式——差分(扫地僧一般的存在)

     

      我们对任意一组数据进行差分处理,看到一个惊人的现象没?

    但是还有这种情况:

    但是这种情况还有:

     神器:

      我们得到一个证明:如果当数据足够大的时候(4的第二幅图数组15个,不符合要求)。经过一阶差分后,会接近正太分布。这是符合大数定理的原则。因此要处理数据的时候,当我们数据足够多的时候,经过一阶差分,数据就可以得到正太数据的近似要求!上面的实验是一个非常好的证明!

  • 相关阅读:
    编辑器漏洞
    csrf漏洞
    sdram控制2
    简易sdram控制1
    8051核
    AD7928
    FIR滤波器的verilog实现方法
    fft_cepin
    fft_fft_control
    FFT_fifo
  • 原文地址:https://www.cnblogs.com/noah0532/p/8745934.html
Copyright © 2011-2022 走看看