特征提取方法——共空间模式(Common Spatial Pattern,CSP)算法原理与实现

2023-10-27

一、原理

公共空间模式(CSP)算法采用监督的方法创建一个最优的公共空间滤波器,在最大化一类方差的同时最小化另一类方差,采用同时对角化两类任务协方差矩阵的方式,得到可区分程度最大的特征向量。适用于二分类任务的特征提取。
CSP特征提取算法示意图
公共空间模式(CSP)算法的过程如下:
(1)将原始数据按照类别进行分段。两类样本数据E可分类为 E 1 E_1 E1 E 2 E_2 E2 E 1 E_1 E1为第一类样本数据, E 2 E_2 E2为第二类样本数据。
(2)计算分段后的原始数据的协方差矩阵,协方差矩阵的计算公式为: C i = E i ⋅ E i T t r a c e ( E i ⋅ E i T ) ( i = 1 , 2 ) C_i = \frac{E_i\cdot E_i ^ \mathrm{ T }}{trace(E_i\cdot E_i ^ \mathrm{ T })} (i =1,2) Ci=trace(EiEiT)EiEiTi=12 t r a c e ( E ) trace(E) trace(E)表示求矩阵E的迹。
分别计算分段后原始数据的协方差矩阵, C 1 C_1 C1为第一类样本数据的空间协方差矩阵的期望, C 2 C_2 C2表示第二类样本的空间协方差矩阵的期望, C c C_c Cc表示两类数据的空间协方差矩阵之和,则有 C c = C 1 + C 2 C_c = C_1+C_2 Cc=C1+C2
(3)正交白化变换并且同时对角化(需理解矩阵白化的定义)
C c C_c Cc是正定矩阵,由奇值分解定理则:
C c = U c Λ c U c T C_c= U_c Λ_c U_c^ \mathrm{ T } Cc=UcΛcUcT
U c U_c Uc为特征向量矩阵, Λ c Λ_c Λc表示特征值的对角阵,且特征值是降序排列的
白化转换 U c U_c Uc可得到:
P = 1 Λ c ⋅ U c T P= \frac{1}{\sqrt{Λ_c}}\cdot U_c^ \mathrm{ T } P=Λc 1UcT
将矩阵 P P P作用于 C 1 、 C 2 C_1 、C_2 C1C2,可得到:
S 1 = P C 1 P T , S 2 = P C 2 P T S_1=PC_1 P^T,S_2=PC_2 P^T S1=PC1PTS2=PC2PT
S 1 、 S 2 S_1 、S_2 S1S2具有公共特征向量,而且存在两个对角矩阵 Λ 1 、 Λ 2 Λ_1、Λ_2 Λ1Λ2和特征向量矩阵 B B B,满足如下条件:
S 1 = B Λ 1 B T S_1=BΛ_1 B^T S1=BΛ1BT
S 2 = B Λ 2 B T S_2=BΛ_2 B^T S2=BΛ2BT
Λ 1 + Λ 2 = I Λ_1+ Λ_2=I Λ1+Λ2=I
其中 I I I为单位阵。由此可以看出 S 1 S_1 S1 S 2 S_2 S2的特征值之和等于1。
(4)计算投影矩阵
对于特征向量矩阵 Q Q Q,当一个类别 S 1 S_1 S1有最大的特征值时,此时另一个类别 S 2 S_2 S2有最小的特征值,因此可以利用矩阵Q实现两类问题的分类,可以得到投影矩阵: W = ( Q T P ) T W= (Q^T P)^T W=(QTP)T
(5)经过投影得到特征矩阵
将原始脑电数据E_(M×N)通过投影矩阵W进行投影得到特征矩阵: Z M × N = W M × M E M × N Z_{M\times N}= W_{M\times M} E_{M\times N} ZM×N=WM×MEM×N
可选择 Z M × N Z_{M\times N} ZM×N的前m行和后m行(2m<M)作为原始输入数据的特征
(6)特征归一化
y i = log ⁡ ( v a r ( Z i ) ∑ n = 1 2 m v a r ( Z n ) ) y_i = \log(\frac{var(Z_i)}{\sum_{n=1}^{2m}{var(Z_n)}}) yi=log(n=12mvar(Zn)var(Zi))
其中 y i y_i yi 为第i个样本归一化后的特征矩阵。
算法生成的CSP特征矩阵,其信息不是等效的。特征信息主要集中在特征矩阵的头部和尾部,而中间的特征信息不明显可以忽略,所以选取m行和后m行数据作为CSP特征提取的特征矩阵。

二 、matlab算法实现

使用CSP算法处理二分类任务的运动想象脑电数据。下面是matlab代码,实现BCI2003运动想象数据集的脑电特征提取,提取的特征数为4个。

clc;
clear;
EEGSignals = load('graz_data/CSP_train.mat');   % 加载带通滤波后的脑电数据
%check and initializations
EEG_Channels = size(EEGSignals.x_train,2);
EEG_Trials = size(EEGSignals.x_train,3);
classLabels = unique(EEGSignals.y_train);% Return non-repeating values
EEG_Classes = length(classLabels);
covMatrix = cell(EEG_Classes,1); % 协方差矩阵
% Computing the normalized covariance matrices for each trial
trialCov = zeros(EEG_Channels,EEG_Channels,EEG_Trials);
for i = 1:EEG_Trials
    E = EEGSignals.x_train(:,:,i)';
    EE = E*E';
    trialCov(:,:,i) = EE./trace(EE);  % 计算协方差矩阵
end
clear E;
clear EE;
% 计算每一类样本数据的空间协方差之和
for i = 1:EEG_Classes
    covMatrix{i} = mean(trialCov(:,:,EEGSignals.y_train == classLabels(i)),3);
end
% 计算两类数据的空间协方差之和
covTotal = covMatrix{1} + covMatrix{2};
% 计算特征向量和特征矩阵
[Uc,Dt] = eig(covTotal);
% 特征值要降序排列
eigenvalues = diag(Dt);
[eigenvalues,egIndex] = sort(eigenvalues, 'descend');% 降序
Ut = Uc(:,egIndex);
% 矩阵白化
P = diag(sqrt(1./eigenvalues))*Ut';
% 矩阵P作用求公共特征向量transformedCov1 
transformedCov1 = P*covMatrix{1}*P';
%计算公共特征向量transformedCov1的特征向量和特征矩阵
[U1,D1] = eig(transformedCov1);
eigenvalues = diag(D1);
[eigenvalues,egIndex] = sort(eigenvalues, 'descend');% 降序排列
U1 = U1(:, egIndex);
% 计算投影矩阵W
CSPMatrix = U1' * P;
% 计算特征矩阵
FilterPairs = 2;       % CSP特征选择参数m    CSP特征为2*m个
features_train = zeros(EEG_Trials, 2*FilterPairs+1);
features_test = zeros(EEG_Trials, 2*FilterPairs+1);
Filter = CSPMatrix([1:FilterPairs (end-FilterPairs+1):end],:);
%extracting the CSP features from each trial
for t=1:EEG_Trials    
    %projecting the data onto the CSP filters    
    projectedTrial_train = Filter * EEGSignals.x_train(:,:,t)';    
    projectedTrial_test = Filter * EEGSignals.x_test(:,:,t)';
    %generating the features as the log variance of the projected signals
    variances_train = var(projectedTrial_train,0,2);  
    variances_test = var(projectedTrial_test,0,2);
    for f=1:length(variances_train)
        features_train(t,f) = log(variances_train(f));
        % features_train(t,f) = log(variances_train(f)/sum(variances_train));   %修改后对应公式
    end
    for f=1:length(variances_test)
        features_test(t,f) = log(variances_test(f));
        %features_test(t,f) = log(variances_test(f)/sum(variances_test));  % 修改后对应公式
    end
end
CSP_Train_feature = features_train(:,1:4);
CSP_Test_feature = features_test(:,1:4);
save('CSP_feature.mat','CSP_Train_feature','CSP_Test_feature');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

特征提取方法——共空间模式(Common Spatial Pattern,CSP)算法原理与实现 的相关文章

  • 告别代码复制粘贴,傻瓜式提取 PyTorch 中间层特征

    内容导读 特征提取是图像处理过程中常需要用到的一种方法 其效果好坏对模型的泛化能力有至关重要的影响 特征提取 Feature extraction 在机器学习 模式识别和图像处理中应用广泛 它从初始的一组测量数据开始 建构出提供信息且不冗余
  • 毕业设计-基于深度学习的目标检测算法

    目录 前言 课题背景和意义 实现技术思路 一 两阶段深度学习算法 二 单阶段深度学习方法 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个
  • 特征提取方法——共空间模式(Common Spatial Pattern,CSP)算法原理与实现

    一 原理 公共空间模式 CSP 算法采用监督的方法创建一个最优的公共空间滤波器 在最大化一类方差的同时最小化另一类方差 采用同时对角化两类任务协方差矩阵的方式 得到可区分程度最大的特征向量 适用于二分类任务的特征提取 公共空间模式 CSP
  • [机器学习与scikit-learn-48]:特征工程-特征选择(降维)-3-初级过滤:方差过滤法

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 123970142 目录 前言 第1章
  • 表面肌电信号处理流程——基于肌电信号分类的特征抽取的设计

    如图为表面肌电信号研究的一般流程 仅作参考 本文中主要在特征提取方面进行研究 动动小手指 帮我投上一票 摄影比赛 复制链接在微信搜索框打开哦 http h5 3431373334 hflw0tq cn app rWVzkuCTZg play
  • 毕业设计-基于街景影像中行人车辆检测方法 -YOLO

    目录 前言 课题背景和意义 实现技术思路 一 方法理论 二 试验与分析 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目
  • 机器学习好伙伴之scikit-learn的使用——特征提取

    机器学习好伙伴之scikit learn的使用 特征提取 什么是特征提取 sklearn中特征提取的实现 PCA 主成分分析 LDA 线性评价分析 应用示例 PCA部分 LDA部分 有些时候特征太多了 可以利用sklearn中自带的函数进行
  • 实时脑波和眼动连通性分析 python-(3)

    实时提取脑波的delta theta alpha beta 对于baseline的比率差 import os import pandas as pd import numpy as np def mkdir path 3 folder os
  • 第三步:脑波提取alpha,beta,delta,theta

    4 brain power py import os from process eeg import iir processing import pandas as pd import numpy as np def mkdir path
  • 毕业设计-基于违禁品的检测深度卷积网络- YOLO

    目录 前言 课题背景和意义 实现技术思路 一 网络 二 模型的改进 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来
  • 毕业设计-基于机器颗粒状的农作物检测算法研究-YOLO

    目录 前言 课题背景和意义 实现技术思路 一 整体方案设计 二 基于 YOLO 的迁移学习算法 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几
  • matlab时域频域信号特征提取资料整合

    1 前言 最近在做一个项目 需要将声纳信号中的特征都提取出来进行分析 资料查到头秃终于整合出来了些东西 记录一下 由于不是专业人员 如果发现任何错误请不要大意的附在评论区 我会及时修改 谢谢 2 思路 思路这段引用自知乎大佬aresmiki
  • EEG脑电信号处理--维基百科专业词汇解释

    脑电图分析 脑电分析是利用数学信号分析方法和计算机技术 从脑电信号中提取信息 脑电图分析的目标是帮助研究人员更好地了解大脑 协助医生进行诊断和治疗 以及促进脑 计算机接口 BCI 技术的使用 有很多方法可以粗略地对脑电图分析方法进行分类 用
  • 目标检测常用特征类型提取

    本文介绍图像识别和目标检测中常用的特征 分别是Haar 哈尔 特征 LBF local binary pattern 特征 HOG histogram of orientation gradient 特征共 三种 一 Haar特征 参考链接
  • 毕业设计-基于轨道的扣件状态检测- YOLO

    目录 前言 课题背景和意义 实现技术思路 一 YOLO 网络结构 二 模型建立 三 实验结果 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年
  • 灵星之光-1:调制解调、卷积神经网络异曲同工

    无线通信中的解调 以QAM调制为例 QAM编码的个数 类似图像分类中的类别的个数 调制的过程 类似 深度学习的过程 不同的是 通信中的模型 不需要训练 特征是直接预先编码好了 解调的过程 就是 分类的过程 根据收到的各种变形的电磁波的波形
  • 毕业设计-基于机器视觉的甘蔗茎秆识别方法-OpenCV

    目录 前言 课题背景和意义 实现技术思路 一 总体思路 二 图像处理 三 甘蔗识别 四 结 语 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几
  • 毕业设计-基于机器视觉的电线颜色识别系统软件- OpenCV

    目录 前言 课题背景和意义 实现技术思路 一 图像预处理 三 电线颜色特征提取方法的研究 四 基于 神经网络的颜色识别算法实现 实现效果图样例 最 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边
  • 预处理丨去趋势(Matlab和C++)

    预处理丨去趋势 Matlab和C 预处理丨去趋势 Matlab和C 介绍 原理 MATLAB 实现 C 实现 本科没学过信号处理 对采集的数据需要做预处理 如去趋势 本文介绍一下去趋势的作用和方法 介绍 1 去趋势波动分析 detrende
  • [python] 使用Jieba工具中文分词及文本聚类概念

    前面讲述了很多关于Python爬取本体Ontology 消息盒InfoBox 虎扑图片等例子 同时讲述了VSM向量空间模型的应用 但是由于InfoBox没有前后文和语义概念 所以效果不是很好 这篇文章主要是爬取百度5A景区摘要信息 再利用J

随机推荐

  • (Oracle技能篇) oracle数据库分页查询和各大数据库的分页查询

    1 oracle数据库分页 select from select a rownum rc from 表名 where rownum lt endrow a where a rc gt startrow 2 DB2数据库分页 Select f
  • 堆与栈的区别详细总结

    常见的数据结构 数组 栈 队列 链表 树 图 散列表 哈希表 堆与栈的区别 堆 队列优先 先进先出 FIFO firstinfirstout 栈 先进后出 FILO First In Last Out 一般情况下 如果有人把堆栈合起来说 那
  • js浏览器回到顶部方法_js 返回顶部按钮

    要求 当鼠标从顶部滚动后 显示返回顶部按钮 点击按钮 页面平滑滚动到顶部 按钮隐藏 1 css scrollTop position fixed bottom 20px right 20px height 0px width 45px li
  • [ Android实战 ] 开机时通过广播启动应用,但是很长时间才能接收到,如何解决?

    Android实战 开机时通过广播启动应用 但是很长时间才能接收到 如何解决 背景 测试 发送广播流程 广播分发流程 解决方案 思考 系统层面 应用层面 总结 转载请注明出处 我的博客 背景 前段时间在做一个项目 在适配客户应用的过程中发现
  • jmeter自动调试系统接口配置流程

    1 起因 最近测试的同事需要用jmeter工具压测一下我们项目的接口 因为接口中有token或者加密登录密码等逻辑 有的地方需要从上一步接口中拿到结果作为下一步的参数 进行传递 因为涉及的有点麻烦 就帮测试看了下这个工具 顺便记录一下 帮助
  • Markdown 实现页内跳转

    Markdown 实现页内跳转 在使用 Markdown 做一些论文笔记或者说写文档时 通常会出现这样一种情况 我们在文档的某个地方定义了一个 t a b l e o
  • 数据库的多表查询操作-查询只选修了1门课程的学生,显示学号、姓名、课程名。

    文章目录 前言 一 建立数据库和表 二 数据库展示 2 查询只选修了1门课程的学生 显示学号 姓名 课程名 总结 前言 在我看来数据库真的是一个神奇的东西 不但里面的只是点很深刻 而且对于我们学习起来还是有一定的压力的 关于数据的知识 我感
  • 【CSAPP】背景知识-调用者保存寄存器与被调用者保存寄存器

    1 调用者保存与被调用者保存 函数A调用了函数B 寄存器rbx在函数B中被修改了 逻辑上 rbx内容在调用函数B的前后应该保持一致 解决这个问题有两个策略 1 在函数A在调用函数B之前提前保存寄存器 rbx的内容 执行完函数B之后再恢复 r
  • 顶会常见的 python matplotlib 双Y轴柱状图

    效果图 代码如下 import matplotlib pyplot as plt import numpy as np plt rc font family Times New Roman x data 1 2 3 ax data 16 2
  • flex布局flex取值以及align-self、align-content、align-items的区别

    flex取值 flex是 flex grow flex shrink flex basis 的缩写 flex取值 flex grow flex shrink flex basis 默认值 0 1 auto none 0 0 auto aut
  • libevent库学习(1)

    一 初识 1 libevent介绍 Libevent 是一个用C语言编写的 轻量级的开源高性能事件通知库 主要有以下几个亮点 事件驱动 event driven 高性能 轻量级 专注于网络 不如 ACE 那么臃肿庞大 源代码相当精炼 易读
  • 计算机efs加密,EFS加密

    EFS Encrypting File System 加密文件系统 是Windows 2000 XP所特有的一个实用功能 对于NTFS卷上的文件和数据 都可以直接被操作系统加密保存 在很大程度上提高了数据的安全性 EFS加密简介 语音 EF
  • SystemUI模块总结

    SystemUI模块总结 1 SystemUI路径 SystemUI被放在 framework base packages apps SystemUI 在该目录的二级目录src com android下可看到SystemUI和Keyguar
  • NPN三极管和PNP三极管的工作原理

    记录一下 方便以后翻阅 学嵌入式还是要懂些电路知识的 NPN型三极管 由两块N型半导体中间夹着一块P型半导体组成 也称晶体三极管 是电子电路中最重要的器件 三极管的主要功能是电流放大和开关作用 可以把微弱的电信号变成一定强度的信号 三极管一
  • windows系统下安装Nginx以及简单使用(详解)

    一 背景 Nginx是一个很强大的高性能Web和反向代理服务 也是一种轻量级的Web服务器 可以作为独立的服务器部署网站 应用非常广泛 特别是现在前后端分离的情况下 而在开发过程中 我们常常需要在window系统下使用Nginx作为Web服
  • python-gRPC

    文章目录 python gRPC 一 简介 1 1 gRPC 1 2 protobuf 二 windows 环境下安装protobuf 2 1 下载环境包 2 2 解压缩 配置文件 2 3 验证是否安装成功 三 简单实例 3 1新建包 3
  • SonarQube 跳过指定检查

    ps 我使用了下面的项目过滤来做 因为一个项目会有多个分支 只想对部分项目来做过滤某些规则 这个规则还是有些重要的 环境 演示环境参考前边的文章 SonarQube 扫描 Java 代码 步骤 我们已经扫描一个 Java 项目 有 6 个
  • 九种查找算法-红黑树

    红黑树 2 3查找树能保证在插入元素之后能保持树的平衡状态 最坏情况下即所有的子节点都是2 node 树的高度为lgn 从而保证了最坏情况下的时间复杂度 但是2 3树实现起来比较复杂 于是就有了一种简单实现2 3树的数据结构 即红黑树 Re
  • idea搜索快捷键总结大全

    Ctrl F 是在本页查找 Ctrl Shift R是全局查找 Ctrl Shift N按文件名搜索文件 ctrl alt 鼠标左键 跳转到接口实现类 alt 7展示类结构 参考文献 idea全局搜索快捷键总结 小志的博客的博客 CSDN博
  • 特征提取方法——共空间模式(Common Spatial Pattern,CSP)算法原理与实现

    一 原理 公共空间模式 CSP 算法采用监督的方法创建一个最优的公共空间滤波器 在最大化一类方差的同时最小化另一类方差 采用同时对角化两类任务协方差矩阵的方式 得到可区分程度最大的特征向量 适用于二分类任务的特征提取 公共空间模式 CSP