基于MATLAB的WiDS数据马拉松2023天气预报
在今天的博客中,恩典Woolson让我们了解如何开始使用机器学习和MATLAB天气预报来接受WiDS数据马拉松2023的挑战。格蕾丝,交给你了。
简介
今天,我将展示一个如何使用MATLAB的例子WiDS数据马拉松2023.今年的挑战赛要求参赛者创建一个可以预测长期温度预报的模型,这可以帮助社区适应气候变化引起的极端天气事件。WiDS参与者将提交他们的预测Kaggle.本教程将通过以下步骤的模型制作过程:
MathWorks很高兴通过提供免费的MAT金宝appLAB许可证、教程、研讨会和其他资源来支持2023年数据科学女性数据马拉松的参与者。要为您和您的队友请求免费许可证,请转到此
MathWorks网站
,按“索取软件”键,填写索取软件表格。
要注册比赛并访问数据集,请转到Kaggle网页、登入或注册帐户,然后按“参加比赛”按钮。通过接受比赛规则,您将能够在“数据”选项卡上下载挑战数据集。
导入数据
首先,我们需要将训练数据带入MATLAB工作区。在本教程中,我将使用整个挑战数据集的一个子集,因此下面所示的文件将与您提供的文件不同。我将使用的数据集是:
- 训练数据(train.xlsx)
- 测试数据(test.xlsx)
数据是表格形式的,所以我们可以使用readtable函数导入数据。
trainingData = readtable(“train.xlsx”,“VariableNamingRule”,“保存”);
testingData =可读数据(“test.xlsx”,“VariableNamingRule”,“保存”);
由于表非常大,我们不想一次显示整个数据集,因为它会占用整个屏幕!让我们使用头函数显示表的前8行,这样我们就可以了解我们正在处理什么数据。
头(trainingData)
头(testingData)
现在我们可以看到所有列的名称(也称为变量),并了解它们的数据类型,这将使我们更容易使用这些表。注意,两个数据集具有相同的变量名。如果你查看所有的变量名,你会看到一个名为“tmp2m”的列-这是我们要训练模型来预测的列,也称为反应变量.
有一个训练和测试集是很重要的已知输出,这样您就可以看到您的模型在未见数据上的表现如何。在这种情况下,它会提前拆分,但您可能需要手动拆分训练集。例如,如果你在一个100,000行的表中有一个数据集,名为' train_data ',下面的示例代码将随机将这个表分成80%的训练数据和20%的测试数据。在分配训练和测试数据时,这些百分比是相对标准的,但在创建数据集时,您可能想尝试不同的值!
[trainInd, ~, testInd] = dividerand(100000, . 8,0, .2);
trainingData = train_data(trainInd,:);
testingData = train_data(testInd,:);
数据进行预处理
现在数据已经在工作空间中,我们需要采取一些步骤来清理和格式化它,以便它可以用于训练机器学习模型。我们可以用总结函数查看每个变量的数据类型和统计信息:
总结(trainingData)
这表明所有的变量都是双精度的,除了' start_time '变量,它是一个日期时间变量,并且与许多机器学习算法不兼容。让我们把它分解成三个独立的预测因子,在训练我们的算法时可能更有帮助:
trainingData。一天= trainingData.start_date.Day;
trainingData。月= trainingData.start_date.Month;
trainingData。一年= trainingData.start_date.Year;
trainingData。start_date= [];
我还将把“tmp2m”变量移到最后,这将更容易区分这是我们想要预测的变量。
trainingData = movevars(trainingData,“tmp2m”,“后”,“年”);
头(trainingData)
对测试数据重复这些步骤:
testingData。一天= testingData.start_date.Day;
testingData。月= testingData.start_date.Month;
testingData。一年= testingData.start_date.Year;
testingData。start_date= [];
testingData = movevars(testingData,“tmp2m”,“后”,“年”);
头(testingData)
现在,数据就可以使用了!
训练和评估一个模型
有很多不同的方法来解决今年的问题,所以尝试不同的模型是很重要的!在本教程中,我们将使用机器学习方法来解决天气预报问题,由于响应变量“tmp2m”是一个数字,我们将需要创建一个回归模型。让我们从打开回归学习者应用程序开始,这将允许我们快速建立几个不同模型的原型。
regressionLearner
当你第一次打开应用程序时,你需要点击左上角的“新建会话”按钮。将“数据集变量”设置为“trainingData”,它将自动选择正确的响应变量。这是因为它是表中的最后一个变量。然后,由于这是一个相当大的数据集,我将验证方案更改为“坚持验证”,并将坚持的百分比设置为15。我选择这些作为初始值,但是当您创建自己的模型时,您可能想要使用验证方案。
点击“Start Session”后,回归学习者应用程序界面将加载。
步骤1:开始一个新的会话
![openRegressionLearner.gif](http://www.tatmou.com/blogs/student-lounge/files/2023/01/WiDS-2023-Starter-Code_1.gif)
[点击“新会话”>“来自工作区”,设置“数据集变量”为“trainingData”,设置“验证方案”为“坚持验证”,设置“坚持百分比”为15,点击“开始会话”]
从这里,我将选择训练“所有快速训练”模型选项,这样我就可以看到这几个选项中哪个表现最好。执行此操作的步骤如下所示。注意:由于训练需要几秒钟,因此录音速度略有加快。
第二步:训练模型
![trainRegressionLearner.gif](http://www.tatmou.com/blogs/student-lounge/files/2023/01/WiDS-2023-Starter-Code_2.gif)
[单击工具条的MODELS部分中的“All Quick-To-Train”,删除“1.”在“模型”面板中的树模型,点击“训练全部”,等待所有模型训练完成
我选择了“全部快速到训练”选项,这样我就可以展示整个过程,但如果您有时间,您可能想尝试选择“全部”而不是“全部快速到训练”选项。这将为您提供更多的模型。
一旦这些训练完成,您将看到RMSE,或均方根误差值,显示在左侧。这是回归模型的常见误差度量,也将用于评估您的参赛作品。RMSE的计算公式如下:
这个值告诉您模型在验证数据上的表现如何。在这种情况下,Fine Tree模型表现最好!
![](http://www.tatmou.com/blogs/student-lounge/files/2023/01/WiDS-2023-Starter-Code_3.png)
回归学习者应用程序还允许您导入测试数据,以查看经过训练的模型在新数据上的表现如何。这将使您了解在对竞争测试集进行最终预测时,模型可能有多准确。让我们导入' testingData '表,看看这些模型是如何执行的。
步骤3:用测试数据评估模型
![testRegressionLearner.gif](http://www.tatmou.com/blogs/student-lounge/files/2023/01/WiDS-2023-Starter-Code_4.gif)
[点击“Test Data”下拉菜单,选择“From Workspace”。在打开的窗口中,将“Test Data set Variable”设置为“testingData”,然后单击“Import”。点击“全部测试”-将计算新的RMSE值]
这将花费几秒钟的时间来运行,但是一旦它完成,我们可以看到尽管Fine Tree模型在验证数据上表现最好,但线性回归模型在全新的数据上表现最好。
![](http://www.tatmou.com/blogs/student-lounge/files/2023/01/WiDS-2023-Starter-Code_5.png)
您还可以使用回归学习者应用程序的“PLOT AND INTERPRET”选项卡来创建显示模型在测试和验证集上的表现的视觉效果。例如,让我们看看线性回归模型的“预测与实际(测试)”图:
第四步:绘制结果
![testPlot.gif](http://www.tatmou.com/blogs/student-lounge/files/2023/01/WiDS-2023-Starter-Code_6.gif)
[点击工具条的绘图和解释部分的下拉菜单,然后选择“预测vs.实际(测试)”]
由于该模型表现相对较好,蓝点(表示预测)与直线(表示实际值)非常接近。我对这个模型的表现很满意,所以让我们把它导出到工作区,这样我们就可以对其他数据集进行预测了!
步骤5:导出模型
![exportModel.gif](http://www.tatmou.com/blogs/student-lounge/files/2023/01/WiDS-2023-Starter-Code_7.gif)
[在工具条的导出部分,单击“导出模型”>“导出模型”。在出现的窗口中,点击“确定”]
现在模型在MATLAB工作区中作为“trainedModel”,所以我可以在应用程序之外使用它。
![](http://www.tatmou.com/blogs/student-lounge/files/2023/01/WiDS-2023-Starter-Code_8.png)
要了解更多关于从回归学习者应用程序导出模型的信息,请查看这个文档页面!
保存和导出预测
一旦你有了一个满意的模型,就可以对新数据进行预测了。为了向您展示这个工作流是什么样子的,我将从我的测试数据集中删除“tmp2m”变量,因为竞争测试集没有这个变量。
testingData = removevars(testingData,“tmp2m”);
现在我们有了一个包含与训练集相同变量的数据集除了对于响应变量。要在此数据集上进行预测,请使用predictFcn:
tmp2m = trainedModel.predictFcn(testingData);
这将返回一个数组,每个测试集的行包含一个预测。为了准备提交这些预测,我们需要创建一个包含两列的表:一列包含索引号,一列包含该索引号的预测。由于我使用的数据集没有提供索引号,所以我将创建一个索引号数组,以显示结果表的样子。
索引=(1:长度(tmp2m)) ';
outputTable = table(index, tmp2m);
头(outputTable)
然后我们可以将结果导出到excel表格,供其他人阅读和使用!
writetable (outputTable“datathonSubmission.csv”);
要了解更多关于比赛的提交和评估,请参阅Kaggle页面.
实验!
在创建任何类型的AI模型时,测试不同的工作流以查看哪个工作流最适合您的数据集和挑战是很重要的!本教程只是一个介绍,但在预处理数据或创建模型时,您可以做出许多其他选择。没有一种算法适合所有问题,所以留出一些时间来测试不同的模型。以下是一些如何开始的建议:
- 尝试其他预处理技术,如规范化数据或创建新变量
- 在应用程序中使用可用的训练选项
- 更改用于训练模型的变量
- 试机器而且深度学习工作流程
- 更改训练、测试和验证数据的分解
如果你正在训练一个深度学习网络,你也可以利用实验管理器在不同条件下训练网络,并比较结果!
完成了!
感谢您参加我的教程!我们很高兴知道你将如何利用你所学到的知识来创建你自己的模型。我建议查看下面的“附加资源”部分,以获得关于如何改进模型的更多想法。我们正在举办一些免费的在线研讨会,讨论如何使用MATLAB来解决这样的问题。使用此链接注册您所在时区的研讨会
请随时联系我们studentcompetitions@mathworks.com如果你还有其他问题。
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。