Scala使用ML在Dataframe中查找异常值

时间:2018-01-05 01:28:34

标签: scala apache-spark

这个问题会有点模糊,但我似乎无法在网上找到任何具体的例子。

https://spark.apache.org/docs/0.9.0/mllib-guide.html

从上面的spark文档中,我可以看到多种训练方法,并使用Mllib库预测异常/异常值。但是,这些示例中的每一个仅涉及数字或最多2列数据。

我无法弄清楚如何训练和预测具有更多价值等的数据集......

如果我想使用群集方法查找数据的异常值,我们会说,我的数据在数据帧中如下所示:

UserId   |   Department   |   Date   |   Item   |   Cost
user1    |   Electronic   |  11-19   |  Iphone  |   115
user1    |   Electronic   |  11-19   |  Iphone  |   150
user1    |   Electronic   |  11-19   |  Iphone  |   900
user1    |   Electronic   |  11-23   |  Iphone  |   85
user1    |   Electronic   |  11-20   |  Iphone  |   120
user2    |   Electronic   |  11-19   |  Iphone  |   600
user2    |   Electronic   |  11-19   |  Iphone  |   550
user2    |   Electronic   |  11-19   |  Iphone  |   600
user2    |   Electronic   |  11-23   |  Iphone  |   575
user2    |   Electronic   |  11-20   |  Iphone  |   570
....

这几个月会有数百万这样的数据。 我想研究过去X个月的用户模式,并每天使用新数据不断更新我的模型。像

这样的东西
user1    |   Electronic   |  11-19   |  Iphone  |   900

应被视为异常值

如何在这类数据集上应用上述任何监督学习方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

您确定使用的是Spark 0.9(当前版本是2.2)吗?您引用的网站正在显示一个kMeans示例[1]。参数 parsedData 可以有两列以上,但Spark 0.9中的kMeans只能处理双值[2]。

另外,其他例子可以有两列以上[3]。 label参数可以是正在进行的数字,功能是您列出的数据,但是像kMeans spark 0.9只能处理双值。

看看0.9 api的其他可用类,让我假设火花0.9只能处理双值。如果你想处理上面显示的喜欢的数据,你应该考虑使用更新版本的spark。

[1] https://spark.apache.org/docs/0.9.0/mllib-guide.html#clustering-1

[2] https://spark.apache.org/docs/0.9.0/api/mllib/index.html#org.apache.spark.mllib.clustering.KMeans $

[3] https://spark.apache.org/docs/0.9.0/api/mllib/index.html#org.apache.spark.mllib.regression.LabeledPoint