Advertisement
Guest User

eeg svm

a guest
Aug 12th, 2015
714
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.57 KB | None | 0 0
  1. import numpy as np
  2.  
  3. #import data
  4. allData = np.random.randint(0, 100, (64, 256, 913))
  5. labels_all = np.random.randint(2, size=913)
  6.  
  7.  
  8. from scipy.signal import butter, filtfilt
  9.  
  10. freqs = {'theta': [4, 8], 'alpha': [8, 15], 'beta': [15, 30], 'gamma': [30, 50]}
  11. chan_occipital = [26, 63, 29] #list of electrodes to filter for each brain region
  12. chan_leftTemporal = [16, 14]
  13. chan_rightTemporal= [53, 51]
  14. filter_order = 5
  15. sampling_frequency= 256.0
  16.  
  17. #generate filter coefficients for each frequency band. Apply these within the loop below to each electrode of interest
  18. b_gamma,a_gamma = butter(filter_order, np.array(freqs['gamma'])/sampling_frequency, btype='bandpass')
  19. b_theta,a_theta = butter(filter_order, np.array(freqs['theta'])/sampling_frequency, btype='bandpass')
  20. b_alpha,a_alpha = butter(filter_order, np.array(freqs['alpha'])/sampling_frequency, btype='bandpass')
  21. b_beta,a_beta = butter(filter_order, np.array(freqs['beta'])/sampling_frequency, btype='bandpass')
  22.  
  23. #set initial size of features array
  24. features_all = np.zeros(shape=(allData.shape[2], 32))
  25.  
  26. for trial in range(allData.shape[2]):
  27.     #extract power of specific bands from each electrode within each brain region. add their sum to the feature array
  28.     runningPower = np.array([])
  29.  
  30.     #Occipital cortex
  31.     for channel in chan_occipital:
  32.         #extract gamma
  33.         gammaPower = (filtfilt(b_gamma,a_gamma,allData[channel,:,trial])) ** 2
  34.         gamma_firstHalf = sum(gammaPower[:allData.shape[1]/2])
  35.         gamma_secondHalf = sum(gammaPower[allData.shape[1]/2:])
  36.         #extract theta
  37.         thetaPower = (filtfilt(b_theta,a_theta,allData[channel,:,trial])) ** 2
  38.         theta_firstHalf = sum(thetaPower[:allData.shape[1]/2])
  39.         theta_secondHalf = sum(thetaPower[allData.shape[1]/2:])
  40.  
  41.         runningPower = np.hstack([runningPower, gamma_firstHalf, gamma_secondHalf, theta_firstHalf, theta_secondHalf])
  42.  
  43.     #Left temporal cortex
  44.     for channel in chan_leftTemporal:
  45.         #extract alpha
  46.         alphaPower = (filtfilt(b_alpha,a_alpha,allData[channel,:,trial])) ** 2
  47.         alpha_firstHalf = sum(alphaPower[:allData.shape[1]/2])
  48.         alpha_secondHalf = sum(alphaPower[allData.shape[1]/2:])
  49.         #extract theta
  50.         thetaPower = (filtfilt(b_theta,a_theta,allData[channel,:,trial])) ** 2
  51.         theta_firstHalf = sum(thetaPower[:allData.shape[1]/2])
  52.         theta_secondHalf = sum(thetaPower[allData.shape[1]/2:])
  53.  
  54.         runningPower = np.hstack([runningPower, alpha_firstHalf, alpha_secondHalf, theta_firstHalf, theta_secondHalf])
  55.  
  56.     #Right temporal cortex
  57.     for channel in chan_leftTemporal:
  58.         #extract beta
  59.         betaPower = (filtfilt(b_beta,a_beta,allData[channel,:,trial])) ** 2
  60.         beta_firstHalf = sum(betaPower[:allData.shape[1]/2])
  61.         beta_secondHalf = sum(betaPower[allData.shape[1]/2:])
  62.         #extract theta
  63.         thetaPower = (filtfilt(b_theta,a_theta,allData[channel,:,trial])) ** 2
  64.         theta_firstHalf = sum(thetaPower[:allData.shape[1]/2])
  65.         theta_secondHalf = sum(thetaPower[allData.shape[1]/2:])
  66.         #extract gamma
  67.         gammaPower = (filtfilt(b_gamma,a_gamma,allData[channel,:,trial])) ** 2
  68.         gamma_firstHalf = sum(gammaPower[:allData.shape[1]/2])
  69.         gamma_secondHalf = sum(gammaPower[allData.shape[1]/2:])
  70.  
  71.         runningPower = np.hstack([runningPower, beta_firstHalf, beta_secondHalf, theta_firstHalf, theta_secondHalf, gamma_firstHalf, gamma_secondHalf])
  72.  
  73.     features_all[trial] = runningPower
  74.  
  75.  
  76. #normalize feature matrix
  77. normalize = True
  78.  
  79. if normalize == False:
  80.     features_normed = (features_all - features_all.min(axis=0)) / (features_all.max(axis=0) - features_all.min(axis=0))
  81.     features_all = features_normed
  82.  
  83.  
  84. #PCA
  85. usePCA = False
  86.  
  87. if usePCA == True:
  88.     from sklearn.decomposition import RandomizedPCA
  89.  
  90.     n_components = 15
  91.  
  92.     pca = RandomizedPCA(n_components=n_components, whiten=True).fit(features_all)
  93.  
  94.     features_all = pca.transform(features_all)
  95.  
  96.  
  97. #train model
  98. trainModel = True
  99.  
  100. if trainModel == True:
  101.     from sklearn.cross_validation import train_test_split
  102.     from sklearn.svm import SVC
  103.  
  104.     features_train, features_test, labels_train, labels_test = train_test_split(features_all, labels_all, test_size=0.2, random_state=5)
  105.  
  106.     estimator = SVC(kernel='rbf', C=1, gamma=1)
  107.     estimator.fit(features_train, labels_train)
  108.     pred = estimator.predict(features_test)
  109.     score_train = estimator.score(features_train, labels_train)
  110.     score_test = estimator.score(features_test, labels_test)
  111.     print "Training score: " + str(score_train)
  112.     print "Test score: " + str(score_test)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement