学生休息室

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

WiDS Datathon 2021的MATLAB基准代码

介绍

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

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

WiDS Datathon 2021通过来自麻省理工学院GOSSIS(全球开放源码疾病严重程度评分)倡议的数据关注患者健康西部大数据创新中心,以及WiDS Datathon委员会,开放至2021年3月1日。了解更多有关WiDS Datathon登记参加今天

数据马拉松的任务是训练一个模型,该模型将患者记录数据作为输入,并输出患者被诊断为某种类型糖尿病的可能性的预测,从而为重症监护病房的治疗提供信息。在这篇博文中,我将介绍MATLAB中基本的初学者代码工作流。其他培训方法的额外资源链接在博客文章的底部。

加载和准备数据

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

步骤1:加载数据

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

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

步骤2:清除数据

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

概要(列车组);

处理缺失值和预测值选择有许多不同的方法。我们将在本博客中介绍其中一种基本方法。您也可以参考本文档了解其他方法:清理混乱和丢失的数据.

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

删除表中的字符列

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

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

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

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

列车组=拆除车辆(列车组,(40:2:166));

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

我所做的另一个假设是,可以删除缺少30个或更多预测值的观察结果(患者)。

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

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

我所做的另一个假设是,可以删除缺少30个或更多预测值的观察结果(患者)。

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

填充缺少的值

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

列车组=转换器(列车组,@iscategorical,'double');列车组=填充缺失(列车组,'linear');

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

列车组=移动车辆(列车组,“糖尿病”,“之后”,110);

步骤3:创建培训数据

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

XTrain = removevars(小火车,{' diabetes_mellitus '});YTrain = TrainSet.diabetes_mellitus;

步骤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:使用自定义算法

二元分类问题可以使用各种算法来解决,如决策树、支持向量机和逻辑回归fitclinear分类模型。用高维预测数据训练线性二值分类模型。

将表转换为数字矩阵,因为fitclinear函数仅将数字矩阵作为输入参数。

XTrainMat = table2array (XTrain);XTestMat = table2array (XTest);

合适的模型

函数中的名称-值对输入参数提供了调整模型的选项套索正则化。为了优化模型,我做了一些超参数优化。

“OptimizeHyperparameters”“汽车”使用{lambda,学习者}获得函数名允许您在函数每秒过度使用一个区域时修改行为。

你可以使用交叉验证选项进一步交叉验证输入参数中的数据:crossval、KFold、CVPartition等等,看看fitclinear文档以了解输入参数。

Mdl = fitclinear (XTrainMat YTrain,‘ObservationsIn’,‘行’,‘解决’,‘sparsa’,……‘OptimizeHyperparameters’,‘汽车’,‘HyperparameterOptimizationOptions’,……结构(“AcquisitionFunctionName”、“expected-improve ment-plus '));

预测测试集

一旦我们准备好模型,您就可以使用predict函数对测试集执行预测。它将拟合模型和具有类似预测值的测试数据作为输入作为训练数据。输出是预测的标签和分数。

(标签,分数)=预测(Mdl XTestMat);

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

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

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

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

预测测试集

导出的模型另存为训练模型然后,您可以使用predictFcn.

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

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

提交并评估

步骤6:Kaggle提交

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

遭遇糖尿病

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

testResults =表(XTest.encounter_id分数(:,2),“VariableNames”…{‘encounter_id’,‘diabetes_mellitus});

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

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

第七步:评估

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

AUC(曲线下面积)是ROC曲线所包围的面积。完美分类器的AUC=1,完全随机分类器的AUC=0.5。通常,模型的得分介于可能的AUC值范围[0,1]之间。

混淆矩阵图用于理解当前选择的分类器如何在每个类中执行。要查看训练模型后的混淆矩阵,可以使用MTALAB情节混乱作用

为了执行评估模型,MATLAB提供了perfcurve函数。它计算假阳性、真阳性、阈值和auc分数。函数的输入参数包括测试标签、分数和阳性类标签。

为你的自我评价目的您可以创建测试标签(伊泰斯特),从训练集中分割出一个子集,并使用从训练集中生成的分数训练模型.

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

(玻璃钢,tpr,用力推,auc) = perfcurve(欧美,分数(:,2),' 1 ');

感谢您跟随这段代码!我们很高兴知道你将如何修改这个启动代码,并使它成为你的。我强烈建议查看下面的参考资料部分,了解如何改进我们的基准模型。
请随时在Kaggle论坛上联系我们,或发送电子邮件至studentcompetitions@mathworks.com如果你还有其他问题。

额外的资源

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

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。