首页 > 编程问答 >我的 RandomForestRegressor 上的 MAE 和 MSE 非常高

我的 RandomForestRegressor 上的 MAE 和 MSE 非常高

时间:2024-07-21 05:57:11浏览次数:14  
标签:python machine-learning scikit-learn random-forest

我得到了一个航班预测数据集,我想尝试一下我的机器学习技能。

我清理了数据并修复了一些新功能并删除了其他功能 我还得到了一些有价值的数据。但是当我尝试做出预测并评估我的模型时 这就是我得到的答案!那是在我用 SearchGridCV 调整我的模型之后

Regression metrics on the test set
r2: 82.10%
mean_absolute_error: 1229.1407307097613
mean_squared_error: 2933265.159841384
model = RandomForestRegressor(
        max_depth=20,
        max_features='sqrt',
        min_samples_leaf=2,
        min_samples_split=5,
        n_estimators=200
)

X = df.drop('Price',axis=1)
y = df['Price']

X_train, X_test, y_train, y_test = train_test_split(
    pd.get_dummies(X)
    , y, test_size=0.2, random_state=42)

model.fit(X_train,y_train)
y_preds = model.predict(X_test)

我尝试修改超参数并删除一些异常值

def remove_outliers_iqr(df, column):
    Q1 = df[column].quantile(0.25)
    Q3 = df[column].quantile(0.75)
    IQR = Q3 - Q1
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR
    return df[(df[column] >= lower_bound) & (df[column] <= upper_bound)]

numerical_columns = ['Price', 'Dep_hours', 'Dep_min', 'Arrival_hours', 'Arrival_min', 'Duration_hours', 'Duration_min']
for column in numerical_columns:
    df = remove_outliers_iqr(df, column)

但我仍然得到相同的结果

这是完整的笔记本,因为我不知道以笔记本方式在此处附加整个代码

https://github.com/jamhus/ztm-course/blob/master/Test%20projects/fligt%20prices%20analysis/flight%20prices.ipynb


正在遇到一个常见问题,在机器学习中,这个问题与模型性能本身无关,而与数据的规模有关。简单来说,由于的航班价格(可能在几百到几千美元之间)的范围很广,因此即使是表现良好的模型,其错误指标看起来也很高。让我们来分析一下:

  1. 的指标并不像看起来那么糟糕: 2933265 的 MSE 听起来很吓人,但请记住,这是误差的平方。它的平方根,即 RMSE(均方根误差)约为 1712,考虑到机票价格范围,这更易于理解。同样,平均绝对误差 1229 美元意味着,平均而言,的模型的预测值与实际机票价格相差约 1229 美元。

  2. 上下文至关重要: 82.10% 的 R 平方分数实际上非常不错。这表明的模型解释了机票价格差异的很大一部分。然而,在预测价格时,始终存在限制因素(例如,航空公司使用的动态定价策略,我们无法完全捕捉到)。

改进建议:

  • 特征工程:
    • 日期信息: 从“出发日期”中提取宝贵的特征,如“月份”、“星期几”和“是否为节假日”。机票价格在一年和一周中的不同时间差别很大。
    • 航线: 创建航线特征(例如,“出发城市”-“到达城市”)或使用出发地/目的地受欢迎程度。
    • 中途停留: 如果有数据,请说明航班是否有中途停留。
    • 时间段: 根据“出发时间”和“到达时间”创建类别,例如“早晨”、“下午”、“红色航班”。
  • 尝试不同的模型: 随机森林通常表现良好,但也可以尝试其他回归模型:
    • XGBoost 或 LightGBM: 这些是强大的基于树的模型,通常优于随机森林。
    • 梯度提升: 以其准确性而著称。
  • 交叉验证: 使用更稳健的交叉验证技术,如 K 折交叉验证,以获得模型性能的更可靠评估。

调试的方法:

  1. 残差分析: 绘制预测价格与实际价格之间的差异图(残差)。寻找模式可以揭示模型难以预测的特定价格范围或航班类型。
  2. 特征重要性: 检查的随机森林模型中哪些特征最重要。这可以提供有关哪些因素在推动价格方面最具预测性的见解,并可能指导进行进一步的特征工程。

请记住: 在预测机票价格等复杂问题时,完美的准确性几乎是不可能的。专注于改进的模型,以获得对价格趋势的可靠理解并最小化预测误差,同时也要认识到固有的不确定性。

如果有任何其他问题或想深入探讨特定方面,请随时提出!

标签:python,machine-learning,scikit-learn,random-forest
From: 78770230

相关文章

  • python 中的可扩展视频文件完整性验证
    我的目录包含约100万个视频文件,嵌套在100个子目录下。我想编写一个python脚本来验证这些文件没有损坏,然后删除损坏的文件。做到这一点最有效的方法是什么?它运行的机器有64个cpu核心。当然,以下是如何在Python中构建可扩展视频文件完整性验证器的步骤,该验证器可以......
  • Python:对很高维的矩阵进行对角化?
    目前我正在研究一个涉及对角化矩阵以获得特征值和特征向量的问题。但现在我想将问题扩展到200,000x200,000的尺寸。我查找了如何将矩阵存储在numpy中,有人建议使用PyTables。看起来很有希望。但我想知道哪里有工具可以帮助对PyTables中的矩阵存储进行对角化。......
  • 除了curses之外,是否有一个python包可以轻松控制终端的输出?
    我现在正在处理一些小项目,我对GUI的偏好是终端中漂亮的文本界面。我宁愿不强迫用户处理Windowscurses二进制文件,所以我正在寻找不同的选项。我已经发现了asciimatics,但我想考虑所有可能的选择。如果有人有任何经验或知道解决此用例的包,我将不胜感激。谢谢你说的没错......
  • 当值来自函数 python unittest 时,如何模拟全局变量
    我必须在python中模拟全局变量,但变量值来自另一个函数。当我导入文件时,这个函数正在运行,但我想要那里的模拟值。secrets.pyimporttracebackimportloggingimportboto3importosimportjsonlogger=logging.getLogger()logger.setLevel(logging.INFO)secret_......
  • 使用 python print 和 gdb 时出现 BrokenPipeError
    我正在尝试在Linux中运行应用程序并使用Python生成输入:python3-c'print(".....")'|./someapp但出现下一个错误:Exceptionignoredin:<_io.TextIOWrappername='<stdout>'mode='w'encoding='utf-8'>BrokenPipeError:......
  • python 舰队容器
    我正在尝试使用容器在flet中制作一个菜单,它应该是半透明的,但其中的项目不是。我尝试将opacity=1分配给元素,但没有成功-它们与容器一样透明感谢任何帮助我的代码:nickname=ft.TextField(label="xxx",hint_text="xxx")column=ft.Column(controls=[nickname......
  • Python应用程序跨子包共享的配置文件
    我正在构建一个应用程序来控制一些硬件。我在包中实现了不同类型的硬件:电机和测量设备。我的文件结构如下:name_of_my_app/__init__.pymain.pyconfig.iniCONFIG.pymotors/__init__.pyone_kind_of_motor.pymeasurement_devices/......
  • python中时间序列数据的梯度计算
    我正在尝试编写一个函数,它可以从最适合下面的线返回梯度dataframe在浏览了谷歌的几个资源之后,我仍然不确定这是如何完成的。我明白最佳拟合线的计算公式为:y=mx+b将因变量(y)设置为foos,将自变量(x)设置为DateTimeDatafram......
  • 调试用 C 编写的 Python 扩展
    我非常熟悉编写C代码,并且很擅长编写Python代码。我正在尝试学习如何用C编写可以从OSX10.15.7上的Python-3.9.X调用的模块。我已经得到了几个“helloworld”类型的示例,但是对于复杂的示例,我正在努力弄清楚如何调试我编写的C扩展。MWE:src/add.c//......
  • 具有块大小选项的 Python pandas read_sas 因索引不匹配而失败并出现值错误
    我有一个非常大的SAS文件,无法容纳在我的服务器内存中。我只需要转换为镶木地板格式的文件。为此,我使用pandas中chunksize方法的read_sas选项分块读取它。它主要是在工作/做它的工作。除此之外,一段时间后它会失败并出现以下错误。此特定SAS文件有794......