学生休息室

分享技术和现实生活中的例子,学生如何在他们的日常项目中使用MATLAB和Simulink # studentsuccess金宝app

构建回归模型:一个教程wid Datathon 2022

介绍

你好!我是恩典Woolson,一个MathWorks应用支持工金宝app程师。我们兴奋地支持妇女2022年数据科学金宝appDatathon MATLAB许可证,通过提供免费教程,每个参与者和资源。
本教程将指导您完成的步骤解决回归问题的MATLAB对任何数据集,而使用一个示例数据集显示每一步的例子。即使在Datathon结束之后,你可以继续使用这个博客和任何有关参考资料以了解更多关于机器学习与MATLAB和回归。请注意,这篇文章是一个可执行的MATLAB脚本,所以你有机会在您的浏览器中运行本教程中的代码使用MATLAB在线或下载脚本和MATLAB安装在本地运行它。你可以找到这些选项底部的教程。
要求免费许可证为你和你的队友,去 MathWorks网站 ,单击“请求软件”按钮,填写软件申请表。
在wid Datathon 2022集中在减缓气候变化通过确定建筑物的能源消耗数据创建与气候变化合作AI (CCAI)和劳伦斯伯克利国家实验室(伯克利实验室)。由全世界wid团队,哈佛大学的大船,wid Datathon委员会Datathon将持续到2月26日,2022年。了解更多的wid Datathon,或登记参加今天。
Datathon任务是训练模型,预测建筑能源消耗基于区域差异在建筑节能,因为这可以帮助确定最佳改造的目标。自模型将预测建筑的能源消耗,这是一个定量的结果,这个问题可以得到解决,使用回归模型。
在开始本教程之前,请执行下面的代码在MATLAB如果你愿意跟随的例子。我将使用这将创建数据集。这个数据集包含的信息工具,我们将使用这个数据集来创建一个模型,预测车辆开的多少英里每加仑的汽油(MPG)。
执行的代码在这个例子中,你可以单独的代码片段复制/粘贴到命令窗口按“输入”键,或如果您正在使用这个示例中提供的生活脚本然后点击运行部分从将来发布将执行的所有代码在当前部分。
负载carbig
台=表(加速、cyl4、汽缸、排量、马力、生产厂,模型,Model_Year,英里/加仑,组织,起源,重量,
“VariableNames”,{“加速”,“Cyl4”,“气缸”,“位移”,“马力”,“使”,“模型”,“年”,“英里”,“RegionOfOrigin”,“CountryOfOrigin”,“重量”});
writetable(资源描述,“carData.csv”);
清晰;
clc;
在执行这个之后,你应该有一个名为“carData的文件。csv”在您的当前目录。现在,你已经准备好开始构建自己的回归模型通过机器学习的步骤工作流程。

并探索数据的访问

现实世界的数据往往跟现实世界的挑战。数据可以存储在各种不同的文件类型,可能存储在多个文件,可以混乱和困惑。在这一节中,我将讨论一些基本步骤加载和清理MATLAB数据集。

步骤1:导入数据

为了开始使用数据,您必须首先把它到工作区中。如果你的数据存储在多个文件中,您可能希望使用一个数据存储,因为它提供了一个方便的方式来访问这些文件。它存储文件的信息在一个给定的位置和其内容的格式,只有进口文件当你需要他们。了解更多关于数据存储,请参考文档页面
在这个例子中,我们所有的数据存储在一个. csv文件,所以我将导入数据表。表可以与不同的数据类型和存储数据允许使用标题标签中的数据列,也称为变量,所以他们很好地用于存储在工作区中大型或复杂的数据集。从文件导入表,可以使用导入工具或“readtable”命令。

选项1:使用Import工具

导入工具允许用户预览和导入数据交互,而不需要编写任何代码。打开导入工具,MATLAB的顶部导航到将来发布窗口,单击选项卡,找到“变量”部分,并点击进口 数据。这将打开一个窗口,提示您选择您希望导入的文件;在您选择一个文件,它将打开导入工具。
从这里,你可以看到数据文件中,每个变量名和每个变量的数据类型。另外,可以设置导入选项和声明如何治疗细胞不能进口。我将使用默认设置,然后单击进口的选择完成导入数据。
ImportTool.gif
导入工具也可以通过执行以下命令在命令窗口:
uiimport (“carData.csv”);

选项2:使用命令

使用“readtable”命令导入数据意味着你不会得到一个预览的数据导入之前,但它可能会更有帮助如果你想自定义导入选项超出导入工具提供了。例如,该命令可能是首选,如果数据有多个指标说一个值是失踪。
在我们的示例中,“carData。csv”总是使用NaN值时失踪,自动解释的MATLAB作为缺失值。但是,比方说,我们正在与一个叫做“messyData数据集。csv”使用NaN,“-”、“NA”, -99年,和”。表明当有缺失的数据。在这种情况下,您可以使用“TreatAsMissing”名称参数可用“readtable”将所有这些南:
importedData = readtable (messyData。csv, TreatAsMissing, {“-”,“NA”,“-99”,“。”});
了解更多关于选择使用“readtable”导入数据时,请访问文档的网站

预处理的数据

现在你有工作空间中的数据,是时候准备机器学习。很重要的是,在正确的格式和数据值是你期望他们做什么,这可以防止错误消息和可怜的稍后在工作流模型的性能。

步骤2:干净的数据

正如我上面提到的,数据是混乱的。数据可能会丢失的条目,或他们可能有成千上万的行观察,他们可以利用各种各样的数据类型,测量可能没有被在完美的条件下,和收集的数据可能不是同样的代表所有可能的输入。创建一个模型之前,重要的是清理数据,以便准确地反映问题,可以很容易地使用它作为输入来训练模型。
有许多不同的方法可以处理缺失值和不一致的数据。在这篇文章中我将通过一些基本步骤,但你也可以参考文档页面要学习更多的知识。
首先,我使用“总结”函数来了解更多关于数据类型和基本统计信息对每个变量的数据。
总结(carData)

变量:

加速度:406×1双

价值观:

8分钟
中位数15.5
马克斯24.8

Cyl4:406×1分类

价值观:

4个207
其他199

气缸:406×1双

价值观:

3分钟
值4
马克斯8

位移:406×1双

价值观:

68分钟
值151
Max 455

马力:406×1双

价值观:

46分钟
值95
Max 230
NumMissing 6

使:406×1分类

价值观:

amc 29
奥迪7
宝马2
别克17
卡迪拉克2
雪佛兰48
克莱斯勒6
雪铁龙1
日产23
道奇28
菲亚特8
福特54
本田13
ih 1
马自达12
梅赛德斯-奔驰(mercedes - benz) 3
水星11
日产1
奥兹莫比尔10
欧宝4
标致8
普利茅斯32
庞蒂亚克16
雷诺5
萨博5
斯巴鲁4
丰田26
胜利1
大众汽车(volkswagen) 23
沃尔沃6

模型:406×1的字符串

一年:406×1双

价值观:

70分钟
值76
Max 82

英里/加仑:406×1双

价值观:

9分钟
平均23
马克斯46.6
NumMissing 8

RegionOfOrigin:406×1分类

价值观:

欧洲73
日本79年
美国254年

CountryOfOrigin:406×1分类

价值观:

英格兰1
法国14
德国39
意大利8
日本79年
瑞典11
美国254年

重量:406×1双

价值观:

1613分钟
中位数2822.5
Max 5140

一旦你学会了更多关于数据,你可以开始想清理的方法。你想把字符数组转换成数值数组,或者你想完全忽略字符数组?你打算怎样处理缺失值的?分类数组呢?如果一个变量的最小或最大价值似乎比它应该更低或更高?根据数据处理,这些问题的答案可能是不同的。下面是我考虑的话题当清理“carData”在使用它来创建一个模型。

删除字符串和分类变量

一些算法,可以用来训练回归模型只允许数字值,所以我删除任何非数字和分类变量。
carData = removevars (carData, {“Cyl4”,“使”,“模型”,“RegionOfOrigin”,
“CountryOfOrigin”})
carData =406×7表
加速度 气缸 位移 马力 一年 英里/加仑 重量
1 12 8 307年 130年 70年 18 3504年
2 11.5000 8 350年 165年 70年 15 3693年
3 11 8 318年 150年 70年 18 3436年
4 12 8 304年 150年 70年 16 3433年
5 10.5000 8 302年 140年 70年 17 3449年
6 10 8 429年 198年 70年 15 4341年
7 9 8 454年 220年 70年 14 4354年
8 8.5000 8 440年 215年 70年 14 4312年
9 10 8 455年 225年 70年 14 4425年
10 8.5000 8 390年 190年 70年 15 3850年
11 17.5000 4 133年 115年 70年 3090年
12 11.5000 8 350年 165年 70年 4142年
13 11 8 351年 153年 70年 4034年
14 10.5000 8 383年 175年 70年 4166年

处理缺失数据

缺失的数据时,有三件事你应该问你自己。
  1. 什么值是用来表明一块数据丢失?
  2. 有好办法填写缺失的数据,或者我应该把它失踪?
  3. 在什么情况下我应该删除一个观察与缺失的数据吗?
什么值是用来表明一块数据丢失?
如果你有多个数据缺失值指标和你没有导入数据与前面提到的“TreatAsMissing”选项,你可以在这一步处理这些缺失值指标。“standardizeMissing”功能允许用户轻松地定制缺失值指标转换为标准的缺失值在MATLAB。数值和时间,这个标准价值是南;对于datetime值,它是NaT。
“carData”只使用NaN代表一个缺失值,所以我们不需要修改任何在这一步。但是,比方说,我们正在与messyData。csv”了,但这一次,它已经作为一个表导入变量的messyData”。提醒一下,这个数据集使用南人,“-”,“NA”, -99年,”。表明当有缺失的数据。快速标准化这些缺失值指标,我们可以使用“standardizeMissing”命令如下:
standardizedData = standardizeMissing (messyData {“-”,“NA”, -99年,'。'});
有好办法填写缺失的数据,或者我应该把它失踪?
一些数据,可能会有一个很好的方法近似的价值缺失的条目,如果你没有大量的数据,它可能是重要的来填补这些缺口。
一种方法是计算简单的统计数据,如均值、中位数,或模式中,一个给定的变量和替换所有缺失的值与结果变量。这种方法非常有效,如果值是相似的。如果变量是线性地增加或减少,那么另一种方式来填补缺失的条目可以近似的价值基于邻近值。
在MATLAB中,最简单的方法来填补缺失的条目是使用“fillmissing”功能。它允许您轻松地近似和填充缺失值,指示你如何想要的值。继续从上一节的例子中,假设“standardizedData”有一个变量叫做“年龄”,似乎是增加以线性方式,但是它缺少一些值。这些值可以很容易地由执行下面的命令:
standardizedData。= fillmissing (standardizedData时代。年龄,“线性”);
填写缺失的值虽然有一定好处,这样做可以得到模型的复杂,可能会导致糟糕的性能,如果近似并不代表实际的数据。由于我们的数据集只有几个缺失值,我将离开这些南。
在什么情况下我应该删除一个观察与缺失的数据吗?
这个问题的答案取决于很多事情:多少数据你有工作吗?有许多缺失值?变量所最缺少的数据?如果你有很多的数据可用,它可能意义与缺失的数据删除任何观测。如果数据丢失很多条目,也许你选择只有删除观察15个或多个缺失值。
我们可以决定要做什么之前,我们需要知道什么是失踪。让我们看看观察“carData”缺失任何条目:
%得到指标的所有缺失值
missingIdx = ismissing (carData);
%得到指数任何含有缺失值的行
rowIdxWithMissing = (missingIdx, 2);
%用缺失值返回行
rowsWithMissing = carData (rowIdxWithMissing:)
rowsWithMissing =14×7表
加速度 气缸 位移 马力 一年 英里/加仑 重量
1 17.5000 4 133年 115年 70年 3090年
2 11.5000 8 350年 165年 70年 4142年
3 11 8 351年 153年 70年 4034年
4 10.5000 8 383年 175年 70年 4166年
5 11 8 360年 175年 70年 3850年
6 8 8 302年 140年 70年 3353年
7 19 4 98年 71年 25 2046年
8 20. 4 97年 48 71年 1978年
9 17 6 200年 74年 21 2875年
10 17.3000 4 85年 80年 40.9000 1835年
11 14.3000 4 140年 80年 23.6000 2905年
12 15.8000 4 One hundred. 81年 34.5000 2320年
13 15.4000 4 121年 110年 81年 2800年
14 20.5000 4 151年 82年 23 3035年
正如你所看到的,“carData”没有很多缺失的数据,但是我们没有大量的观测工作。一些“英里”缺失值的变量,这是我们想让我们的模型预测的价值。由于我们不能训练模型没有预测变量,我删除所有观察缺失“英里”值,但离开其他缺失值。
carData = rmmissing (carData,“DataVariables”,“英里”)
carData =398×7表
加速度 气缸 位移 马力 一年 英里/加仑 重量
1 12 8 307年 130年 70年 18 3504年
2 11.5000 8 350年 165年 70年 15 3693年
3 11 8 318年 150年 70年 18 3436年
4 12 8 304年 150年 70年 16 3433年
5 10.5000 8 302年 140年 70年 17 3449年
6 10 8 429年 198年 70年 15 4341年
7 9 8 454年 220年 70年 14 4354年
8 8.5000 8 440年 215年 70年 14 4312年
9 10 8 455年 225年 70年 14 4425年
10 8.5000 8 390年 190年 70年 15 3850年
11 10 8 383年 170年 70年 15 3563年
12 8 8 340年 160年 70年 14 3609年
13 9.5000 8 400年 150年 70年 15 3761年
14 10 8 455年 225年 70年 14 3086年

确定的数据

在这一点上,“carData”应该还剩7个变量:“加速”、“缸”,“位移”、“马力”、“年”、“英里”,和“重量”。自“英里”是我们的预测变量,我将这是表中的最后一列。
carData = movevars (carData,“英里”,“后”,“重量”)
carData =398×7表
加速度 气缸 位移 马力 一年 重量 英里/加仑
1 12 8 307年 130年 70年 3504年 18
2 11.5000 8 350年 165年 70年 3693年 15
3 11 8 318年 150年 70年 3436年 18
4 12 8 304年 150年 70年 3433年 16
5 10.5000 8 302年 140年 70年 3449年 17
6 10 8 429年 198年 70年 4341年 15
7 9 8 454年 220年 70年 4354年 14
8 8.5000 8 440年 215年 70年 4312年 14
9 10 8 455年 225年 70年 4425年 14
10 8.5000 8 390年 190年 70年 3850年 15
11 10 8 383年 170年 70年 3563年 15
12 8 8 340年 160年 70年 3609年 14
13 9.5000 8 400年 150年 70年 3761年 15
14 10 8 455年 225年 70年 3086年 14
这是因为MATLAB的许多机器学习工具假设输入表的最后变量预测,所以通过移动现在对我们来说更容易在未来处理数据。

步骤3:创建训练和测试数据

无论什么格式数据,重要的是要有独立的训练和测试数据。训练数据输入到模型,如何“教”模型预测输出值;测试数据发送到模型已经训练后,看看它如何执行新的数据。通常,它也有利于验证数据,使用在训练,防止过度拟合。
过度拟合是当模型学习训练数据,它能够预测的输出与高水平的训练数据的准确性,但预测输出任何数据时表现不佳。这可能是由于很多东西,包括在训练数据缺乏多样性。如果我们训练我们的汽车模型只有4缸车从90年初的,例如,模型可能会学习如何预测英里每加仑的汽车很好,但是不能这样做,因为其他类型的车辆。验证数据可能被排除在训练数据,用于间歇地测试模型的整体性能,因为这提供了一个概念模型的整体精度。

独立的数据集

MATLAB的许多工具使用的训练数据进行验证,所以我只会创建一个训练集和测试集。在创建这些不同的数据集时,重要的是要确保两组包含各种各样的数据,避免偏差和过度拟合。如果您的数据代表建筑,确保它有数据为不同类型的建筑。如果它代表病人,包括不同年龄,种族,和以前的病史。如果是图片,包括不同的角度和灯光。在这种情况下,“carData”是按一年,如果我只是把数据分成两半,这两组数据会丢失任何汽车数年。相反,我单独的时间间隔的数据。
%每三观察是用于测试
testIdx = 1:3:398;
testData = carData (testIdx:)
testData =133×7表
加速度 气缸 位移 马力 一年 重量 英里/加仑
1 12 8 307年 130年 70年 3504年 18
2 12 8 304年 150年 70年 3433年 16
3 9 8 454年 220年 70年 4354年 14
4 8.5000 8 390年 190年 70年 3850年 15
5 9.5000 8 400年 150年 70年 3761年 15
6 15.5000 6 198年 95年 70年 2833年 22
7 14.5000 4 97年 88年 70年 2130年 27
8 14.5000 4 107年 90年 70年 2430年 24
9 15 6 199年 90年 70年 2648年 21
10 13.5000 8 318年 210年 70年 4382年 11
11 15.5000 4 140年 90年 71年 2264年 28
12 13 6 232年 One hundred. 71年 2634年 19
13 15.5000 6 250年 88年 71年 3302年 19
14 11.5000 8 400年 175年 71年 4464年 14
%,其余用于培训。从trainData删除测试数据
trainData = carData;
trainData (testIdx:) = []
trainData =265×7表
加速度 气缸 位移 马力 一年 重量 英里/加仑
1 11.5000 8 350年 165年 70年 3693年 15
2 11 8 318年 150年 70年 3436年 18
3 10.5000 8 302年 140年 70年 3449年 17
4 10 8 429年 198年 70年 4341年 15
5 8.5000 8 440年 215年 70年 4312年 14
6 10 8 455年 225年 70年 4425年 14
7 10 8 383年 170年 70年 3563年 15
8 8 8 340年 160年 70年 3609年 14
9 10 8 455年 225年 70年 3086年 14
10 15 4 113年 95年 70年 2372年 24
11 15.5000 6 199年 97年 70年 2774年 18
12 16 6 200年 85年 70年 2587年 21
13 20.5000 4 97年 46 70年 1835年 26
14 17.5000 4 110年 87年 70年 2672年 25
它是由你来决定你将如何分裂之间的数据训练和测试。一个共同的起点使用大约80%的数据进行训练和测试为20%。在这个示例中,由于我们只有398的观察,我把它这样66%的数据集用于培训和33%是用于测试。

单独的测试数据的预测变量

一旦我有一个测试集,我从表中删除预测变量“英里”并将其存储在其自己的变量。这将使它更容易评估模型的性能。
testAnswers = testData.MPG;
testData = removevars (testData,“英里”)
testData =133×6表
加速度 气缸 位移 马力 一年 重量
1 12 8 307年 130年 70年 3504年
2 12 8 304年 150年 70年 3433年
3 9 8 454年 220年 70年 4354年
4 8.5000 8 390年 190年 70年 3850年
5 9.5000 8 400年 150年 70年 3761年
6 15.5000 6 198年 95年 70年 2833年
7 14.5000 4 97年 88年 70年 2130年
8 14.5000 4 107年 90年 70年 2430年
9 15 6 199年 90年 70年 2648年
10 13.5000 8 318年 210年 70年 4382年
11 15.5000 4 140年 90年 71年 2264年
12 13 6 232年 One hundred. 71年 2634年
13 15.5000 6 250年 88年 71年 3302年
14 11.5000 8 400年 175年 71年 4464年
如果你使用的数据已经分为训练集和测试集,那么这一步应该相对简单。确保你有进口和清理这两组数据,然后删除从测试集预测变量并将其保存在一个不同的变量。

火车模型

现在数据已经准备好了,是时候开始培训一个模型!我将展示如何使用回归学习者应用创建一个模型,但我还将包括本节的例子,展示编程工作流来创建一个模型,如果你想了解更多关于这些选项。此外,如果你想看的视频概述回归学习者应用,你可以找到一个不同的数据集在这里!

步骤4:使用回归学习者应用训练模型

回归学习者应用可以交互式地训练,验证和优化不同的回归模型。这里就是我如何创建一个模型,预测车辆的英里每加仑基于我们的数据:
1。打开应用程序:在“应用程序”选项卡上,在“机器学习和深度学习”部分中,点击回归的学习者
另外,您也可以从命令行打开回归学习者应用:
regressionLearner
2。开始一个新的会话:点击新会话从工作区并选择你的训练数据。指定响应变量。
3所示。选择一个验证方法:选择您想要使用的验证方法,以避免过度拟合。您应当会看到三个选择:交叉验证,抵抗验证和Resubstitution验证。我选择交叉验证对于这个示例,但对于问题有大量数据与您可能希望选择抵抗验证。你可以参考这个文档页面了解更多关于这些验证方法。
4所示。点击开始会议
OpenRegressionApp.gif
5。调查Variable-Response关系:使用响应阴谋调查哪些变量是有用的预测响应。可视化不同的预测变量和响应变量之间的关系(MPG),在“X”列表中选择不同的变量下的“轴”。观察哪些变量与响应最明显的相关性。位移、马力和体重都有明显影响的响应,所有显示负与响应。
6。选择模型(s):在“回归学习者”选项卡,在“模型类型”部分,选择算法来训练。我选择火车所有,所以我可以看到模型类型执行最好的数据。
7所示。 调优参数:回归学习者应用程序允许用户在培训时指定某些参数模型。选项在“特性”部分允许您选择哪些变量是用来训练模型或使主成分分析(PCA)。通过选择一个模型参数可以进一步调整的窗口,然后单击“模型”先进的在“回归学习者”选项卡。学习更多关于每个模型类型的高级选项,请参考文档页面
由于我们创建我们的第一个模型,我将离开这个参数的默认值。
8。点击火车
TrainModels.gif
9。研究模型的性能:一旦模型已经完成了训练和验证,左边的“模型”窗口显示模型及其训练均方根误差(RMSE)。注意模型1.18 RMSE最低,并突出显示的值来表示。请注意:你所看到的数字可能会有所不同。
除了rsm,你可以测量培训的结果通过创造视觉效果的“阴谋”部分“回归学习者”选项卡。“检验结果”部分的下拉菜单允许您情节之间的关系预测的MPG验证数据和验证数据的实际“英里”对于任何训练模型。简单点击你想要的模型来评估,然后单击图的类型你想看!
EvaluateInApp.gif
了解更多关于评估模型在应用程序,请参阅文档页面
10。选择一个模型:对于这个例子,我将使用模型1.18我们训练在前一步。

第五步:出口您的模型

一旦你已经测试了不同的设置,发现一个表现良好的模型,导出模型选择工作区出口模式从回归学习者应用。这将允许您在测试集进行预测。我使用默认名称“trainedModel”出口。
ExportModel.gif
可以看到下面,导出的模型实际上是一个包含模型对象的结构以及一些额外的信息模型,或元数据。自模型我有出口是一个高斯过程模型,模型对象存储在“RegressionGP”“trainedModel”的属性。如果你有导出一种不同类型的模型中,该属性将被称为不同的东西。你可以学习房地产的名称包含您的模型对象通过执行以下命令,识别属性取代“RegressionGP”为您的模型。
trainedModel
trainedModel =结构体字段:
predictFcn: @ (x) exportableModel.predictFcn (predictorExtractionFcn (x))
RequiredVariables:{“加速度”“气缸”“位移”“马力”“重量”“年”}
RegressionGP (1×1 RegressionGP):
:“这结构是一个训练有素的模型从回归学习者R2021b出口。”
HowToPredict:“对一个新表作出预测,T,用途:↵yfit = c.predictFcn (T)↵取代“c”与这个结构体变量的名称,例如“trainedModel”。↵↵桌上,T,必须包含返回的变量:↵c。RequiredVariables↵变量格式(例如矩阵或向量、数据类型)必须匹配最初的训练数据。↵额外变量将被忽略。↵↵的更多信息,请参阅如何使用一个导出的模型预测。
所以,如果我需要访问的模型对象没有任何元数据,我可以执行以下:
trainedModel.RegressionGP
ans =
RegressionGP
PredictorNames:{“加速度”“气缸”“位移”“马力”“年”“重量”}
ResponseName:‘Y’
CategoricalPredictors: []
ResponseTransform:‘没有’
NumObservations: 263
KernelFunction:“指数”
KernelInformation(1×1结构):
BasisFunction:“常数”
贝塔:27.6840
σ:1.8047
PredictorLocation(6×1双):
PredictorScale(6×1双):
α(263×1双):
ActiveSetVectors(263×6双):
PredictMethod:“准确”
ActiveSetSize: 263
FitMethod:“准确”
ActiveSetMethod:“随机”
IsActiveSetVector(263×1逻辑):
LogLikelihood: -651.3821
ActiveSetHistory: []
BCDInformation:[]属性,方法

示例:使用自定义算法

如果你有一些经验与回归学习,那么您可能希望也为开发一个回归模型探讨编程选项。下面我有一些示例工作流可能帮助您入门。这些工作流可以代替或除了使用回归学习者应用。
另外,如果你在回归学习者应用程序创建一个模型,您可以选择导出的代码生成模型通过点击生成函数在“出口”部分。这是一个很好的方式来学习编程的工作流,你已经训练使用应用程序创建了一个模型。

评估你的模型

一旦你有了一个模型在工作区中,你应该评估它对测试数据如何在数据模型执行,它并没有见过。有很多方法来评估模型的性能,并在本节中,我将展示如何收集一些数字和视觉测量模型的性能。如果你有兴趣学习更多关于其他功能可以帮助评估模型的性能,请参考相关的“诊断”在这个部分文档页面

第六步:收集统计测量

以下代码返回预测反应的新的测试数据:
predictedMPG = trainedModel.predictFcn (testData)
predictedMPG = 133×1
16.1532
15.9422
14.0824
14.4715
15.0962
18.9757
26.4770
24.1558
20.2586
11.0891
如果你以编程方式创建您的模型,那么您将需要使用下面的语法:
predictedMPG =预测(trainedModel testData);
使用这些预测,我们可以看一下模型的性能从一些不同的角度。首先,它将有助于计算错误的区别,或者实际MPG的价值和预测“英里”价值,为每一个测试集的观察:
testErrors = testAnswers - predictedMPG
testErrors = 133×1
1.8468
0.0578
-0.0824
0.5285
-0.0962
3.0243
0.5230
-0.1558
0.7414
-0.0891
在许多情况下,误差值的数组将太大阅读每一个条目,即使我们做了,很难得出任何有意义的结论。一个简单的测量误差可能确定平均误差值:
testAvgError = (abs (testErrors)。/长度(testAnswers)
testAvgError = 2.1237
不幸的是,这并没有告诉我们任何关于错误的分布,这并不代表我们的模型的性能。计算损失或损失的功能均方误差一个模型的方程的结果如下:
myLoss = (testErrors。* testErrors)。/长度(testErrors)
均方误差更具代表性的性能比平均误差模型。这是因为如果所有的错误相对较低,损失也会低,但是,即使只有少数的预测有一个很大的错误,那么当这些错误值的平方,他们将成为一个更大的数字。损失因此增加更代表这几个与高度的预测错误,这不是计算平均误差考虑的东西。
“损失”功能只需要模型对象,不是其他元数据存储在“trainedModel”变量,所以我们必须提取模型对象之前计算损失。
trainedModel.RegressionGP;
(trainedModel testLoss =损失。RegressionGP,testData, testAnswers)
testLoss = 10.1686
现在你可以比较这个值计算训练数据损失。它执行相同的,更好,还是更糟?
(trainedModel trainLoss =损失。RegressionGP,trainData, trainData.MPG)
trainLoss = 1.6916
在这种情况下,损失的测试集是10.1686,但只有1.6916的训练集!这是一种指示,表明模型过度拟合。这可能意味着有数据在测试集,并不代表在训练集,因此,模型没有培训如何处理这些输入。改变训练集和测试集和改变的比率可能有助于提高模型的性能。

第七步:创建视觉测量

除了计算这些统计数据,通常有利于创造视觉效果反映模型的性能。下面的代码块实线代表的实际MPG的测试数据,然后添加一个表示预测值的散点图对应于每个实际价值。越远的点是实线,预测的不准确。
情节(testAnswers testAnswers);
持有
情节(testAnswers predictedMPG,“。”);
持有
包含(实际的英里每加仑的);
ylabel (预测英里每加仑的);
虽然很多点是非常接近的,有一些偏离它非常严重,尤其是在实际的“英里”值增加。这可能表明,训练数据没有多少“英里”是超过30的观察,所以我们可能需要考虑的训练集和测试集。也有可能这表明一个整体缺乏观察“英里”是超过30“carData.csv”。
有很多方法探讨训练和测试数据超出你能学到“总结”的功能。举个例子,如果你想要调查有多少条目超过30在训练集:
trainAbove30 =元素个数(trainData.MPG (trainData。英里/加仑> 30))
trainAbove30 = 54
事实证明,只有54项,大约20%的训练集,超过30。MPG的carData的最小值最多9和46.6,从而导致一系列的37.6,和值高于30必须30至46.6,从而导致一系列的16.6。如果数据均匀分布在整个测试集,我们预期值超过30约占16.6/37.6或44%的测试集。
想象你的模型的性能的另一种方法是绘制错误(也称为剩余在这种情况下直接)。要做到这一点,你在0画一条水平线,然后预测残差的散点图相对于实际的“英里”。一个好的模型通常有残差分布大致对称约0。残差的明确模式表明你可以改善你的模型。
情节(testAnswers testErrors,“。”)
持有
yline (0)
持有
包含(“实际英里每加仑(MPG)”)
ylabel (“MPG残差”)
积极意味着预计残值太低了,和一个负意味着预计残值太高了。在这张图,很容易看到,即使错误可能是更大的预测更高的“英里”价值观,也有一些预测低MPG的价值观与残留低于- 5,表示高度的误差。即使两个图表帮助可视化错误,他们提供不同的视角和策划都可能允许您识别不同模式。
更多地了解最大的观察残留,可以基于剩余指数为测试组。以下代码返回一个表与所有观测的剩余大于五或小于- 5:
testData (testErrors > 5 | testErrors < 5:)
ans =13×6表
加速度 气缸 位移 马力 一年 重量
1 18 4 72年 69年 71年 1613年
2 13.5000 3 70年 90年 73年 2124年
3 17 6 200年 74年 2875年
4 19.4000 4 78年 52 78年 1985年
5 14.8000 4 134年 95年 78年 2515年
6 19.2000 4 85年 65年 79年 2020年
7 14.7000 4 98年 76年 80年 2144年
8 19.9000 5 121年 67年 80年 2950年
9 17.3000 4 85年 80年 1835年
10 11.4000 6 168年 132年 80年 2910年
11 15.8000 4 One hundred. 81年 2320年
12 19.6000 6 145年 76年 81年 3160年
13 17 6 262年 85年 82年 3015年
有一些元素或模式,从这个表可以发现,可能导致对这些观测模型的表现不佳。一些看法是失踪的“马力”值,其中四个“年”的80年,两个奇数有“气缸”值在“carData”,这是罕见的一些有一个非常低的价值“位移”和“马力”,和第一次观察到的重量小于最小值出现在训练数据的“重量”。这不是明显的一些观察困惑为什么模型,但如果你从模式,然后你可以找到其他人可能随着时间的推移变得更加明显随着您调整模型。
当你已经确定模式,这些模式可以创建额外的情节来确认!例如,我刚刚注意到,许多的观察我们的表有一个适度的低价值的位移变量,所以我决定情节残差和其相应的位移:
情节(testData。位移,testErrors,“。”);
持有
yline (0)
持有
包含(“位移”);
ylabel (“MPG残差”);
这里我们可以证实,观察“位移”在200往往是预测精度比那些较少“位移”,这将促使我们重新审视我们的训练数据和参数,并相应地调整。

清洗和重复

没有一个适合所有问题的算法。你应该创建和测试许多不同的模型,因为有很多优化模型的方法,甚至两个模型有相似的RMSE可能对数据的不同部分表现得更好。当使用回归学习者应用,不仅与最初执行最好的模型,但试着改变参数对一群。改变训练数据,验证方法,高级选项,该模型类型,和其他你想出!即使改变不会导致更好的性能,你可以学到一些东西。
对于每个模型创建,试着问自己这些问题:
  • 执行比我其他的模型吗?
  • 这个和我的其他模型之间的区别是什么?相似之处是什么?
  • 的观察上的表现不佳吗?为什么?
如果你有出口到工作空间模型和您希望保存供以后使用或比较,你可能想要给它一个描述性的名称并将其保存到一个.MAT文件。保存模型我在这个例子中,我执行以下:
gaussianOne = trainedModel;
保存gaussianOne;
这样如果你清楚工作区或意外覆盖“trainedModel”变量,你还有保存模型。当你想使用它,您可以很容易地加载它回到工作区:
负载gaussianOne;

保存预测

你可能想要保存您的预测由于各种原因。也许你想比较你的结果与一个同伴,也许你想要与人分享不使用MATLAB,或者你需要提交datathon预测。不管什么原因,储蓄和出口你的结果可以通过几个简单的步骤。
首先,由于“carData”没有附带任何id和我只想保存预测,没有任何数据,我将添加一个“赛车”列的测试数据集:
%创建数组的IDs,变成列数组使用的操作符。
carID =(1:长度(predictedMPG)) ';
%的新变量添加到表开始
testData = addvars (testData carID,“之前”,“加速”)
testData =133×7表
carID 加速度 气缸 位移 马力 一年 重量
1 1 12 8 307年 130年 70年 3504年
2 2 12 8 304年 150年 70年 3433年
3 3 9 8 454年 220年 70年 4354年
4 4 8.5000 8 390年 190年 70年 3850年
5 5 9.5000 8 400年 150年 70年 3761年
6 6 15.5000 6 198年 95年 70年 2833年
7 7 14.5000 4 97年 88年 70年 2130年
8 8 14.5000 4 107年 90年 70年 2430年
9 9 15 6 199年 90年 70年 2648年
10 10 13.5000 8 318年 210年 70年 4382年
11 11 15.5000 4 140年 90年 71年 2264年
12 12 13 6 232年 One hundred. 71年 2634年
13 13 15.5000 6 250年 88年 71年 3302年
14 14 11.5000 8 400年 175年 71年 4464年
现在您可以将测试结果表中只包含ID数字和预测“英里”值,这使得它很容易想象,与其他预测相比,写入所需的文件格式。
检测结果=表(testData.carID predictedMPG,“VariableNames”,{“赛车”,
“predicted_mpg”})
检测结果=133×2表
用时 predicted_mpg
1 1 16.1532
2 2 15.9422
3 3 14.0824
4 4 14.4715
5 5 15.0962
6 6 18.9757
7 7 26.4770
8 8 24.1558
9 9 20.2586
10 10 11.0891
11 11 23.4604
12 12 20.0603
13 13 17.8341
14 14 13.1419
然后将结果写入一个CSV文件。这是你提交的文件类型的wid Datathon挑战。
writetable(检测结果,“testResults.csv”);

全部完成!

谢谢你加入我在本教程!我们兴奋地找出你将学会了建立回归模型,导致气候变化的研究。我强烈推荐看下面的额外资源的部分更多的想法如何提高您的模型。
随时与我们联系studentcompetitions@mathworks.com如果你有任何进一步的问题。

进一步的例子

如果你有兴趣学习更多关于回归学习和其他数据在MATLAB科学工作流,请参考下面的例子:
  • 数据科学教程视频系列将带你通过更深入的走进回归学习过程的数据存储在多个文件。这是一个很好的例子,如果你有时间!你可以找到“相关资源”一节中的代码的每个视频如果你想跟随。
  • 机器学习斜坡弯道让你通过一些分类的例子和MATLAB教机器学习的基本知识。
  • 我们的深度学习斜坡弯道走你通过介绍学习方法用于创建网络recongition MATLAB的图像。
  • 如果你感兴趣的一个更高级的回归的例子,这个使用深度学习时间序列预测页面显示用户如何使用神经网络来预测未来的水痘病例数。

额外的资源

  1. 监督学习的概述(视频)
  2. 在MATLAB缺失的数据
  3. 监督学习工作流程和算法
  4. 火车在回归学习者应用回归模型
  5. 出口回归模型预测新数据
  6. 8 MATLAB数据科学的备忘单
  7. MATLAB的基本介绍:MATLAB斜坡弯道
  8. MATLAB在线

词汇表

观察:中的一行数据。
变量:一个列在一个数据集。
错误/剩余:一个实际的区别/期望值和机器学习模型预测的价值。错误可能是绝对值,而残余必须代表的距离错误的方向。
均方误差/损失:平方值反映了模型的性能预测的错误然后计算这些值的平均值。由以下方程表示。
myLoss = (testErrors。* testErrors)。/长度(testErrors)
元数据:附加信息与对象相关联;一组数据,提供其他数据信息。

|

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。