我是一个机器学习的新手,这是第一个真正的ML任务挑战之一。如何查找数据集是否可以训练神经网络?
一些实验数据包含512个独立的布尔特征和一个布尔结果。
在提供的数据集中有大约1e6个实验实验记录。
在经典的XOR示例中,需要4种可能状态中的4种来训练NN。在我的情况下,它只有2^(10-512) = 2^-505
接近零。
我没有关于数据性质的更多信息,只是这些(512 + 1) * 1e6
位。
在可用数据上尝试了带有1个隐藏层的NN。训练集上的训练神经网络的输出甚至从训练集中输出总是接近于0,而不是接近“1”的单个输出。玩重量初始化,梯度下降学习率。
我code利用TensorFlow 1.3,Python 3的型号摘录:
with tf.name_scope("Layer1"):
#W1 = tf.Variable(tf.random_uniform([512, innerN], minval=-2/512, maxval=2/512), name="Weights_1")
W1 = tf.Variable(tf.zeros([512, innerN]), name="Weights_1")
b1 = tf.Variable(tf.zeros([1]), name="Bias_1")
Out1 = tf.sigmoid(tf.matmul(x, W1) + b1)
with tf.name_scope("Layer2"):
W2 = tf.Variable(tf.random_uniform([innerN, 1], minval=-2/512, maxval=2/512), name="Weights_2")
#W2 = tf.Variable(tf.zeros([innerN, 1]), name="Weights_2")
b2 = tf.Variable(tf.zeros([1]), name="Bias_2")
y = tf.nn.sigmoid(tf.matmul(Out1, W2) + b2)
with tf.name_scope("Training"):
y_ = tf.placeholder(tf.float32, [None,1])
cross_entropy = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(
labels = y_, logits = y)
)
train_step = tf.train.GradientDescentOptimizer(0.005).minimize(cross_entropy)
with tf.name_scope("Testing"):
# Test trained model
correct_prediction = tf.equal(tf.round(y), tf.round(y_))
# ...
# Train
for step in range(500):
batch_xs, batch_ys = Datasets.train.next_batch(300, shuffle=False)
_, my_y, summary = sess.run([train_step, y, merged_summaries],
feed_dict={x: batch_xs, y_: batch_ys})
我怀疑两种情况:
- 我的错 - 坏NN执行,错误的体系结构;
- 坏数据。与XOR示例相比,不完整的训练数据会导致NN失败。然而,训练样本喂给训练好的神经网络应该给出正确的预测,不是吗?
如何评价如果有可能在所有所提供的数据训练神经网络(2层感知)来预测结果?一个可胜任的例子将是XOR例子。反对一些随机噪音。
我不会倾向于使用神经网络来处理仅由布尔输入组成的数据。 –
@GordonLinoff在这种情况下什么是更好的方法? – Serge
我会从决策树开始,然后迅速切换到随机森林。根据数据的性质,您可能对SVM有好运(取决于数据结构),但我认为随机森林可能会做得更好。 –