物联网和黑客马拉松Azure机器学习:我们如何在竞争中脱颖而出


不久前,又发生了一次微软黑客马拉松。这次,他致力于机器学习。但是,对于我来说,这个话题非常相关且很有希望。在黑客马拉松的开始,我对它的含义,为什么需要它只有一个大致的了解,而且我几次看到了经过训练的模型的结果。在得知该公告承诺了很多专家可以帮助初学者之后,我决定将业务与娱乐结合起来,并在使用某种物联网解决方案时尝试使用机器学习。接下来,我将告诉您其中的原因。


本人长期从事周界安防系统的基础上,栅栏振动的分析,让曾经的想法与加速度计的工作。这个想法很简单:根据加速度计的数据,教该系统区分几个手机的振动。我的同事已经成功地进行了类似的实验,因此我毫无疑问地做到了。

最初,我想在Raspberry Pi 2Windows IoT上进行所有操作。准备了一个带有数字和模拟加速度计的特殊电路板(如下图所示),但是我决定在hackathon上做所有的事情,但我没有设法进行实践。为了以防万一,我还捕获了我们的传感器,它还使您能够了解波动的“原始”数据。



在黑客马拉松比赛中,要求所有参与者分成小组,并使用预先准备的数据解决3个问题之一。我的任务原来是“与众不同”,但是团队聚集得足够快:



我们都没有使用Azure机器学习的经验,因此要做的事情很多!感谢psfinaki的同事们 的努力!

决定将其分为三个方向:
  • 准备分析数据
  • 将数据上传到云
  • 与Azure机器学习一起使用


数据的准备是从加速度计获得数据,然后以可下载到云的形式呈现数据。已计划通过Event Hub上传到云。好了,那么您必须了解如何在Azure机器学习中使用此数据。

问题始于所有三点。



在Raspberry上配置Windows IoT花费了很长时间。她没有在监视器上放照片。只能通过在config.txt中输入以下行来解决此问题:

hdmi_ignore_edid=0xa5000080
hdmi_drive=2
hdmi_group=2
hdmi_mode=16

将视频驱动程序调整为所需的格式,分辨率和频率。



但是,在本课上花费的时间清楚地表明,您可能没有时间组织来自加速度计的数据接收。因此,决定使用我已保留的传感器。

已经为传感器编写了许多应用程序。其中之一在屏幕上显示了“原始”数据图:



有一点需要完成它,以便准备要发送到云的数据。

事件中心也无法立即运行。首先,我们尝试将随机序列发送到那里。但是数据不想出现在报告中。结果有几个问题,而且结果都是“孩子气的”:在某个地方设置错误,在某个地方使用错误的密钥,等等。在这个方向上的工作很困难,并且耗费了很多精力:



但是,到了第一天晚上,我们就能够即时从传感器发送和接收数据了。没错,在最终解决方案中这不是必需的。稍后再讲原因。

借助机器学习,一无所知。一开始我们一起研究了美丽的本文以使用移动应用程序作为客户端的示例为例。然后,我们弄清楚了数据格式以及如何使用它们。然后他们想到了如何创建训练序列。

Azure Mashine Learning有许多用于各种分类的算法。这些算法必须在测试数据集上进行训练。然后,那些效果最好的文件可以作为Web服务发布,并从应用程序连接到它们。

学习算法称为“实验”。所有操作都在可视化编辑器中执行:



从左侧列表中拖放项目可让您接收数据,修改和转换它们,训练模型并评估其工作。

这是一个典型的实验:



火车模型,分数模型和评估模型被认为是最重要的。
第一种,使用输入数据训练算法,第二种在数据集上测试训练后的算法,第三种评估测试结果。

在我们的例子中,源数据是一个csv文件。但是其中应该包含什么?

传感器的敏感元素每秒被轮询1024次。每个测量是一个与当前振荡幅度相对应的两字节值。此外,不是从零开始而是从对应于固定传感器的参考数字测量幅度。

经过反思,我们决定使用临时切片。例如,所有256毫秒的传感器轮询在csv表中给了我们一行。此数据可以在另一列中进行标记,具体取决于传感器的状况。例如,我们用0表示噪声(用手摇动传感器,轻敲等),用1表示信号(传感器上有振动电话)。

这就是我们记录测试序列的方式:



接收数据并意识到需要对它们进行处理后,我们开始学习第一个模型:



第一个煎饼实在是块状:



当时,这些指标的含义还不清楚。支持小组的代表Yevgeny Grigorenko谈到了ROC曲线后,我们得到了拯救。最主要的是,如果图形在某处位于中线以下,则该模型的效果甚至比给出随机结果还要差!尤金(Eugene)继续竭尽所能为我们提供帮助,为此,他深表感谢!



然后,我们重新编写了很长时间的训练序列,并观察了结果:



事实证明,处理2秒的记录并不是最佳选择(2048个传感器轮询)。这使我们能够使表csv行更有意义。但是结果仍然差强人意。

第一天结束了。

我花了一整夜研究材料。这篇文章确实有帮助关于二进制分类。我还仔细阅读了这篇文章,并提供了有关这次黑客马拉松的提示。总的来说,到开始工作时,我就充满了新想法。

我们在第二天的整个上半部分研究了不同的模型。工作的结果是一个“工作表”:



到目前为止,我们已经很清楚我们根本没有时间区分两个振动环,因为训练数据的质量迫切需要,而且没有足够的时间来记录新的振动环。因此,我们专注于将数据分为“信号”和“噪声”。

对于工作,我们使用了3个数据集:
  1. 一个训练集,其中有一个信号(csv文件的行标记为1)和噪声(行的标记为0)
  2. 一组仅包含噪声(0行起)
  3. 仅包含信号的集合(1行起)


首先对模型进行训练,然后对每个数据集进行测试和评估。结果令人鼓舞:



结果是,在9种二元分类模型中,我们选择了5种。

事实证明,将模型用作Web服务比将其固定到事件中心要容易得多。因此,我们决定发布所有5个模型,并通过REQUEST / RESPONSE与它们一起使用,这是一个很好的例子。



该请求是从传感器获取的2048个值的输入数组。答案看起来像这样:



得分标签为0或1。即分类的结果。得分概率-十进制数字,反映评估的正确性。据我了解,第一个值是舍入第二个值。也就是说,第二值越接近0,得分0的可能性就越大,反之亦然。值越接近1,得分1的可能性越大。

完成了在屏幕上显示“原始数据”图的程序后,我们能够从多个流中同时从所有五个Web服务接收数据。此外,在稍微观察一下估计值之后,我们排除了一个估计值,因为它给出的结果与其他估计值完全不同,并且破坏了整体情况。

结果如下:







然后,培训顺序中的所有问题立即消失了。尽管我们试图将振动警报与其他所有警报(噪声和静止)分开,但静止状态却非常接近通话,但这远非总是确定的。调用与其余调用之间的差异由每个模型的平均概率决定。接近1的值表示呼叫,得分为1的大约0.5的值表示和平。好吧,如果分数是0-这绝对是噪音。

这时,黑客马拉松比赛结束了。我们甚至没有时间向专家展示结果,因为他们正在忙于评估条目。

但是,所有这些不再特别重要。最重要的是,我们取得了完全理智的结果,同时也学到了很多东西!

经过两天的辛苦工作,我们(尽管部分完成了)完成了任务。感谢团队的同事和帮助我们的专家!

现在我们可以注意到我们项目的开发路径。我们使用时间特征来分隔事件。但是,如果我们移至频域,则算法的效率应更高。噪声,和平与铃声具有明显不同的频谱特性。

另外,有经验的人建议应将数据标准化。即,输入序列的编号必须在-1到+1的范围内。算法可以更有效地处理此类数据。

现在,仍然需要进行训练序列的形成,以便更清晰地将信号与噪声分离。

这些改进将显着提高状态确定的准确性,我希望在将来进行检查。

Source: https://habr.com/ru/post/zh-CN387857/


All Articles