In [1]:
%matplotlib inline
from matplotlib import pylab as pl
import cPickle as pickle
import pandas as pd
import numpy as np
import os
import random
In [2]:
import sys
sys.path.append('..')
uncommoent the relevant pipeline in ../seizure_detection.py
and run
cd ..
./doall data
or
./doall td
./doall tt
In [3]:
FEATURES = 'gen-8_allbands2-usf-w60-b0.2-b4-b8-b12-b30-b70'
In [4]:
nbands = 0
nwindows = 0
for p in FEATURES.split('-'):
if p[0] == 'b':
nbands += 1
elif p[0] == 'w':
nwindows = int(p[1:])
nbands -= 1
nbands, nwindows
Out[4]:
In [5]:
NUNITS = 1
In [6]:
from common.data import CachedDataLoader
cached_data_loader = CachedDataLoader('../data-cache')
In [7]:
def read_data(target, data_type):
fname = 'data_%s_%s_%s'%(data_type,target,FEATURES)
print fname
return cached_data_loader.load(fname,None)
In [43]:
def process(X, percentile=None,nunits=NUNITS,band=4):
N, Nf = X.shape
print '# samples',N,'# power points', Nf
nchannels = Nf / (nbands*nwindows)
print '# channels', nchannels
newX = []
for i in range(N):
nw = nwindows//nunits
windows = X[i,:].reshape((nunits,nw,-1))
if band is not None:
windows = windows[:,:,range(band,windows.shape[2],nbands)]
if percentile is not None:
windows = np.sort(windows, axis=1)
windows = np.concatenate([windows[:,int(p*nw),:] for p in percentile], axis=-1)
newX.append(windows.ravel())
newX = np.array(newX)
return newX
In [44]:
from sklearn import preprocessing
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
scale = StandardScaler()
min_max_scaler = preprocessing.MinMaxScaler() # scale features to be [0..1] which is DBN requirement
In [45]:
for itarget, target in enumerate(['Dog_1', 'Dog_2', 'Dog_3', 'Dog_4', 'Dog_5', 'Patient_1', 'Patient_2']):
pdata = read_data(target, 'preictal') # positive examples
ndata = read_data(target, 'interictal') # negative examples
tdata = read_data(target, 'test') # test examples
Xp = pdata.X
Np, NF = Xp.shape
Xp = process(Xp)
print 'P',Xp.mean(),Xp.std()
Xn = ndata.X
Nn = Xn.shape[0]
Xn = process(Xn)
print 'N',Xn.mean(),Xn.std()
Xt = tdata.X
Nt = Xt.shape[0]
Xt = process(Xt)
print 'T',Xt.mean(),Xt.std()
# normalize train and test together (allowed)
X = scale.fit_transform(np.concatenate((Xp, Xn, Xt)))
X = np.clip(X,-3,3)
X = min_max_scaler.fit_transform(X)
Xp = X[:Np,:]
Xn = X[Np:(Np+Nn),:]
Xt = X[(Np+Nn):,:]
pl.subplot(4,2,itarget+1)
pl.hist(Xp.ravel(),bins=50,normed=True)
pl.hist(Xn.ravel(),bins=50,alpha=0.5,normed=True)
pl.hist(Xt.ravel(),bins=50,alpha=0.3,normed=True);
In [37]:
In [ ]: