数加pai

数加pai是一个机器学习平台,提供可视化界面来操作算法,无需自己编写任何代码即可计算自己的数据。
如果你没有那么多数据也没有这种场景,那么选择一个外部算法平台也是一个不错的选择。

kaggle

一个类似阿里云天池的算法开发大赛平台,会定时发布各种任务,前几名有奖金,第一名$10W。

我们用这个平台上练手的项目来体验一下PAI。

找到首页中标着101的那一组,这些题目都是给你练手的,相对来说会比较简单一点,就选第一个,Digit Recognizer

题目分析

这个题目的主要任务的数字识别,很多手写的数字,左边导航栏home-data,进去可以下载本次的训练数据: train.csv和测试数据: test.csv

打开train.csv文件,主办方已经把需要识别的图片提取成像素值,直接训练就行了。

其中,一行代表一个数字的图片,第一列lable代表的是已经识别出来的具体的数字。

label pixel0 pixel1 …..
1 0 186 0
0 0 186 100
….. …… …… …..

寻找合适算法

这里我采用了kNN算法,具体可以点击这里查看算法详细介绍。

选择kNN是因为kNN算法比较好理解,对于我这种新手也比较容易看懂,缺点是kNN算法是惰性算法,计算时间会比较长。

开始解题

一开始我使用python的numpy包来进行解题,在本机跑了将近一个半小时之后,终于输出了结果,这里有两个缺点,一个是我要自己处理CSV文件,提取成数组给kNN算法组件,二来是笔记本性能捉襟见肘,想要调试算法参数每次都要等这么久简直不能忍,于是我想到数加机器学习平台

上传数据

pai依赖于MaxCompute,所以要先开通MaxCompute,在数加里面可以开通,开通后建两张表pai_test_trainpai_test_data,分别对应训练数据和测试数据。

首先下载MaxCompute CMD,这里点击新版客户端下载,下载完成后,配置AK以及运行CMD,关于如何建表,请查看帮助文档,注意要把所有字段也建了,和CSV文件相对应,这里字段有段多,可以用一个脚本生成sql. 然后使用 MaxCompute CMDtunnel命令上传CSV文件建表odps@ my_test_project> tunnel upload train.csv pai_test_train;,还有测试数据表odps@ my_test_project> tunnel upload test.csv pai_test_data;

使用pai来解题

从数加的管理控制台进入pai,然后按照以下步骤操作。

  1. 新建一个实验,取名pai_test,这时候我们会得到一个空的实验,接下来就是往实验上拖组件。
  2. 首先选择数据源,在左侧表列表中选择刚刚新建的pai_test_trainpai_test_data,分别拖到右侧的实验图上。这里表同步机制有延迟,如果在所有表中找不到新建的表,可以尝试一下搜索。
  3. 这时候我们的训练表和测试表已经在实验中ready了,就需要去找我们的算法组件了,在组件-机器学习-多分类中,K近邻就是我们需要的算法组件,同样拖拉到实验中。
  4. 组件都已经准备好了,那么就需要告诉pai如果来运行你的组件了,同样采用拖拉的方式,在pai_test_train表的组件下方有个小白点,鼠标拖拉一下可以拉出一根线,把这个线连接到K近邻算法组件上方的右边白点上,两个组件已经关联完成,同理另外一个表连接到右边白点上。
  5. 接下来就是配置算法组件了,要告诉算法,哪些是我的标签列,哪些是我的特征列,点击K近邻算法组件,在右侧的算法配置界面中,选择训练表特征列,这里把除了label字段外的所有字段都勾上,因为lable列是我们的标签列。
  6. 选择训练表的标签列中选择label字段,下面两个选项都是可选项,可以选择预测表的哪些特征别参与计算,还有产出表选择产出哪些字段,这些都可以选择默认,同理还有参数设置tab,如果对算法没什么研究,选择默认就可以了。
  7. 全部选择好了,点击下方的运行来进行计算。

产出数据

运行成功后,会产出一张新表,名字带有随机性,通常格式是pai_temp_5052_75767_1,因为kaggle没有和阿里云的产品进行打通,这里我们需要把数据下载成CSV文件,然后进行上传。

  1. 首先依然是通过tunnel命令进行下载: odps@ my_test_project> tunnel download pai_temp_5052_75767_1 -h true result.csv;,-h true命令表示带上表头。
  2. 打开CSV文件,找到prediction字段,这个就是我们的预测结果了,然后就是上传kaggle了。
  3. 因为kaggle对上传的字段有要求,这样他才能统计出分数,需要一个csv文件,有两列imageIdlabelimageId就是一列自增列,从1开始,label列就是我们的结果列。
  4. 打开101那个项目,找到Make a submission那一项,上传我们的CSV文件,就能得到分数了。
  5. 后续可以调整算法参数,慢慢改善算法,提高分数,提高排名,也可以尝试一下别的算法。