问题陈述
我有一个大小(19,1000,100)的数据集,其中包含:
- 100 SAMPLES
- 19 channels / samples of length 1000 (2 s at 500 Hz)
数据集是label,矢量长度为100。
我想使用学习算法,当然,为了获得最佳拟合。为此,我将数据集拆分为训练集和测试集。目前的代码:
# -*- coding: utf-8 -*-
# Library importation
import os
import numpy as np
from scipy import io as sio
from scipy import signal
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from matplotlib import pyplot as plt
#------------------------------------------------------------------------------
# Functions
def filter(x, n, fs, fc1, fc2):
b, a = signal.butter(n, [fc1/(fs/2), fc2/(fs/2)], 'bandpass')
y = signal.filtfilt(b, a, x)
return y
def haming(x, L):
# Symetric L-points hamming window
window = signal.hamming(L)
y = x * window.T # Element wise multiplication
return y
#------------------------------------------------------------------------------
# Script
s_EEG = "{}/{}".format(EEG_path, EEG[4])
data = sio.loadmat(s_EEG)['s_EEG']['data'][0][0].astype(float) # data[i, j ,k]
labels = sio.loadmat(s_EEG)['s_EEG']['labels'][0][0][0] # labels[k]
fs = sio.loadmat(s_EEG)['s_EEG']['sampling_rate'][0][0][0][0] # 500 Hz
size = data.shape # (i,j,k)
for i in range(size[0]):
for k in range(size[2]):
data[i,:,k] = haming(filter(data[i,:,k], 10, fs, 1, 45), size[1])
data = data.reshape(size[0] * size[1], size[2]).T
# X signal / Y label
X_train, X_test, Y_train, Y_test = train_test_split(data, list(labels), test_size=0.33, random_state=42)
clf = SVC()
clf.fit(X_train, Y_train)
print (clf.score(X_test, Y_test))
过滤每个样品(1 Hz和45 Hz之间的带通)。 每个样品都应用汉明窗。
然后通过一个接一个地放置样本,以100 * 19 000的形式重新整形数据。
问题
(样本*(通道1,通道2,...通道19,功能1,功能 2,......))
甚至更好:
(样本*((通道1,通道2,...通道19),(功能1为 通道1,通道2的特征1,......),(通道1的功能2, chan 2的特征2,...)))
由于我不知道哪个特征可能会出现在我的信号中(EEG数据......),我需要测试很多不同的功能并保持最佳功能。
感谢您的帮助!
P.S:代码的任何优化,就速度,内存,简单而言都很棒:)