我有不同列中的数据,但我不知道如何提取它以将其保存在另一个变量中.
index a b c
1 2 3 4
2 3 4 5
Run Code Online (Sandbox Code Playgroud)
我该如何选择'a','b'并保存到DF1?
我试过了
df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']
Run Code Online (Sandbox Code Playgroud)
似乎没有工作.
我有兴趣知道如何将pandas数据帧转换为NumPy数组.
数据帧:
import numpy as np
import pandas as pd
index = [1, 2, 3, 4, 5, 6, 7]
a = [np.nan, np.nan, np.nan, 0.1, 0.1, 0.1, 0.1]
b = [0.2, np.nan, 0.2, 0.2, 0.2, np.nan, np.nan]
c = [np.nan, 0.5, 0.5, np.nan, 0.5, 0.5, np.nan]
df = pd.DataFrame({'A': a, 'B': b, 'C': c}, index=index)
df = df.rename_axis('ID')
Run Code Online (Sandbox Code Playgroud)
给
label A B C
ID
1 NaN 0.2 NaN
2 NaN NaN 0.5
3 NaN 0.2 0.5
4 0.1 0.2 NaN …Run Code Online (Sandbox Code Playgroud) 我的输入只是一个包含339732行和两列的csv文件:
我正在尝试在堆叠的LSTM模型上训练我的数据:
data_dim = 29
timesteps = 8
num_classes = 2
model = Sequential()
model.add(LSTM(30, return_sequences=True,
input_shape=(timesteps, data_dim))) # returns a sequence of vectors of dimension 30
model.add(LSTM(30, return_sequences=True)) # returns a sequence of vectors of dimension 30
model.add(LSTM(30)) # return a single vector of dimension 30
model.add(Dense(1, activation='softmax'))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
model.summary()
model.fit(X_train, y_train, batch_size = 400, epochs = 20, verbose = 1)
Run Code Online (Sandbox Code Playgroud)
这会引发错误:
回溯(最近一次调用最后一次):文件"first_approach.py",第80行,在model.fit中(X_train,y_train,batch_size = 400,epochs = 20,verbose = 1)
ValueError:检查模型输入时出错:预期lstm_1_input有3个维度,但是有形状的数组(339732,29)
我尝试使用重塑我的输入,X_train.reshape((1,339732, 29))但它没有显示错误:
ValueError:检查模型输入时出错:期望lstm_1_input具有形状(无,8,29)但是具有形状的数组(1,339732,29) …
在Tensorflow的RNN教程中:https://www.tensorflow.org/tutorials/recurrent .它提到了两个参数:批量大小和时间步长.我对这些概念感到困惑.在我看来,RNN引入批次是因为列车序列可能非常长,使得反向传播不能计算那么长(爆炸/消失的梯度).因此,我们将长列车序列划分为较短的序列,每个序列都是一个小批量,其大小称为"批量大小".我在这儿吗?
关于时间步长,RNN仅由细胞(LSTM或GRU细胞或其他细胞)组成,并且该细胞是连续的.我们可以通过展开来理解顺序概念.但是展开顺序单元是一个概念,而不是真实的,这意味着我们不会以展开的方式实现它.假设列车序列是文本语料库.然后我们每次向RNN小区提供一个单词,然后更新权重.那么为什么我们在这里有时间步骤呢?结合我对上述"批量大小"的理解,我更加困惑.我们是用单词还是多个单词(批量大小)来提供单元格?
在我原来的环境中
X1 = (1200,40,1)
y1 = (1200,10)
Run Code Online (Sandbox Code Playgroud)
然后,我可以完美地使用我的代码:
model = Sequential()
model.add(LSTM(12, input_shape=(40, 1), return_sequences=True))
model.add(LSTM(12, return_sequences=True))
model.add(LSTM(6, return_sequences=False))
model.add((Dense(10)))
Run Code Online (Sandbox Code Playgroud)
现在,我进一步获得了另一个与X1和相同大小的时间序列数据y1。即
X2 = (1200,40,1)
y2 = (1200,10)
Run Code Online (Sandbox Code Playgroud)
现在,我叠X1,X2并且y1,y2作为3D阵列:
X_stack = (1200,40,2)
y_stack = (1200,10,2)
Run Code Online (Sandbox Code Playgroud)
然后,我尝试修改我的keras代码,例如:
model = Sequential()
model.add(LSTM(12, input_shape=(40, 2), return_sequences=True))
model.add(LSTM(12, return_sequences=True))
model.add(LSTM(6, return_sequences=False))
model.add((Dense((10,2))))
Run Code Online (Sandbox Code Playgroud)
我希望我的代码直接与3D数组一起使用X_stack,y_stack而不希望将其重塑为2D数组。您能帮我修改设置吗?谢谢。