睿·诺∞ 2024-03-19 17:22 采纳率: 80%
浏览 11
已结题

神经网络是否过拟合、怎么提高预测能力

请问一下大家,神经网络训练得到如下图的结果应该不是过拟合吧,数据是表格数据,数据量大约9万多,按照训练集、验证集、测试集8:1:1设置

img


测试集的结果为:
Test Loss=0.000760476
Test Accuracy=0.987340391
Test RMSE=0.027576728
Test MAE=0.016078779

但是使用神经网络来对新数据进行预测的结果并不是很理想,如下图,新数据量大约2万多

img


指标结果如下
Mean Squared Error (MSE)=22.92607648
Root Mean Squared Error (RMSE)=4.788118261
Mean Absolute Error (MAE)=2.503658454
R-squared (R2)=0.621191652
想问问大家是什么原因,也想了解一下如何提高神经网络对新数据的预测能力,谢谢

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-19 17:23
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析: 通过训练集和测试集的结果来看,模型的训练效果已经很不错了,但是对于新数据的预测却不理想,可能有以下可能原因: 1.训练集和测试集的数据与新数据之间有较大的差异性,可能存在数据偏差,导致模型无法准确预测新数据。 2.模型过拟合训练集和测试集,但是无法泛化到新数据上。 提高神经网络对新数据的预测能力的方法: 1.增加训练数据集的种类和数量,使模型具有更好的泛化能力。 2.对数据进行预处理,如归一化、标准化、降噪等处理方式。 3.使用更加高效的算法或模型结构,如卷积神经网络(CNN)、循环神经网络(RNN)等。 4.对模型进行超参数调优,如学习率、正则化系数等。 5.使用集成学习方法,如Bagging、Boosting等。 6.使用迁移学习方法,在原模型的基础上进行迁移学习,使得模型对新数据的预测能力更强。 案例: 针对上述问题分析及提高预测能力的方法,以下提供一个简单的案例,使用Keras深度学习框架训练模型并使用迁移学习方法提高模型的泛化能力。
    # 导入所需库
    from keras.applications import VGG16
    from keras.preprocessing.image import ImageDataGenerator
    from keras.models import Sequential
    from keras.layers import Dense, Flatten, Dropout
    from keras.optimizers import Adam
    # 定义VGG16模型
    base_model = VGG16(weights="imagenet", include_top=False, input_shape=(150, 150, 3))
    # 冻结卷积层参数
    for layer in base_model.layers:
        layer.trainable = False
    # 定义增强器
    train_data = ImageDataGenerator(
        rescale=1. / 255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True,
        validation_split=0.2
    )
    # 加载训练集和验证集
    train_set = train_data.flow_from_directory(
        'train',
        target_size=(150, 150),
        batch_size=32,
        shuffle=True,
        seed=42,
        class_mode='binary',
        subset='training'
    )
    validation_set = train_data.flow_from_directory(
        'train',
        target_size=(150, 150),
        batch_size=32,
        shuffle=True,
        seed=42,
        class_mode='binary',
        subset='validation'
    )
    # 定义新的神经网络模型
    model = Sequential()
    # 添加VGG16卷积层
    model.add(base_model)
    # 添加全局平均池化层
    model.add(Flatten())
    # 添加Dropout层
    model.add(Dropout(0.5))
    # 添加Dense层
    model.add(Dense(units=128, activation='relu'))
    # 添加输出层
    model.add(Dense(units=1, activation='sigmoid'))
    # 编译模型
    model.compile(optimizer=Adam(lr=0.001), loss='binary_crossentropy', metrics=['accuracy'])
    # 训练模型
    history = model.fit_generator(
        train_set,
        epochs=100,
        validation_data=validation_set
    )
    # 对新数据进行预测
    test_data = ImageDataGenerator(rescale=1. / 255)
    test_set = test_data.flow_from_directory(
        'test',
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary'
    )
    model.evaluate_generator(test_set)
    # 使用迁移学习方法提高模型预测能力
    # 解除卷积层的冻结,重新训练模型
    for layer in base_model.layers:
        layer.trainable = True
    model.compile(optimizer=Adam(lr=0.001), loss="binary_crossentropy", metrics=["accuracy"])
    history = model.fit_generator(
        train_set,
        epochs=50,
        validation_data=validation_set
    )
    # 对新数据进行预测,评估模型性能
    model.evaluate_generator(test_set)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月11日
  • 已采纳回答 6月3日
  • 修改了问题 3月19日
  • 创建了问题 3月19日

悬赏问题

  • ¥15 想要写一个跟百度网盘一样文件管理器,打开全部文件夹后 ,一级一级返回
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询
  • ¥20 我的是道格手机,重置后屏幕右上角出现红色字的未写入tee key 和未写入google key请问怎么去掉啊
  • ¥30 关于R语言运行分区生存模型中的问题!
  • ¥15 校内二手商品转让网站
  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?
  • ¥100 求Web版SPC控制图程序包调式
  • ¥20 指导如何跑通以下两个Github代码