感谢微信公众号 脑机接口社区文章《脑电分析系列[MNE-Python-5]| Python机器学习算法随机森林判断睡眠类型》之pycharm和anaconda对比,并记录其中遇到的问题

本文记录了在Pycharm和Anaconda环境下,使用MNE-Python进行脑电数据分析时遇到的数据下载问题及解决方案。在Pycharm中,由于网络问题无法下载数据,而在Anaconda中,经过多次尝试和环境调整最终解决问题。此外,还提到了在Anaconda中有时会出现代码生成重复图的情况。
摘要由CSDN通过智能技术生成

感谢微信公众号 脑机接口社区文章《脑电分析系列[MNE-Python-5]| Python机器学习算法随机森林判断睡眠类型》之pycharm和anaconda对比,并记录其中遇到的问题,欢迎各位大佬一起探讨研究!

Env——

Anaconda3:内置python3.8.12

Pycharm 使用本地python3.8.0

mne version: 0.21.2

1. Pycharm
源码使用《脑机接口社区文章《脑电分析系列[MNE-Python-5]| Python机器学习算法随机森林判断睡眠类型》源码,如下——
"""
脑电分析系列[MNE-Python-5]| Python机器学习算法
随机森林判断睡眠类型
"""

"""
案例介绍
本案例通过对多导睡眠图(Polysomnography,PSG)
数据进行睡眠阶段的分类来判断睡眠类型。
训练:对Alice的睡眠数据进行训练;

测试:利用训练结果对Bob的睡眠数据进行测试,判断其睡眠类型。

在分析之前,先简单介绍一下多导睡眠图

多导睡眠图(Polysomnography,PSG)又称睡眠脑电图。
主要用于睡眠和梦境研究以及抑郁症和睡眠呼吸暂停综合征的诊断。
多导睡眠图是通过不同部位的生物电或通过不同传感获得生物讯号,
经前置放大,输出为不同的电讯号,记录出不同的图形以供分析。
"""

"""
数据集介绍

本案例用的数据是来自于PhysioNet上关于健康受试者的年龄对睡眠影响研究的公开数据集的一个子集。

mne.datasets.sleep_physionet.age.fetch_data可以下载PhysioNet数据集的子数据集。

该子数据集中包含20位受试者的实验数据,记录当时年龄为25-34岁的10位男性和10位女性的实验数据。
由于受试者13的第二个记录遗失了,所以除了受试者13以外,每个受试者都有两次夜间记录。

Sleep Physionet数据集使用8个标签进行标注,代表8各阶段:

Wake (W),

Stage 1,

Stage 2,

Stage 3,

Stage 4,

REM(R),

Movement time(M),

Stage(?). Stage(?)-(not scored)  

唤醒-Wake(W)、第1阶段、第2阶段、第3阶段、第4阶段、
对应于从轻度睡眠到深度睡眠的范围;REM睡眠(R),
其中REM是Rapid Eye的缩写,表示快速眼运动睡眠,
运动(M)和阶段(?)的任何未得分部分。
"""

# 第一步:导入工具库
import numpy as np
import matplotlib.pyplot as plt

import mne
from mne.datasets.sleep_physionet.age import fetch_data
from mne.time_frequency import psd_welch

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import FunctionTransformer

"""  第二步:加载数据  """
"""
在这里,我们从两个主题下载数据,
最终目标是获得时间片段(epochs)及其相关的地面真理。



MNE为我们提供了
mne.datasets.sleep_physionet.age.fetch_data(),
可以方便地从Sleep Physionet数据集下载数据。  

给定主题和记录的列表,提取程序将下载数据并为每个主题提供数据, 一对文件:

-PSG.edf包含多导睡眠图。来自EEG头盔的原始数据,

-Hypnogram.edf包含专家记录的注释。



然后,将这两个对象合并到mne.io.Raw对象中,
就可以根据注释的描述提取事件以获得时间片段(epochs)。
"""


"""
可以通过
mne.datasets.sleep_physionet.age.fetch_data(subjects,recording,path)
来获取PhysioNet多导睡眠图数据集文件。
subjects:表示想要使用哪些受试者对象,可供选择的受试者对象范围为0-19。
recording:表示夜间记录的编号(索引),有效值为:[1]、[2]或[1、2]。

path:PhysioNet数据的存放地址,如果没有给定,则加载默认存放数据的地址;
如果默认存放数据集的地址不存在数据,则从网络中下载相关数据。
"""
# mne.datasets.sleep_physionet.age.fetch_data(subjects,recording,path)
# 选择两个受试者实验对象ALICE, BOB(该名字并非实验中的真实名,这里是为了方便才临时取的名字)
ALICE, BOB = 0, 1
# 加载ALICE, BOB的实验数据文件
# path = 'mne_data'.replace("\\", "/")
[alice_files, bob_files] = fetch_data(subjects=[ALICE, BOB],
                                      recording=[1])

# 通道名称映射
mapping = {
   'EOG horizontal': 'eog',
           'Resp oro-nasal': 'misc',
           'EMG submental': 'misc',
           'Temp rectal': 'misc',
           'Event marker': 'misc'}

#读取ALICE的edf文件,和其对应的注释文件
raw_train = mne.io.read_raw_edf(alice_files[0])
annot_train = mne.read_annotations(alice_files[1])

raw_train.set_annotations(annot_train, emit_warning=False)
raw_train.set_channel_types(mapping)

# 绘制空0s开始,时间窗口长度为40s的连续通道数据波形图
raw_train.plot(duration=40, scalings='auto')
plt.show()


"""
这里仅使用5个阶段:唤醒(W),阶段1,阶段2,阶段3/4和REM睡眠(R)。 

为此,这里使用mne.events_from_annotations()中的event_id参数来选择我们感兴趣的事件,
并将事件标识符与每个事件相关联。
"""
"""
睡眠表示与事件映射
"""
annotation_desc_2_event_id = {
   'Sleep stage W': 1,
                              'Sleep stage 1': 2,
                              'Sleep stage 2': 3,
                              'Sleep stage 3': 4,
                              'Sleep stage 4': 4,
                              'Sleep stage R': 5}

events_train, _ = mne.events_from_annotations(
    raw_train, event_id=annotation_desc_2_event_id, chunk_duration=30.)

# 创建一个新的event_id以统一 阶段3和4
event_id = 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值