spark-机器学习实践-K近邻应用实践一
2016-09-18 22:46
253 查看
http://www.cnblogs.com/gnool/p/5883209.html
K近邻应用-异常检测应用原理:
根据数据样本进行KMeans机器学习模型的建立,获取簇心点,以簇为单位,离簇心最远的第五个点的距离为阈值,大于这个值的为异常点,即获得数据异常。
如图:
数据样本:
可视化展示:
我们将数据样本投射到可视化环境中的可以看到数据呈现以下图形:
数据被分为3簇,在我们训练模型是K值为3簇。由于数据非常集中,数据量也非常少,同时特征向量为二维特征向量,故投影成平面图形我们一眼可以看出数据分为几簇,当样本数据的特征值很多时,就得靠计算得出K值(这里先不提)
应用代码实践:
//获取样本数据 val rawData = sc.textFile("D:/logdata/kmeans.txt") //将样本数据转化为模型可操作的向量集 val labelAndData = rawData.map { line => val buffer = line.split(',').toBuffer val label = buffer.remove(0) val vector = Vectors.dense(buffer.map(_.toDouble).toArray) (label, vector) } //将样本数据向量集缓存 val data = labelAndData.values.cache() //建立Kmeans学习模型 val kmeans = new KMeans() kmeans.setK(3) //训练数据 val model = kmeans.run(data) //打印簇心点 model.clusterCenters.foreach(println) //欧氏距离的计算函数 def distance(a: Vector, b: Vector): Double = { math.sqrt(a.toArray.zip(b.toArray).map(p => p._1 - p._2).map(d => d * d).sum) } //计算向量到模型簇心点的距离 def distToCentroid(datum: Vector, model: KMeansModel) = { val cluster = model.predict(datum) val centroid = model.clusterCenters(cluster) distance(centroid, datum) } //计算所有点到簇心点的距离集合 val distances = data.map(datum => distToCentroid(datum, model) ) //获取最大的第五个值为阈值 val threshold = distances.top(5).last //测试数据获取 val testRawData = sc.textFile("D:/logdata/kmeans") val testLabelAndData = testRawData.map { line => val buffer = line.split(',').toBuffer val label = buffer.remove(0) val vector = Vectors.dense(buffer.map(_.toDouble).toArray) (label, vector) } //将测试数据集缓存 val testData = testLabelAndData.values.cache() //异常数据集过滤并打印结果 val anomalies=testData.filter { x => distToCentroid(x, model) > threshold }.collect().foreach(println)
计算结果:
[5.525200003000001,5.494100009000001]
[2.522222221212122,2.512020205050505]
[8.483267326732673,8.49178217821782]
异常值:
[6.73,6.58]
[6.62,6.04]
[6.99,6.66]
[6.59,6.38]
[6.42,6.74]
[6.37,6.59]
[6.84,6.03]
[6.84,6.03]
[6.9700003,6.5299997]
[6.03,6.31]
[6.18,6.27]
[6.84,6.81]
[6.3,6.93]
[6.49,6.23]
[6.16,6.67]
[6.56,6.77]
[6.57,6.32]
[6.37,6.55]
[6.68,6.07]
[6.8,6.4]
[6.91,6.44]
作者:舆-风动名扬 出处:http://www.cnblogs.com/gnool/ © 作者和博客园,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】想跟我一起进步么?那就【关注】我吧。
分类: 机器学习
相关文章推荐
- 用Python从零实现贝叶斯分类器的机器学习的教程
- My Machine Learning
- 机器学习---学习首页 3ff0
- Spark机器学习(一) -- Machine Learning Library (MLlib)
- 反向传播(Backpropagation)算法的数学原理
- 关于SVM的那点破事
- 也谈 机器学习到底有没有用 ?
- #ML-SDN
- TensorFlow人工智能引擎入门教程之九 RNN/LSTM循环神经网络长短期记忆网络使用
- TensorFlow人工智能引擎入门教程之十 最强网络 RSNN深度残差网络 平均准确率96-99%
- TensorFlow人工智能引擎入门教程所有目录
- Tensorflow 杂记
- 如何用70行代码实现深度神经网络算法
- 机器学习算法比较
- 量子计算机编程原理简介 和 机器学习
- 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)
- 已经证实提高机器学习模型准确率的八大方法
- 一文读懂机器学习
- 初识机器学习算法有哪些?
- 机器学习相关的库和工具