• 信号处理


    熵,事物的混乱程度;

    熵有很多种计算方式; 

    概念介绍

    如何理解呢?或者说 两个 均值相减 怎么就能反应 时间序列 的复杂性?

    首先,简单思考下这个计算过程,先用 m 长的窗口 滑动生成 一组 m 长的数组,假设 m = 2,那就是 一个 (n-m+1)x2 的数组,然后计算 每行 之间的距离,这其实就是 计算 原时间序列 中 相邻元素的距离,或者说 相关性,然后 看看 所有 相邻元素的相关性 如何(均值);

    接着,把 每 相邻 元素 变成 每 3 个元素,变成 (n-m+1)x3 的数组,然后 再 计算 相关性;

    如果 原时间序列 很平稳,我们可以想象成 恒等于 某个值,那么相邻 2 个相关性很大,相邻 3 个相关性还是很大,也就是说 窗口变长 并没有 降低相关性;

    反之,如果原时间序列 没那么平稳,只存在短期相关,那么 相邻 2 个 相关性较大,相邻 3 个 相关性 会大大降低,此时 两个 相关性 相减 差就会比较大,这就得到了 近似熵;   【此次的平稳是我们通俗说的平稳】

    所以,近似熵 越大,时间序列 越 不平稳,或者说 越 复杂;

    从原理上看,三者都是评价 波形 前后的混乱程度的,也就是 评价 波形 重复性的,也就是 频率,熵越大,包含的不同频率越多,越混乱;

    三个之间的区别的话
    近似熵,1991年的算法。
    样本熵,2000年的算法。近似熵在比较的时候有一个自身比较的数值在里面,这个算法优化了。
    模糊熵,2007年的算法。前面两个算法在评价时加入了一个阈值:大于阈值就混乱,小于就不混乱。模糊熵加入了一个fuzzy的思想在里面。更科学一些。
    啥叫fuzzy,就比如说,原来分男女,只有 是 或者 不是 这种。现在加入了模糊思想,就告诉你,这货有0.8的概率是男的,有0.2的概率是女的这种。这种软分类其实更科学的。更多的可以参考fuzzy c means算法。

    与近似熵相比,样本熵具有两个优势:样本熵的计算不依赖数据长度;样本熵具有更好的一致性,即参数m和r的变化对样本熵的影响程度是相同的。

    目前样本熵在评估生理时间序列(EEG,sEMG等)的复杂性和诊断病理状态等方面均有应用。

    还有一个是排列熵,是评价数据周期性随机性的;

    Python 样本熵

    python 自带了一个库;
    pip install sampen

    参数解释

    def sampen2(data, mm=2, r=0.2, normalize=False)

    data:一维信号

    mm:窗口长度,一般 选择 2,偶尔选择 3,一般不选其他值

    r:在很大程度上取决于实际应用场景,通常选择 r=0.2stdr,其中 st表示原时间序列的标准差

    示例

    from sampen import sampen2
    
    # initialize a list(初始化list)
    series_data = []
    
    # open the file and read each line into the list(按行读取)
    with open('relative/path/to/file.txt', 'r') as file:
        for row in file:
            series_data.append(float(row.strip(' 	
    
    ')))
    
    # calculate the sample entropy
    sampen_of_series = sampen2(series_data)

    输出

    [
        (0, 2.140629540027156, 0.0028357991885715863)
        (1, 2.162868347337613, 0.004903248034526253),
        (
            # Epoch length for max epoch(最大长度)
            2,
            # SampEn(样本熵的值)
            2.123328492035711,
            # Standard Deviation(标准偏差)
            0.007596323621379352
        ),
    ]
     

    参考资料:

    https://www.zhihu.com/question/266285555/answer/1151247378  知乎

    https://sampen.readthedocs.io/en/stable/    官网代码

    https://blog.csdn.net/Fanhe_ecust/article/details/101778803  样本熵的python代码实现

    https://blog.csdn.net/cratial/article/details/79707169

    https://blog.csdn.net/u011389706/article/details/80984209  信号处理算法(2):样本熵(SampEn)   有原理

  • 相关阅读:
    20191119PHP.class类练习
    20191115PHP cookie登入实例
    Jenkins详细教程
    Navicat 破解
    测试_离职_交接内容
    ETL方法与过程讲
    ETL测试或数据仓库测试入门
    大数据基础了解-(基础01)
    adb调试显示adb: usage: unknown command device
    hive 创建/删除/截断 表(翻译自Hive wiki)
  • 原文地址:https://www.cnblogs.com/yanshw/p/13225811.html
Copyright © 2020-2023  润新知