Arquivos
EEG_Emotion_Classifier_DEAP/Preprocess_Deap.ipynb
T
2018-11-05 14:58:15 -05:00

167 linhas
4.9 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Valence value regression based on Deap Dataset\n",
"## 1. FFT with pyeeg\n",
"* [4-8]: theta band\n",
"* [8-12]: alpha band\n",
"* [12-16]: low beta band \n",
"* [16-25]: high beta band\n",
"* [25-45]: gamma band"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pyeeg as pe\n",
"import pickle as pickle\n",
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Channel Indice \n",
"File Name data\\SXX.dat, XX \\in [0,31]\n",
"* data: 40 x 40 x 8064: trial x channel x data\n",
"* label: 40 x 4: video/trial x label (valence, arousal, dominance, liking)\n",
"\n",
"Channel Indice: {\n",
"* 1 : AF3\n",
"* 2: F3\n",
"* 3: F7\n",
"* 4: FC5\n",
"* 7: T7\n",
"* 11: P7\n",
"* 13: O1\n",
"* 17: AF4\n",
"* 19: F4\n",
"* 20: F8\n",
"* 21: FC6\n",
"* 25: T8\n",
"* 29: P8\n",
"* 31: O2 }\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [],
"source": [
"channel = [1,2,3,4,6,11,13,17,19,20,21,25,29,31] #14 Channels chosen to fit Emotiv Epoch+\n",
"band = [4,8,12,16,25,45] #5 bands\n",
"window_size = 256 #averaging band power of 2 sec\n",
"step_size = 16 #each 0.125 sec update once\n",
"sample_rate = 128 #sampling rate of 128 Hz\n",
"\n",
"def FFT_Processing (sub, channel, band, window_size, step_size, sample_rate):\n",
" '''\n",
" arguments: string subject\n",
" list channel indice\n",
" list band\n",
" int window size for FFT\n",
" int step size for FFT\n",
" int sample rate for FFT\n",
" return: void\n",
" '''\n",
" \n",
" meta = []\n",
" with open('data\\s' + sub + '.dat', 'rb') as file:\n",
"\n",
" subject = pickle.load(file, encoding='latin1') #resolve the python 2 data problem by encoding : latin1\n",
"\n",
" for i in range (0,40):\n",
" # loop over 0-39 trails\n",
" data = subject[\"data\"][i]\n",
" labels = subject[\"labels\"][i]\n",
" start = 0;\n",
"\n",
" while start + window_size < data.shape[1]:\n",
" meta_array = []\n",
" meta_data = [] #meta vector for analysis\n",
" for j in channel:\n",
" X = data[j][start : start + window_size] #Slice raw data over 2 sec, at interval of 0.125 sec\n",
" Y = pe.bin_power(X, band, sample_rate) #FFT over 2 sec of channel j, in seq of theta, alpha, low beta, high beta, gamma\n",
" meta_data = meta_data + list(Y[0])\n",
"\n",
" meta_array.append(np.array(meta_data))\n",
" meta_array.append(labels)\n",
"\n",
" meta.append(np.array(meta_array)) \n",
" start = start + step_size\n",
" meta = np.array(meta)\n",
" np.save('out\\s' + sub, meta, allow_pickle=True, fix_imports=True)\n",
"\n",
"\n",
"subjectList = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32']\n",
"\n",
"for subjects in subjectList:\n",
" FFT_Processing (subjects, channel, band, window_size, step_size, sample_rate)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3.Segment and training of preprocessed data\n",
"* training dataset\n",
"* testing dataset\n",
"* validation dataset\n",
"\n",
"Agrithom pool:\n",
"* Support Vector Machine (which kernal?)\n",
"* Ada-Boost\n",
"\n",
"Best practice could be refered to this paper: \n",
"\n",
"@article{alarcao2017emotions,\n",
" title={Emotions recognition using EEG signals: A survey},\n",
" author={Alarcao, Soraia M and Fonseca, Manuel J},\n",
" journal={IEEE Transactions on Affective Computing},\n",
" year={2017},\n",
" publisher={IEEE}\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}