iugvao 2024-02-05 14:08 采纳率: 0%
浏览 4

机器学习预测雷诺数误差特别大

刚开始学机器学习写了一个预测雷诺数的程序,但是运行出来误差特别大,自己怎么改都没变化,这到底哪里出问题了,求解答。


import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

dataset = pd.read_csv('D:\雷诺数.csv')
x = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, random_state = 0)

from keras import models
from keras import layers

model = models.Sequential()
model.add(layers.Dense(64,activation='relu',input_shape=(4,)))
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(1))
model.compile(optimizer='adam',
                  loss='mse',
                  metrics=['mae'])

x_val = x_train[:400]
partial_x_train = x_train[400:]
y_val = y_train[:400]
partial_y_train = y_train[400:]

history = model.fit(partial_x_train,
          partial_y_train,
          epochs=6,
          batch_size=16,
          validation_data=(x_val,y_val))

loss, accuracy = model.evaluate(x_test, y_test)
print('\ntest loss', loss)
print('accuracy', accuracy)
y_pred = model.predict(x_test)
print(y_pred)
  • 写回答

2条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-02-05 14:10
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。

    在处理机器学习预测误差过大的问题时,可以尝试以下方法:

    1. 数据预处理:检查输入数据是否存在异常值、缺失值或非线性分布的问题。对于雷诺数这类物理量,可能需要进行归一化或者标准化处理。

      from sklearn.preprocessing import StandardScaler
      sc = StandardScaler()
      x_train = sc.fit_transform(x_train)
      x_test = sc.transform(x_test)
      
    2. 模型调整

      • 增加网络层数或者神经元数量,或者尝试使用不同类型的激活函数(如Leaky ReLU、tanh等)。
      • 调整优化器和学习率,比如试试Adamax或者其他优化器,并调整其参数。
      • 提高训练的epochs数量,当前设置为6可能不足以收敛到最优解。
    3. 正则化:防止过拟合,可以尝试添加Dropout层或L1、L2正则化。

    4. 特征工程:检查是否选择了最具代表性的特征,考虑增加或删除某些特征以提高预测性能。

    5. 评估指标:当前只使用了MSE作为损失函数,若问题本身对绝对误差更敏感,可尝试更改loss为均方根误差(RMSE)或其他更适合的评价指标。

    6. 模型选择与验证:尝试不同的模型架构,比如使用具有更高复杂度的深度学习模型(如卷积神经网络、循环神经网络),或者尝试使用传统机器学习模型(如决策树、随机森林、支持向量机等)看看效果如何。

    针对您提供的代码,具体改进如下:

    # 数据预处理
    scaler = StandardScaler()
    x_train = scaler.fit_transform(x_train)
    x_test = scaler.transform(x_test)
    
    # 模型结构调整及训练参数修改
    model = models.Sequential()
    model.add(layers.Dense(128, activation='relu', input_shape=(4,)))
    model.add(layers.Dense(64, activation='relu'))
    model.add(layers.Dense(1))
    
    model.compile(optimizer=keras.optimizers.Adamax(lr=0.001), 
                  loss='mse',
                  metrics=['mae'])
    
    history = model.fit(x_train, 
                        y_train,
                        epochs=50, # 增加epochs数量
                        batch_size=32, # 可根据实际情况调整batch大小
                        validation_split=0.2, # 直接在训练集上划分验证集,无需手动切分
                        verbose=1)
    
    # 验证并测试模型
    loss, accuracy = model.evaluate(x_val, y_val) # 使用验证集评估
    print('\nvalidation loss', loss)
    print('validation mae', accuracy)
    
    y_pred = model.predict(x_test)
    

    以上仅为基础建议,实际应用中可能需要结合具体问题进一步深入分析和调试。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月5日

悬赏问题

  • ¥15 本地测试网站127.0.0.1 已拒绝连接,如何解决?(标签-ubuntu)
  • ¥50 Qt在release捕获异常并跟踪堆栈(有Demo,跑一下环境再回答)
  • ¥30 python,LLM 文本提炼
  • ¥15 关于将inet引入的相关问题
  • ¥15 关于一个倒计时的操作和显示设计
  • ¥15 提问STK的问题,哪位航天领域的同学会啊
  • ¥15 苹果系统的mac m1芯片的笔记本使用ce修改器使用不了
  • ¥15 单相逆变的电压电流双闭环中进行低通滤波PID算法改进
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 如何卸载arcgis 10.1 data reviewer for desktop