学生休息室

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

WIDS Datathon 2021的MATLAB基准代码

介绍

大家好,我是Neha Goel, MathWorks学生竞赛团队AI/数据科学竞赛的技术主管。MathWorks很高兴支持WiDS Datat金宝apphon 2021,为每个参与者提供免费的MATLAB许可证、教程和入门资源。

要申请免费许可证,请访问MathWorks网站,点击“软件申请”按钮,填写软件申请表。您将在72个工作时间内获得许可证。

WIDS Datave 2021专注于通过麻省理工学院的Gossis(全球开源严重性的疾病评分)倡议的数据来重点患者健康。由全球Wids团队带给您西部大数据创新中心和Wids Datathon委员会,截至2021年3月1日至3月1日。了解更多有关的信息WiDS Datathon报名参加今天

Datathon的任务是训练一个模型,该模型将患者记录数据作为输入,并输出患者被诊断为某种类型糖尿病的可能性预测,从而通知ICU的治疗。在这篇博文中,我将介绍MATLAB中的基本初学者代码工作流。其他培训方法的附加资源链接在博客文章的底部。

加载和准备数据

此数据集提供了一个了解真实数据问题带来的数据建模和处理挑战的机会。在这个博客中,我将讨论一些处理数据挑战的基本方法。要了解更多的方法,您可以通过以下步骤数据科学教程视频系列

第1步:加载数据

注册参加比赛并从Kaggle下载数据文件。”trainingWids2021.csv.是培训数据文件未标记的WIDS2021.csv“是测试数据。
下载文件后,确保文件位于MATLAB路径中可读函数读取文件并将其存储为表。治疗空虚用于将空值处理为文件中的数字列的占位符文本。与字符对应的表元素“不”将设置为“楠”导入时。您还可以使用MATLAB导入数据导入工具

小火车= readtable(“TrainingWiDS2021.csv”、“TreatAsEmpty”、“NA”);

步骤2:清除数据

这个数据集最大的挑战是数据很混乱。180个预测列,130157个观测值有大量的缺失值。数据转换和建模将是避免过度拟合问题的关键领域。
使用总结函数中,我分析了预测值的类型,每个预测值列的最小值、最大值、中值和缺失值的数量。这有助于我得出相关假设来清理数据。

概要(列车组);

有许多不同的方法可以使用缺失的值和预测器选择。我们将经过本博客中的基本方法之一。您还可以参考此文档来了解其他方法:清除混乱和丢失的数据

注:这种数据清理方法是任意选择的,以减少预测列的数量。

删除表的字符列

这背后的原因是我选择用来训练模型的算法是fitclinear它只允许数字矩阵作为输入参数。因此,删除“分类”或“非数字”类型的变量。

列车组=搬迁车辆(列车组,{‘种族’、‘性别’、‘住院来源’、‘icu住院来源’、…‘icu住院类型’、‘icu类型’);

删除所有重要指标预测值的最小值

在分析了DataDictionaryWiDS2021.csv文件中提供了Kaggle数据,我注意到从第40列到第166列的偶数列对应于至关重要的类别

Trainset =裁员(Trainset,(40:2:166));

删除缺少30个或更多预测值的观测值

我所做的其他假设是可以去除具有30个或更多缺失的预测值值的观察(患者)。

列车组=rmmissing(列车组,1,'MinNumMissing',30);

删除缺少30个或更多预测值的观测值

我所做的其他假设是可以去除具有30个或更多缺失的预测值值的观察(患者)。

列车组=rmmissing(列车组,1,'MinNumMissing',30);

填充缺少的值

下一步是填充所有NAN值。一种方法是使用填充物缺失函数使用线性插值填充数据。其他方法包括用平均值或中值替换NaN值,以及使用CurveFitting应用程序删除异常值

Trainset = Constorvars(Trainset,@ IsCategorical,'Double');Trainset = Fillmissing(Trainset,'线性');

在此步骤中,我移动我们的标签预测仪糖尿病因为对于MATLAB和Classification learner应用程序中的某些算法,最后一列是默认响应变量。

Trainset = Lemevars(Trainset,'糖尿病_Mellitus','之后',110);

步骤3:创建培训数据

一旦我有了清理过的训练数据,我就把标签预测器分开糖尿病从训练集并创建两个单独的表XTrain:预测数据,:类别标签

XTrain=removevars(列车组,{'diabetes});YTrain=列车组。糖尿病;

步骤4:创建测试数据

下载未标记的WIDS2021.csv卡格尔的档案。使用可读函数将其存储为表。您还可以使用导入工具加载数据。

XTest=readtable('UnlabeledWiDS2021.csv','TreatAsEmpty','NA');

我使用类似的方法来清理测试数据,就像上面的训练数据一样。XTest是没有标签预测器的测试数据。

删除表的字符列

XTest = removevars(XTest, {'ethnicity','gender','hospital_admit_source',…“icu_admit_source”、“icu_stay_type”、“icu_type '});

删除所有重要指标预测值的最小值

最小值至关重要的类别对应于第40列到第166列的偶数列。

XTest=removevars(XTest,(40:2:166));

填充缺少的值

XTest=convertvars(XTest,@iscategorical,'double');XTest=fillmissing(XTest,'linear');

第五步:训练一个模型

在MATLAB中,可以使用两种不同的方法训练模型。

  1. 使用MATLAB自定义机器学习算法功能
  2. 使用分类学习器应用程序训练模型。

在这里,我将介绍执行这两种方法的步骤。我鼓励尝试这两种方法,并使用不同的算法和参数训练模型。这将有助于优化和比较不同模型的得分。

选项1:使用自定义算法

可以使用决策发辫,SVM和Logistic回归等各种算法来接近二进制分类问题。在这里我训练使用fitclinear分类模型。它用高维预测数据训练线性二元分类模型。

将表格转换为数字矩阵,因为fitclinear函数只需要数字矩阵作为输入参数。

XTrainMat=表2阵列(XTrain);XTESTAT=表2阵列(XTest);

合适的模型

该函数中的名称值对输入参数提供了调整模型的选项。这里我使用求解器作为sparsa(可分离近似的稀疏重建),默认情况下套索正规化。为了优化模型,我做了一些超参数优化。

“优化超参数”作为“自动”使用{lambda,学习者}获得函数名允许您在函数每秒过度使用一个区域时修改行为。

您可以使用交叉验证选项进一步交叉验证输入参数中的数据:Crossval,Kfold,CVPartition等等fitclinear文档以了解输入参数。

Mdl=fitclinear(XTrainMat、YTrain、“ObservationsIn”、“rows”、“Solver”、“sparsa”、“OptimizeHyperparameters”、“auto”、“HyperparameterOptimizationOptions”、“struct”(“AcquisitionFunctionName”、“expected-Improvement plus”);

在测试集上预测

一旦我们准备好了模型,就可以使用预测函数对测试集执行预测。它需要输入拟合模型和测试数据,与培训数据相似的预测器。输出是预测的标签和分数。

[标签,分数]=预测(Mdl,XTESMAT);

选项2:使用分类学习者应用程序

第二种训练模型的方法是使用分类学习者应用。它允许您交互式列车,验证和调整分类模型。让我们看看使用它的步骤。

  • 应用程序选项卡,在机器学习组中,单击分类学习者
  • 点击新会话然后选择数据(列车组)从工作区。指定响应变量(糖尿病).
  • 选择验证方法以避免过度拟合。你可以选择禁止验证交叉验证选择k折叠的数量。
  • 分类学习者选项卡,在模型类型部分,选择要训练的算法,例如。逻辑回归,所有支持向量机,所有快速训练
  • 您还可以尝试通过以下方式转换特征:启用主成分分析减少维度。
  • 的参数设置可以进一步改进模型高级对话框
  • 选择所有必需选项后,单击火车
  • 左侧的历史窗口显示经过训练的不同模型及其精度。
  • 模型对验证数据的性能可以通过混淆矩阵ROC曲线部分。
  • 要对测试集进行预测,我通过选择导出模型出口模式在…上分类学习者选项卡

验证数据的ROC曲线,从分类学习者应用程序导出,中值高斯支持向量机模型

在测试集上预测

导出的模型另存为训练有素然后,您可以使用预测

标签是测试集上的预测标签。分数是积极和消极课堂上每次观察的分数。

[标签,分数]=trainedModel.predictFcn(XTest);

提交并评估

步骤6:Kaggle提交

根据ID和预测分数创建结果表。提交所需的文件格式是:

ernounter_id,糖尿病_mellitus.

你可以把所有的测试结果放在一个MATLAB表格中,这样可以很容易地可视化和写入所需的文件格式。

测试结果=表格(XTest.遭遇id,分数(:,2),'VariableNames',…{'遭遇id','diabetes'});

将结果写入CSV文件。这是您将为挑战提交的文件。

可写(testResults,'testResults.csv');

步骤7:评估

Kaggle排行榜的提交将在预测和观察目标之间的接收器操作特性(ROC)曲线下的区域下进行评估(糖尿病).提交你的testResults.csv文件在滑动时生成的文件,以查看测试数据集的AUC分数。

AUC(曲线下的区域)是ROC曲线包围的区域。完美的分类器具有AUC = 1,完全随机分类器具有AUC = 0.5。通常,您的模型将在可能的AUC值范围内的某个位置进行评分[0,1]。

混淆矩阵图用于了解当前所选分类器在每个类中的执行情况。要在训练模型后查看混淆矩阵,可以使用MTALAB情节混乱功能。

要执行评估模型,Matlab有性能曲线作用它计算假阳性、真阳性、阈值和auc分数。函数的输入参数包括测试标签、分数和肯定类标签。

为了你的自我评价目的您可以创建测试标签(伊泰斯特)通过从训练集中划分子集,并使用从训练有素

注意:通过此函数计算的auc可能与Kaggle排行榜计算的auc不同。

[fpr,tpr,thr,auc]=性能曲线(Y测试,得分(:,2),'1');

感谢您跟随此代码!我们很高兴了解您将如何修改此起始代码并使其成为您的代码。我强烈建议您查看下面的参考资料部分,了解有关如何改进基准模型的更多想法。
在卡格论坛上随向我们联系或发送电子邮件studentcompetitions@mathworks.com如果你还有其他问题。

额外资源

  1. 数据科学教程
  2. MATLAB中的缺失数据
  3. 监督学习工作流程和算法
  4. 分类学习器应用程序中的训练分类模型
  5. 用于预测新数据的导出分类模型
  6. 8 MATLAB数据科学备忘单
|

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。