学生休息室

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

MATLAB基准代码wid Datathon 2021

介绍

你好,我是Neha高尔,AI /数据科学竞赛的技术领导MathWorks学生团队的竞争。MathWorks兴奋支持wid Datatho万博1manbetxn 2021通过提供免费MATLAB许可证,教程,开始每个参与者的资源。

请求你的免费许可证,去MathWorks网站,单击“请求软件”按钮,填写软件申请表。72营业时间内你会得到您的许可。

在wid Datathon 2021关注病人的健康数据来自麻省理工学院的GOSSIS开源疾病严重程度评分(全球)倡议。由全球wid团队,为您呈现西大数据创新中心和wid Datathon委员会,直到2021年3月1日开放。了解更多的wid Datathon,或登记参加今天。

Datathon任务是训练模型,作为输入病人记录数据和输出的预测可能是病人被诊断出患有某种类型的糖尿病可以通知治疗ICU。在这篇文章我将走过基本工作流在MATLAB起动器代码。额外的资源为其他训练方法与底部的博客。

负载和准备数据

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

步骤1:加载数据

注册和下载的竞争从Kaggle数据文件。”TrainingWiDS2021.csv“是训练数据文件和“UnlabeledWiDS2021.csv”是测试数据。
一旦你下载的文件,确保文件在MATLAB路径。在这里我使用了readtable函数来读取文件并将其存储表。TreatAsEmpty是占位符文本处理空值数字列在文件。表格元素对应的字符“NA”将被设置为“南”当进口。您还可以使用MATLAB导入数据导入工具

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

步骤2:干净的数据

这个数据集的最大挑战在于,数据混乱。180年预测列,130157年观察与很多缺失值。数据转换和建模的关键领域的工作,以避免过度拟合问题。
使用总结功能,我预测的类型进行了分析,min,马克斯,中间值和缺失值的数量为每个预测列。这帮助我获得相关的假设来干净的数据。

摘要(小火车);

有许多不同的方法来处理缺失值和预测值的选择。我们将通过这个博客的基本方法之一。你也可以参考这个文档来了解其他方法:干净的混乱和丢失的数据

注意:这种方法的数据清洗证明选择任意减少预测的列的数量。

删除字符表列

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

小火车= removevars(小火车,{‘种族’,‘性别’,‘hospital_admit_source’,‘icu_admit_source’,……“icu_stay_type”、“icu_type '});

除去所有重要器官的最小值预测

在分析了DataDictionaryWiDS2021.csvKaggle提供的文件数据,我发现即使列列40到166对应于最小值的预测至关重要的类别。

小火车= removevars(小火车(40:2:166));

删除的观测30或更多失踪的预测因子

假设我是30或更多的观察(病人)失踪的预测价值可以删除。

小火车= rmmissing(小火车,1 MinNumMissing, 30);

删除的观测30或更多失踪的预测因子

假设我是30或更多的观察(病人)失踪的预测价值可以删除。

小火车= rmmissing(小火车,1 MinNumMissing, 30);

填补缺失值

下一步是要填写所有NaN值。一种方法是使用fillmissing使用线性插值函数来填充数据。其他方法包括用意味着或中间值和取代NaN值使用曲线拟应用删除离群值

小火车= convertvars(小火车,@iscategorical,“双”);小火车= fillmissing(小火车,“线性”);

在这个步骤中,我将我们的标签预测diabetes_mellitus表的最后一列,因为对于一些算法在MATLAB和分类学习者应用最后一列是默认的响应变量。

小火车= movevars(小火车,‘diabetes_mellitus’,‘后’,110);

步骤3:创建训练数据

一旦我有打扫训练数据。我单独的标签预测diabetes_mellitus从训练集和创建两个不同的表中XTrain:预测数据,YTrain:类标签

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

步骤4:创建测试数据

下载UnlabeledWiDS2021.csv从Kaggle文件。读取文件使用readtable函数来存储表。您还可以使用导入工具加载数据。

XTest = readtable (“UnlabeledWiDS2021.csv”、“TreatAsEmpty”、“NA”);

我使用一个类似的方法清洁上面的测试数据作为训练数据。XTest是没有标签的测试数据预测。

删除字符表列

XTest = removevars (XTest{“种族”,“性别”,“hospital_admit_source”,…“icu_admit_source”、“icu_stay_type”、“icu_type '});

除去所有重要器官的最小值预测

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

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

填补缺失值

XTest = convertvars (XTest @iscategorical,“双”);XTest = fillmissing (XTest,“线性”);

第五步:火车模型

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

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

这里介绍的步骤做的方法。我将鼓励尝试的方法和使用不同的算法训练模型和参数。它将有助于优化和比较不同模型的分数。

选项1:使用自定义算法

二元分类问题可以使用各种算法如决定发辫,走近svm和逻辑回归。在这里我培训使用fitclinear分类模型。这列车与高维线性二元分类模型预测数据。

因为表转换为一个数字矩阵fitclinear函数只需要数字矩阵作为输入参数。

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

合适的模型

函数内的名称值对输入参数给出了优化模型的选择。在这里我使用解算器作为sparsa(可分近似稀疏重建),默认套索正则化。优化模型中,我做了一些Hyperparameter优化。

“OptimizeHyperparameters”作为“汽车”使用{λ,学习者}收购函数名可以修改函数时行为overexploiting每秒一个区域。

您可以进一步交叉验证数据在输入参数使用交叉验证选择:crossval、KFold CVPartition等检查fitclinear文档了解输入参数。

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

测试集上的预测

一旦我们准备好你的模型,你可以执行预测测试集使用预测函数。它使用拟合模型作为输入,与类似的预测作为训练数据和测试数据。输出预测的标签和分数。

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

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

训练模型的第二种方法是通过使用分类学习者应用。它让你交互训练、验证和优化分类模型。让我们看看工作的步骤。

  • 应用程序选项卡,在机器学习小组中,单击分类学习者
  • 点击新会话并选择数据(小火车从工作空间)。指定响应变量(diabetes_mellitus)。
  • 选择验证方法,以避免过度拟合。你可以选择坚持验证交叉验证选择k-folds的没有。
  • 分类学习者选项卡,在模型类型部分,选择算法训练有素。逻辑回归,所有支持向量机,所有Quick-to-train
  • 你也可以尝试改变特性使主成分分析降低维数。
  • 该模型可以进一步提高改变参数设置先进的对话框
  • 一旦所有必需的选项被选中,单击火车
  • 左边的历史窗口显示不同的模型训练和准确性。
  • 性能模型的验证数据可以被评估混淆矩阵ROC曲线部分。
  • 对测试集进行预测我通过选择导出模型出口模式分类学习者选项卡

ROC曲线的验证数据,从分类学习者应用,导出平均高斯SVM模型

测试集上的预测

出口模型保存trainedModel在工作区中。你可以预测使用标签和分数predictFcn

标签预计测试集上的标签。分数的成绩是每个观察对积极和消极类。

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

提交与评估

第六步:Kaggle提交

创建一个表基于id的结果和预测的分数。提交所需的文件格式是:

encounter_id, diabetes_mellitus

您可以将MATLAB中所有测试结果表,这使得它很容易想象,写所需的文件格式。我存储了积极的标签(第二列)的分数。

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

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

writetable(检测结果,“testResults.csv”);

第七步:评估

提交的Kaggle排行榜将评估在接受者操作特征(ROC)曲线下的面积之间的预测和观察到的目标(diabetes_mellitus)。提交你的testResults.csv文件生成Kaggle查看你的AUC分数以上测试数据集。

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

混淆矩阵图是用来了解当前选中的分类器中执行每个类。查看混淆矩阵训练后一个模型,您可以使用MTALABplotconfusion函数。

执行评估模型,用MATLABperfcurve函数。它计算假阳性,真阳性,阈值和auc得分。函数的输入参数包括测试标签,分数和积极的类标签。

为你的自我评估的目的您可以创建测试标签(欧美分区的一个子集)的训练集和使用产生的分数trainedModel

注意:通过这个函数可能不同于auc auc计算计算Kaggle排行榜。

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

谢谢你按照这个代码!我们兴奋地找出如何修改这个起动器代码,使它成为你的。我强烈推荐看我们下面的参考资料部分以获得更多的想法如何改善我们的基准模型。
随时联系我们在Kaggle论坛或电子邮件studentcompetitions@mathworks.com如果你有任何进一步的问题。

额外的资源

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

评论

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