def process(samples,wd,wl,bins): methylation_level = [] for sample in samples: try: df = pd.read_table("%s/%s/%s.CX_report.txt.simplified" %(wd,sample,sample),header=None,names=["chr","loc","meth","unmeth","pvalue"],index_col=0) result = slide_window("chr1", 153586731, 153589462, "-", df, bin_length=wl,bins=bins) methylation_level.append(result) except: pass df = pd.DataFrame(methylation_level) mean_value = df.mean() return mean_value
Y = Y.reshape(-1) ShR_index = np.argwhere(Y == 1).reshape(-1) NshR_index = np.argwhere(Y == 0).reshape(-1) ShR_ecg = X[ShR_index, :] NshR_ecg = X[NshR_index, :] num = 481 plt.plot(NshR_ecg[num, :], linewidth=4, color='black') plt.show() cnn_data = np.diff(NshR_ecg) plt.plot(cnn_data[num, :], linewidth=4, color='black') plt.show() # 获取窗口数据 X, timestep = slide_window(X, window, step) X = np.expand_dims(X, axis=-1) # 构建模型 input0 = Input(shape=(X.shape[1], X.shape[2], 1), name='input0') conv2d = Conv2D(filters=1, kernel_size=[1, 4], strides=1, padding='valid', use_bias=0, name='conv2d', trainable=True) tensor = conv2d(input0) tensor = Lambda(lambda x: K.squeeze(x, axis=-1), name='squeeze_0')(tensor) tensor = Lambda(lambda x: tf.nn.top_k(x, x.shape[2])[0], name='sequential_pooling_drop')(tensor) tensor = Lambda(lambda x: K.reverse(x, axes=2),
window = 0.6 # 滑动窗宽 k = 0 # 加载数据 data = sio.loadmat( r'.\ECG_data\public_ECG_5fold_data_with_annotion_1.mat')['data'] cv = np.eye(5) #1是测试集 0是训练集 # 训练集索引 index = np.argwhere(cv[k, ] == 0).reshape(-1) X_train = np.vstack(data[index, 0]) Y_train = np.vstack(data[index, 1]).reshape(-1) X_train = X_train[:, 0:int(signal_len * Fs)] # 获取窗口数据 X_train = slide_window(X_train, window, step=0.2)[0] X_train = np.expand_dims(X_train, axis=-1) def build_model(X_train): input0 = Input(shape=(X_train.shape[1], X_train.shape[2], 1), name='input0') conv2d = Conv2D(filters=1, kernel_size=[1, 4], strides=1, padding='valid', use_bias=0, name='conv2d', trainable=True) tensor = conv2d(input0)
X_test = np.vstack(data[index, 0]) Y_test = np.vstack(data[index, 1]).reshape(-1) # 打乱测试集 permutation = np.random.permutation(X_test.shape[0]) X_test = X_test[permutation, :] Y_test = Y_test[permutation] print('%d fold 训练集 ShR:%d,NshR:%d' % ((k + 1), len( np.argwhere(Y_train == 1)), len(np.argwhere(Y_train == 0)))) print('%d fold 测试集 ShR:%d,NshR:%d' % ( (k + 1), len(np.argwhere(Y_test == 1)), len(np.argwhere(Y_test == 0)))) # 取前signal_len的信号 X_train = X_train[:, 0:int(signal_len * Fs)] X_test = X_test[:, 0:int(signal_len * Fs)] # 获取滑动窗数据 X_train = slide_window(X_train, window, step)[0] X_test = slide_window(X_test, window, step)[0] # 增加一维度以适应二维卷积的输入格式 X_train = np.expand_dims(X_train, axis=-1) X_test = np.expand_dims(X_test, axis=-1) # 构建卷积-顺序池化长短时记忆神经网络 #‘channels_last’模式下,输入形如(samples,rows,cols,channels)的4D张量 input0 = Input(shape=(X_train.shape[1], X_train.shape[2], 1), name='input0') conv2d = Conv2D(filters=2, kernel_size=[1, 4], strides=1, padding='valid', use_bias=0, name='conv2d', trainable=True)
NshR_num = 520 #NshR_num = 0 NshR_label = original_label[NshR_num] VF_num = 25 VT_num = 10 # 静态斜率 NshR_cnn = np.diff(ecg[NshR_index[NshR_num], :]) VF_cnn = np.diff(ecg[VF_index[VF_num], :]) VT_cnn = np.diff(ecg[VT_index[VT_num], :]) cnn_ecg = np.vstack([NshR_cnn, VF_cnn, VT_cnn]) # 动态斜率 ecg_w = slide_window(ecg, window=0.6, step=0.2)[0] ecg_w = np.diff(ecg_w) NshR_w = ecg_w[NshR_index[NshR_num], :, :] VF_w = ecg_w[VF_index[VF_num], :, :] VT_w = ecg_w[VT_index[VT_num], :, :] dynamic = np.dstack([NshR_w, VF_w, VT_w]) dynamic = np.transpose(dynamic, [1, 0, 2]) t = np.arange(1, Fs * signal_len) / Fs min_y = -0.105 max_y = 0.095 plt.figure(figsize=(22, 8.5))
data = sio.loadmat( r'.\ECG_data\public_ECG_5fold_data_with_annotion.mat')['data'] annotation = set(np.vstack(data[:, 3]).reshape(-1)) original_label = np.vstack(data[:, 3]).reshape(-1) cv = np.eye(5) #1是测试集 0是训练集 for k in range(len(cv)): # 测试集索引 index = np.argwhere(cv[k, ] == 1).reshape(-1) ecg = np.vstack(data[index, 0]) Y_test = np.vstack(data[index, 1]).reshape(-1) # original_label = np.vstack(data[index,3]).reshape(-1) # 取前 signal_len 的信号 ecg = ecg[:, 0:int(signal_len * Fs)] # 获取滑动窗数据 X_test = slide_window(ecg, window, step)[0] # 增加一维度以适应二维卷积的输入格式 X_test = np.expand_dims(X_test, axis=-1) # 构建模型 input0 = Input(shape=(X_test.shape[1], X_test.shape[2], 1), name='input0') conv2d = Conv2D(filters=2, kernel_size=[1, 4], strides=1, padding='valid', use_bias=0, name='conv2d', trainable=True) tensor = conv2d(input0) tensor = Lambda(lambda x: tf.transpose(x, [0, 1, 3, 2]))(tensor) # 设定卷积网络的初值 init_cnn_weight = []