Ejemplo n.º 1
0
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),
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
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))
Ejemplo n.º 6
0
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 = []