Ham*_*mad 3 python neural-network keras tensorflow
我正在使用 Keras 来预测我是否会得到 1 或 0 的输出。数据如下所示:
funded_amnt emp_length avg_cur_bal num_actv_rev_tl loan_status
10000 5.60088 19266 2 1
13750 5.60088 2802 6 0
26100 10.0000 19241 17 1
Run Code Online (Sandbox Code Playgroud)
目标是loan_status
,特征是剩余的。在开始构建神经网络模型之前,我已经对数据进行了标准化。
这是我的训练和测试数据的形状:
print(X_train.shape,Y_train.shape)
# Output: (693, 4) (693,)
print(X_test.shape,Y_test.shape)
# Output: (149, 4) (149,)
Run Code Online (Sandbox Code Playgroud)
我构建神经网络的过程是:
# define the keras model
model = Sequential()
model.add(Dense(4, input_dim=4,activation='relu'))
model.add(Dense(4 ,activation='relu'))
model.add(Dense(1,activation='sigmoid'))
# compile the keras model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# fit the keras model on the dataset
hist = model.fit(X_train, Y_train, epochs=10, batch_size=2)
Run Code Online (Sandbox Code Playgroud)
运行后输出hist
:
Epoch 1/10
693/693 [==============================] - 2s 2ms/step - loss: 0.6379 - acc: 0.7013
Epoch 2/10
693/693 [==============================] - 0s 611us/step - loss: 0.5207 - acc: 0.7951
Epoch 3/10
693/693 [==============================] - 0s 605us/step - loss: 0.5126 - acc: 0.7951
Epoch 4/10
693/693 [==============================] - 0s 621us/step - loss: 0.5109 - acc: 0.7951
Epoch 5/10
693/693 [==============================] - 0s 611us/step - loss: 0.5105 - acc: 0.7951
Epoch 6/10
693/693 [==============================] - 0s 636us/step - loss: 0.5091 - acc: 0.7951
Epoch 7/10
693/693 [==============================] - 0s 644us/step - loss: 0.5090 - acc: 0.7951
Epoch 8/10
693/693 [==============================] - 0s 659us/step - loss: 0.5086 - acc: 0.7951
Epoch 9/10
693/693 [==============================] - 0s 668us/step - loss: 0.5083 - acc: 0.7951
Epoch 10/10
693/693 [==============================] - 0s 656us/step - loss: 0.5076 - acc: 0.7951
Run Code Online (Sandbox Code Playgroud)
这一切几乎相同,并且在第二个 Epoch 之后不会改变。我试过改变时代数和批次大小,但一直得到相同的结果。这是正常的吗?或者这是过度拟合的迹象,我需要更改一些参数
您的测试数据用于监控模型对训练数据的过度拟合:
hist = model.fit(X_train, Y_train, validation_data=(X_test, Y_test), epochs=10, batch_size=2)
Run Code Online (Sandbox Code Playgroud)
在训练过程中,您将达到一个点,在该点上训练损失继续减少,但您的测试损失停止减少。那是您的数据开始过度拟合的点。
在统计学中,过度拟合是“分析的结果与特定数据集过于接近或完全对应,因此可能无法拟合额外的数据或可靠地预测未来的观察结果”。
作为一个极端的例子,如果参数的数量等于或大于观察的数量,那么模型可以通过简单地记住整个数据来完美地预测训练数据。但是,这样的模型在进行预测时通常会严重失败。
通常使用一些“训练数据”来训练学习算法:已知期望输出的示例情况。目标是当输入在训练期间未遇到的“验证数据”时,该算法也将在预测输出方面表现良好。在学习时间过长或训练样本很少的情况下,过度拟合尤其可能发生,导致学习者调整训练数据的非常特定的随机特征,而这些特征与目标函数没有因果关系。在这个过拟合的过程中,在训练样例上的性能仍然提高,而在看不见的数据上的性能变得更糟。
绿线代表过拟合模型,黑线代表正则化模型。虽然绿线最好跟随训练数据,但它过于依赖该数据,与黑线相比,它可能对新的未见数据具有更高的错误率。
归档时间: |
|
查看次数: |
1299 次 |
最近记录: |