Flink 无监督学习

2017/07/12 Flink

FLink 无监督学习

Flink到目前为止只运行一种无监督学习方法,K Nearest Neighbor join Algorithm(KNN)。

KNN

KNN算法设计目的是为了对数据集的每个元素在另一个数据集中找到最近的K个元素,所以在数据挖掘中应用较多。KNN算法对资源要求比较高,可能数据集会很大,FLinkML提供了分布式的KNN算法。 Flink通过四叉树实现了对元素距离的计算。使用四叉树通过数据分区减少了计算量,如果不用四叉树的话, 计算量会大一些。如下图: 图一 四叉树可能是最差的选择。FlinkML会根据数据自动选择什么算法是否使用四叉树。 下面给出一个示例:

import org.apache.flink.api.common.operators.base.CrossOperatorBase.CrossHint
import org.apache.flink.api.scala._ 
import org.apache.flink.ml.nn.KNN 
import org.apache.flink.ml.math.Vector 
import org.apache.flink.ml.metrics.distances.SquaredEuclideanDistanceMetric 

val env = ExecutionEnvironment.getExecutionEnvironment 

//prepare data
val trainingSet:DataSet[Vector] = ...
val testingSet:DataSet[Vector] = ...

val knn=kNN()
    .setK(3)
    .setBlocks(10)
    .setDistanceMetric(SquaredEuclideanDistanceMetric())
    .setUseQuadTree(false)
    .setSizeHint(CrossHint.SECOND_IS_SMALL)

knn.fit(trainingSet)
val result = knn.predict(testingSet).collect()

Show Disqus Comments

Search

    Table of Contents