行为识别(时间序列)特征提取代码

写在前面:一直以来,极市得到了许许多多开发者的关注和支持,极市的成长离不开各位开发者的见证,为此我们特开设极市开发者祝愿帖,期待听到您真实的心声和建议~φ (> ω<*) :

极市开发者祝愿活动 (有奖回馈)

本文为中科院计算所的博士研究生王晋东整理的行为识别python和matlab提取特征代码,极市曾分享王博另一篇文章:行为识别常用提取特征,可以结合本文一起阅读,希望对做行为识别方面研究的小伙伴有帮助~
项目地址:activityrecognition/code/



多种传感器可以用于行为识别,如最常用的加速度计、陀螺仪、蓝牙与WiFi等。针对蓝牙与WiFi的特征提取,要根据具体的问题情况来进行。通常来说,加速度和陀螺仪的数据是最常用的。因此,我们就以这两种信号为例,提供针对它们的特征提取代码。

加速度和陀螺仪都是典型的时间序列信号,在行为识别中,通常我们都会提取一些统计信息(又称为时域)和频率信息(又称为频域)。两部分合起来,就可以用于行为识别了。从经验出发,能够识别人体常见的大多数运动行为。

也可以用本代码进行一些时间序列的特征提取,用法是一样的

关于时域和频域具体特征的计算方法请见这篇文章:行为识别常用提取特征


推荐使用
一个简洁明了的时间序列处理(分窗、特征提取、分类)库:Seglearn

用这个库会比用我们下面提供的自己写的方便!

Python版本

Python版本比较通用,也比较好扩展。目前刚放到pypi下,可能 用pip直接安装。该目录下的feature_extraction文件夹是核心的文件夹。

内核提取方法针对Python2和Python3一样通用。test.py文件是按照Python3格式写的,无伤大雅。


需求:
pip install numpy


调用方式(直接拷贝):
拷贝feature_extraction文件夹到你的目录(通常是你的特征提取代码目录)下;
在同一层目标下,首先导入引用:
from feature_extraction import feature_core

然后有两种调用方式:

  • (1) 有窗口:feature_core.sequence_feature(a, 5, 4),表示对a这个数组按照窗口大小为5,步长为4进行特征提取
  • (2) 无窗口:feature_core.sequence_feature(a, 0, 4),表示直接对a这个数组进行特征提取,它本身就是一个窗口。


返回:
一个2D的numpy.array


调用方式(pip):
pip install tsfeature import tsfeature.feature_core


扩展:
目前提取了19维特征,可以直接扩展feature_time.py和feature_fft.py文件中的函数,加上自己在时域和频域上的特征提取方案。

附本代码中提取到的19维特征:

(1)时域:均值,方差,标准差,最大值,最小值,过零点个数,最大值与最小值之差,众数

(2)频域:直流分量,图形的均值、方差、标准差、斜度、峭度,幅度的均值、方差、标准差、斜度、峭度


Matlab版本

Matlab版本的特征提取代码见它目录像下的readme。在Matlab版本R2014a及以上均通用。不过建议还是用python,更好用一些。

结果评价

行为识别是一个分类问题,评价效果的好坏通常不只看精度,还要看准确率、召回率、F1、特异性等。我们提供一个计算所有结果的函数:Evaluate.m