龙空技术网

Spark MLlib KMeans聚类算法

ailx10 52

前言:

此刻兄弟们对“kmeans 调参”大概比较注意,看官们都需要剖析一些“kmeans 调参”的相关内容。那么小编也在网上搜集了一些关于“kmeans 调参””的相关内容,希望小伙伴们能喜欢,姐妹们快快来了解一下吧!

一、KMeans聚类算法原理

KMeans算法的基本思想是物以类聚,人以群分。做法比较简单,初始化随机给定的 K 个簇中心,按照最邻近原则把样本分到各个簇中,然后计算每个簇的质心作为新的簇中心点,一直迭代,达到稳定的分类效果。

这里只需要计算每一个点,到每个聚类中心的距离,把这个点划分到最小距离的那个簇类中,很容易就完成了第一轮计算;然后,计算每个簇类所有点的坐标平均值,作为新的中心点。好,这就是完整的一轮,剩下的就是迭代计算了~

看了原理,就感觉KMeans真的很简单啊。从图中可以看到,这个 K 的取值,真的很灵性啊,如果没有选好,那么分类的效果就不准确了。比如分成2类,那么中间的黄色节点和蓝色节,可能一半划分到左边,一半划分到右边,所以,这种AI算法调参也是一个谜啊~

ailx10

网络安全优秀回答者

网络安全硕士

二、KMeans聚类算法实战下载地址:github机器学习数据集里面就6行,我扩充一下

数据分成2类,前三个是一类,后三个是一类~

import org.apache.log4j.{Level, Logger}import org.apache.spark.SparkContext._import org.apache.spark.SparkContextimport org.apache.spark.SparkConfimport org.apache.spark.mllib.classification.{LogisticRegressionWithLBFGS, NaiveBayes, NaiveBayesModel, SVMWithSGD}import org.apache.spark.mllib.clustering.KMeansimport org.apache.spark.mllib.evaluation.MulticlassMetricsimport org.apache.spark.mllib.util.{KMeansDataGenerator, LinearDataGenerator, LogisticRegressionDataGenerator, MLUtils}import org.apache.spark.mllib.regression.{LabeledPoint, LinearRegressionWithSGD}import org.apache.spark.mllib.tree.DecisionTree//向量import org.apache.spark.mllib.linalg.Vector//向量集import org.apache.spark.mllib.linalg.Vectors//稀疏向量import org.apache.spark.mllib.linalg.SparseVector//稠密向量import org.apache.spark.mllib.linalg.DenseVector//实例import org.apache.spark.mllib.stat.{MultivariateStatisticalSummary, Statistics}//矩阵import org.apache.spark.mllib.linalg.{Matrix, Matrices}//索引矩阵import org.apache.spark.mllib.linalg.distributed.RowMatrix//RDDimport org.apache.spark.rdd.RDDobject WordCount {  def main(args: Array[String]) {    // 构建Spark 对象    Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)    val conf = new SparkConf().setAppName("HACK-AILX10").setMaster("local")    val sc = new SparkContext(conf)    // 读取样本数据    val datapath = "C:\\study\\spark\\kmeans_data.txt"    val data = sc.textFile(datapath)    val parsedData = data.map(s=>Vectors.dense(s.split(" ").map(_.toDouble))).cache()    //KMeans,并设置训练参数    val model = new KMeans()      .setInitializationMode("k-means||")      .setK(2)      .setMaxIterations(20)      .run(parsedData)    //对样本进行测试//    model.clusterCenters.foreach(println(_))    model.predict(parsedData).collect().foreach(println(_))    //计算测试误差    val wssse = model.computeCost(parsedData)    println("平均误差:"+wssse)    // 模型保存    val modelpath = "C:\\study\\spark\\kmeans"    model.save(sc,modelpath)    println("模型保存 ok")  }}

本篇完

标签: #kmeans 调参