我是神经网络的新手,我正在尝试构建和训练可以预测 int_rate 的神经网络。数据如下:
loan_amnt annual_inc emp_length int_rate
10000 38000.0 5.600882 12.40
13750 17808.0 5.600882 28.80
26100 68000.0 10.00000 20.00
数据标准化后:
array([[0.23076923, 0.01141827, 0.44444444],
[0.32692308, 0.00535096, 0.44444444],
[0.64358974, 0.02043269, 1. ],
...,
[0.23076923, 0.04507212, 1. ],
[0.43846154, 0.0390625 , 0.44444444],
[0.14102564, 0.02103365, 1. ]])
并将数据拆分为特征和目标(目标为int_rate)后,我得到了以下形状:
print(X_train.shape, X_val.shape, X_test.shape, Y_train.shape, Y_val.shape, Y_test.shape)
输出:(693, 3) (148, 3) (149, 3) (693,) (148,) (149,)
此后,我开始构建模型:
model = Sequential([
Dense(32, activation='relu', input_shape=(3,)),
Dense(32, activation='relu'),
Dense(1, activation='sigmoid'),
])
然后使用均方误差作为我的损失函数对其进行编译:
model.compile(loss='mse',
optimizer='adam',
metrics=['acc'])
最后,对模型进行拟合和训练:
hist = model.fit(X_train, Y_train,
batch_size=32, epochs=100,
validation_data=(X_val, Y_val))
训练时:
Train on 693 samples, validate on 148 samples
Epoch 1/100
693/693 [==============================] - 2s 2ms/step - loss: 158.9353 - acc: 0.0000e+00 - val_loss:
188.9402 - val_acc: 0.0000e+00
Epoch 2/100
693/693 [==============================] - 0s 51us/step - loss: 158.9353 - acc: 0.0000e+00 -
val_loss:
188.9402 - val_acc: 0.0000e+00
所有纪元都具有相同的数字和精度,即为零。有办法解决吗?
答案 0 :(得分:0)
您尝试预测的int_rate
变量是连续的,而不是离散的。这意味着您有回归问题。 accuracy
度量标准仅用于分类问题,因此它对回归没有任何意义(这就是为什么它始终为零)的原因。
此外,由于您在输出中使用sigmoid
激活,因此网络只能预测[0, 1]
范围内的值,因此,要使用此激活,您必须对目标数据进行规范化({{ 1}}变量)。
答案 1 :(得分:0)
首先,您要预测一个连续值,您有两种选择,要么在模型结尾不使用 Sigmoid ,要么使用线性或不激活,然后模型将输出单个值。正如其他建议一样,如果您知道边界并保留了S型曲线,则可以对数据进行归一化。
在任何一种情况下,准确性可能都不是用于回归的完美指标。通常它没有任何意义, MSE 是足够好的指标。