This project aims to automatically detect abrupt changes in the spiking response of high dimesnional neural circuits. Whereas previous efforts have focused on finding 'change points' in the spiking response of single neurons, the rapid growth in the ability to simultaneously record from hundreds of neurons requires the development of new methods.
In [44]:
%load_ext autoreload
%autoreload 2
%matplotlib inline
In [3]:
import numpy as np
import scipy.stats as stats
import scipy.signal, scipy.io, numpy.matlib
import matplotlib.pyplot as plt
from matplotlib.pyplot import cm
from matplotlib import colors as mcolors
In [5]:
import re, os, sys
sys.path.append('../')
In [7]:
from src.models import train_model
from src.features import build_features
from src.visualization import visualize
In [41]:
dir=r'../Data/external/'
data_files=os.listdir(path=dir)
data_files=[ x for x in data_files if x.find('.mat') !=-1]
In [6]:
from changepy import pelt
from changepy.costs import normal_mean, poisson, exponential
In [55]:
# setting up parameters
gauss_options=[2]
block_options=[60]
for file in data_files[4:5]:
for gauss in gauss_options:
for block in block_options:
params={'res':2, 'block_width': block }
params['gauss_width']=gauss * params['res']
params['methods']=[ 'diff_frobenius']#variation','frobenius',
res=params['res']
block_width=params['block_width']
gauss_width=params['gauss_width']
data_retina=scipy.io.loadmat(dir+file)
data_retina['file']=file
sum_diff_corr, stim=train_model.detect_changes(data_retina, params)
plt.title('Gauss: ' + str(gauss_width) + ' Block: ' + str(block_width))
summary_stat=sum_diff_corr['diff_frobenius']
cp_cost=poisson # cost metric
model=pelt# pelt as change point algorithm
time_pt=train_model.change_1d_series(summary_stat, model, cp_cost, params)
visualize.plot_cp_results(sum_diff_corr,stim, data_retina, params)
plt.plot(time_pt)
In [54]:
np.array([5.2, 3.1,4]).astype(int)
Out[54]:
In [38]:
# setting up parameters
gauss_options=[2]
block_options=[60]
for file in data_files[2:9]:
for gauss in gauss_options:
for block in block_options:
params={'res':2, 'block_width': block }
params['gauss_width']=gauss * params['res']
params['methods']=[ 'diff_frobenius']#'pop_sum', 'mean', 'diff_base', 'variation','frobenius',
res=params['res']
block_width=params['block_width']
gauss_width=params['gauss_width']
#file='data_03_13_12_t6.mat'
#file='data_03_13_12_t2'
data_retina=scipy.io.loadmat(dir+file)
data_retina['file']=file
sum_diff_corr, stim=train_model.detect_changes(data_retina, params)
#visualize.plot_cp_results(sum_diff_corr,stim, data_retina, params)
plt.title('Gauss: ' + str(gauss_width) + ' Block: ' + str(block_width))
summary_stat=sum_diff_corr['diff_frobenius']
cp_model=poisson
cp_pts=pelt(cp_model(summary_stat), len(summary_stat))
time_pt=np.zeros(summary_stat.size * res * block_width)
change_points=np.array(cp_pts) * res * block_width
visualize.plot_cp_results(sum_diff_corr,stim, data_retina, params)
time_pt[change_points]=1
plt.plot(time_pt)
In [10]:
# setting up parameters
gauss_options=[2]
block_options=[60]
for file in data_files[9:15]:
for gauss in gauss_options:
for block in block_options:
params={'res':2, 'block_width': block }
params['gauss_width']=gauss * params['res']
params['methods']=[ 'diff_frobenius']#'pop_sum', 'mean', 'diff_base', 'variation','frobenius',
res=params['res']
block_width=params['block_width']
gauss_width=params['gauss_width']
#file='data_03_13_12_t6.mat'
#file='data_03_13_12_t2'
data_retina=scipy.io.loadmat(dir+file)
data_retina['file']=file
sum_diff_corr, stim=train_model.detect_changes(data_retina, params)
#visualize.plot_cp_results(sum_diff_corr,stim, data_retina, params)
plt.title('Gauss: ' + str(gauss_width) + ' Block: ' + str(block_width))
summary_stat=sum_diff_corr['diff_frobenius']
cp_exponential=pelt(exponential(summary_stat), len(summary_stat))
time_pt=np.zeros(summary_stat.size * res * block_width)
change_points=np.array(cp_exponential) * res * block_width
visualize.plot_cp_results(sum_diff_corr,stim, data_retina, params)
time_pt[change_points]=1
plt.plot(time_pt)
In [37]:
# setting up parameters
gauss_options=[2]
block_options=[60]
for file in data_files[9:10]:
for gauss in gauss_options:
for block in block_options:
params={'res':2, 'block_width': block }
params['gauss_width']=gauss * params['res']
params['methods']=[ 'diff_frobenius']#'pop_sum', 'mean', 'diff_base', 'variation','frobenius',
res=params['res']
block_width=params['block_width']
gauss_width=params['gauss_width']
#file='data_03_13_12_t6.mat'
#file='data_03_13_12_t2'
data_retina=scipy.io.loadmat(dir+file)
data_retina['file']=file
sum_diff_corr, stim=train_model.detect_changes(data_retina, params)
#visualize.plot_cp_results(sum_diff_corr,stim, data_retina, params)
plt.title('Gauss: ' + str(gauss_width) + ' Block: ' + str(block_width))
summary_stat=sum_diff_corr['diff_frobenius']
cp_model=poisson
cp_pts=pelt(cp_model(summary_stat), len(summary_stat))
time_pt=np.zeros(summary_stat.size * res * block_width)
change_points=np.array(cp_pts) * res * block_width
time_pt[change_points]=1
visualize.plot_cp_results(sum_diff_corr,stim, data_retina, params)
plt.plot(time_pt)
In [39]:
# setting up parameters
gauss_options=[2]
block_options=[60]
for file in data_files[10:15]:
for gauss in gauss_options:
for block in block_options:
params={'res':2, 'block_width': block }
params['gauss_width']=gauss * params['res']
params['methods']=[ 'diff_frobenius']#'pop_sum', 'mean', 'diff_base', 'variation','frobenius',
res=params['res']
block_width=params['block_width']
gauss_width=params['gauss_width']
#file='data_03_13_12_t6.mat'
#file='data_03_13_12_t2'
data_retina=scipy.io.loadmat(dir+file)
data_retina['file']=file
sum_diff_corr, stim=train_model.detect_changes(data_retina, params)
#visualize.plot_cp_results(sum_diff_corr,stim, data_retina, params)
plt.title('Gauss: ' + str(gauss_width) + ' Block: ' + str(block_width))
summary_stat=sum_diff_corr['diff_frobenius']
cp_model=poisson
cp_pts=pelt(cp_model(summary_stat), len(summary_stat))
time_pt=np.zeros(summary_stat.size * res * block_width)
change_points=np.array(cp_pts) * res * block_width
time_pt[change_points]=1
visualize.plot_cp_results(sum_diff_corr,stim, data_retina, params)
plt.plot(time_pt)
In [11]:
import pandas as pd
In [14]:
discrete_sim_spikes=build_features.sim_brian_spikes(duration_epochs=5400)
In [ ]:
gauss=10
params={'res':2, 'block_width': 37 }
params['gauss_width']=gauss * params['res']
params['methods']=['frobenius' ,'diff_frobenius']
sum_diff_corr=train_model.detect_brian_spikes_changes(discrete_sim_spikes, params)
In [35]:
summary_stat=sum_diff_corr['diff_frobenius'][1:]
In [36]:
cp_exponential=pelt(poisson(summary_stat), len(summary_stat))
time_pt=np.zeros(summary_stat.size * params['res'] * params['block_width'])
change_points=np.array(cp_exponential) * params['res'] * params['block_width']
#visualize.plot_cp_results(sum_diff_corr,stim, data_retina, params)
time_pt[change_points]=1
plt.plot(time_pt)
Out[36]:
In [25]:
plt.plot(sum_diff_corr['frobenius'])
plt.plot(sum_diff_corr['diff_frobenius'])
Out[25]:
In [27]:
pelt?
In [47]:
sum_diff_corr
Out[47]:
In [49]:
cp_exponential=pelt(exponential(summary_stat), len(summary_stat))
In [50]:
time_pt=np.zeros(summary_stat.size * res * block_width)
In [40]:
summary_stat.size
Out[40]:
In [51]:
change_points=np.array(cp_exponential) * res * block_width
In [52]:
time_pt[change_points]=1
In [53]:
plt.plot(time_pt)
Out[53]:
In [54]:
visualize.plot_cp_results(sum_diff_corr,stim, data_retina, params)
plt.plot(time_pt)
Out[54]: