前言:
此刻兄弟们对“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 调参