【编者按】AWS宣布推出亚马逊机器学习服务(Amazon Machine Learning),声称这项新的AWS服务来自于亚马逊内部的数据科学家用于创建机器学习模型的技术,可以帮助你使用你所收集到的所有数据来提高你决策的质量。你可以使用大量数据来建立并微调预测模型,然后大规模使用亚马逊机器学习进行预测(在批处理模式下或者在实时模式下)。即使没有统计学高级文凭或者对于建立、运行、维护你自己的处理和存储基础架构不熟悉,你也能从机器学习中受益。AWS首席布道者Jeff Barr撰写了一篇博文,一步一步地介绍了如何使用亚马逊机器学习服务构建预测模型。
机器学习基础
为了从机器学习中受益,你需要有一些可以用于训练的现有数据。把训练数据想象成数据库或电子表格的行是有一定帮助的。每一行代表一个单独的数据元素(一个购买,一次发货,或者一个目录项)。列表示该元素的属性:客户邮政编码,购买价格,信用卡类型,项目的大小,等等。
该训练数据必须包含实际结果的例子。例如,用行代表完成的交易,不论是合法还是欺诈,每一行必须包含一列作为目标变量来表示结果。这个数据是用来创建一个机器学习模型,当给拟议中的交易提交新数据时将返回有关其有效性的预测。亚马逊机器学习支持三种不同类型的预测:二元分类,多类分类和回归分析。让我们来看看每一个:
二元分类用于预测两种可能的结果中的一个。这是合法的交易吗?客户将购买此产品吗?送货地址是公寓大楼吗?
多类分类用于预测三个或更多可能的结果中的一个,以及每一个的可能性。这件产品是关于服装的一本书,一部电影,还是一篇文章?这部电影是喜剧片,纪录片,还是惊悚片?哪一类产品让这个客户最感兴趣呢?
回归分析被用于预测一个数字。库存应放置多少27寸显示器?我们应该为此花费多少钱呢?其中有百分之多少有可能作为礼品出售?
一个适当培训和调整过的模型可以用来回答上述问题之一。在某些情况下,使用相同的训练数据来建立两个或两个以上的模型是合适的。
你应该计划着花费一些时间来丰富你的数据,以确保它能很好的匹配你的训练过程。举个简单的例子,你可能会以基于邮政编码的位置数据开始。经过一番分析,你很可能发现你可以使用包含或大或小的分辨率不同的位置表示来提高结果的质量。机器学习的训练过程是反复的,你需要明确的计划来花一些时间了解和评估你最初的结果,然后用它们来充实你的数据。
你可以利用提供给你的一组性能指标来衡量你的每个模型的质量。例如,曲线下面积(AUC)标准显示了二元分类的性能。这是在0.0到1.0范围内的一个浮点值,它表示了模型每隔多久在没训练过的数据上预测结果。随着模型质量的上升,数值从0.5上升到1.0。0.5的值不比随机猜测要好,而0.9在大多数情况下是一个很好地模型数据。但是0.9999的数值太过于好而让人难以相信,并且这个值可能意味着训练数据出现了问题。
当你建立你的二进制预测模型时,你将需要花一些时间观察结果并且调整截止值。它代表该预测是正确的概率;在特定情况下,你可以根据假阳性(预测应该是假的,但被预测为真)和假阴性(预测应该是真实的,但被预测为假)的相对重要性将值调整高或者低。如果你正在为电子邮件建设一个垃圾邮件过滤器,假阴性会将垃圾邮件投递到你的收件箱中,而假阳性会将你的合法邮件丢弃到垃圾文件夹中。在这种情况下,假阳性是不理想的。假阳性和假阴性之间的权衡是要依赖于你的业务问题以及你打算如何在生产中利用该模型。
亚马逊机器学习实操
利用AWS Machine Leaning API,开发人员能够在Amazon RDS中创建新的模型,利用来自Amazon S3、Amazon Redshift或者MySQL数据库中的数据。让我们漫步在创建一个模型的过程中,并且按照亚马逊机器学习开发人员教程部分中描述的步骤来产生一些预测。你可以注册亚马逊机器学习,然后如果你愿意的话你可以按照向导中的步骤来使用。该指南使用一个略有增强的副本,该副本是来自加州大学欧文分校的机器学习库的可公开获得的营销银行的数据集。我们即将完成的模型将回答“用户将要订阅我们的新产品吗?”
我下载了banking.csv的副本,并将它上传到亚马逊的简单存储服务(S3),然后同意让控制台添加一个IAM策略,从而使亚马逊机器学习可以访问它:
然后,我通过参考存储桶中的项目创建一个亚马逊机器学习数据源对象并为对象提供一个名称。这个对象包含的数据的位置,变量名称和类型,所述目标变量的名称,以及对每个变量的描述性统计。大多数亚马逊机器学习的运作引用数据源。以下是我设置好一切:
亚马逊机器学习还可以从Amazon Redshift或Amazon RDS MySQL数据库创建一个数据源。选择上面所示的Amazon Redshift方案就给了我进入我的Amazon Redshift集群的名称,以及数据库名,访问凭据和SQL查询的选择。机器学习API可用于从一个Amazon RDS中为MySQL数据库创建一个数据源。
亚马逊机器学习打开并且扫描文件,为变量类型做了一个猜测,然后提出了以下的方案:
在这种情况下,所有的猜测都是正确的。如果他们不都正确,我可以选择一行或多行,点击更改类型来修复它们。
因为我将使用数据源创建和评估一个ML模式,我需要选择训练变量。在这组数据集中,训练变量(Y)具有二进制数据类型,所以从中产生的模型将采用二元分类。
在很多次点击之后我已经准备好创建数据源:
一两分钟后我的数据源准备好了:
正如我之前暗示的,你可以通过更多地了解你的数据来提高你的模型。亚马逊机器学习控制台为你提供了多种不同的工具,你可以用它们来了解更多信息。例如,你可以在一个数据源中观察任何变量值的分布。这里是我在自己的数据源中观察年龄变量所看到的:
下一步是创建我的模型:
我选择使用默认设置。亚马逊机器学习中默认使用70%的数据用于训练,30%的数据用于评估:
如果我选择自定义选项,我早就有机会定制“秘方”,亚马逊机器学习使用它从数据源转换和处理数据:
在很多次点击之后,亚马逊机器学习开始创建我的模型。短暂休息之后,我的模型已经整装待发:
我快速浏览了一下性能指标:
为了选择最好的客户(那些最有可能进行购买的),我点击了调整分数阈值并且提升了截止值,使得只有5%的数据被期待能够通过,并将Y赋予预测值“1”:
有了这个设定,只有1.3%的预测将是假阳性,22%会出现假阴性,77%将是正确的预测。我选择了把假阳性变得稀少,并决定把截止值设置高,以避免它们。在商业上,这个设置让我避免给“错误”的客户发送昂贵的宣传资料。
随着我的模型的建立,现在我可以用它来创建批处理预测(记得亚马逊机器学习支持批处理和实时预测)。批处理模式允许我同时为一组观察结果产生一系列的预测。我从菜单开始:
我使用入门指南推荐的文件创建了另一个数据源。这个文件,不像第一个,不包含Y变量的值。
然后,我选择一个位置(在S3中)来存储预测结果,回顾我的选择,并开始批量预测:
再经过短暂的花园旅行,我的预测已经完成了!我从存储桶里下载了文件,将它解压缩,这里是我所看到的:
行对应于那些在原始文件中的。第一个值是预测变量Y(通过与我建立模型时设立的截止值进行比较计算得出),第二个是实际得分。如果我已经包含了行标识符,每个预测将包括一个独特的“主键”,它将帮助我将结果返回源数据。
如果我正在建立一个实时的应用程序,并且我需要生成预测作为“请求-响应”循环的一部分,我可以让实时预测模型这样实现:
实时预测实现后,我可以写代码来调用亚马逊机器学习的预测功能。这里是一些Java代码用于检索与ML模型(化代码中的ML模型)相关联的元数据,在元数据中查找服务端点,进行实时预测,并将结果显示:
AmazonMachineLearningClient client = new AmazonMachineLearningClient(); GetMLModelRequest modelRequest = new GetMLModelRequest() .withMLModelId(mlModelId); GetMLModelResult model = client.getMLModel(modelRequest); String predictEndpoint = model.getEndpointInfo().getEndpointUrl(); PredictRequest predictRequest = new PredictRequest() .withMLModelId(mlModelId) .withPredictEndpoint(predictEndpoint) .withRecord(record); PredictResult prediction = client.predict(predictRequest); System.out.println(prediction); |
该代码会输出类似这样的结果:
{Prediction: {PredictedLabel: 0,PredictedScores: {0=0.10312237},Details: {PredictiveModelType=BINARY, Algorithm=SGD}}} |
这意味着,ML模型类型是二进制分类,预测的得分为0.10312237,并且根据与模型相关联的预测阈值,当代码运行时预测响应为“0”。
查看我们的机器学习样本,寻找一些示例代码(Python和Java)用于进行有针对性的营销、社交媒体监测和移动预测。
定价
亚马逊机器学习现已在美国东部(弗吉尼亚州北部)上市,价格还是按需付费:
- 数据分析、模型训练和模型评估将花费0.42美元/小时;
-
批处理预测将耗资0.10美元/1000预测,四舍五入到下一个1000;
- 实时预测耗资0.10美元/1000预测加上按小时预留流量收费,即为你的模型配置的每10M内存需花费0.001美元/小时。在模型的创建中,你可以指定每个模型的最大内存大小来管理成本和控制预测性能;
- 存储在S3,Amazon RDS和Amazon Redshift中的数据是分开计费的。
|