多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
<mark>聚类算法属于非监督式学习</mark>,通常被用于探索性的分析,是根据<mark>物以类聚</mark>的原理,将本身没有类别的样本聚集成不同的组,这样的一组数据对象的集合叫做簇,并且对每一个这样的簇进行描述的过程。它的目的是使得属于同一簇的样本之间应该彼此相似,而不同簇的样本应该足够不相似,常见的典型应用场景有客户细分、客户研究、市场细分、价值评估。 <br/> MLlib 目前支持广泛使用的 KMeans聚类算法。 <br/> **1. KMeans聚类算法** (1)数据`$SPARK_HOME/data/mllib/kmeans_data.txt` ```txt 0.0 0.0 0.0 0.1 0.1 0.1 0.2 0.2 0.2 9.0 9.0 9.0 9.1 9.1 9.1 9.2 9.2 9.2 ``` (2)代码 ```scala import org.apache.spark.mllib.clustering.KMeansModel import org.apache.spark.mllib.clustering.KMeans import org.apache.spark.mllib.linalg.{Vector, Vectors} import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.rdd.RDD object KeamsAlgorithm { def main(args: Array[String]): Unit = { val conf: SparkConf = new SparkConf().setMaster("local[*]") .setAppName(this.getClass.getName) val sc: SparkContext = SparkContext.getOrCreate(conf) val data: RDD[String] = sc.textFile("F:/mllib/kmeans_data.txt") val parsedData: RDD[Vector] = data.map(s => Vectors.dense(s.split(" ").map(_.toDouble))).cache() // 迭代次数 val numIterations = 100 // 类簇个数 val numClusters = 2 // 模型训练 val clusters: KMeansModel = KMeans.train(parsedData, numClusters, numIterations) // 保存模型 // clusters.save(sc, "F:/mllib/model/kmeans") // 加载模型 // val clusters2:KMeansModel = KMeansModel.load(sc, "F:/mllib/model/kmeans") // 通过计算集合内误差平方和来评估聚类的有效性 val trainErr: Double = clusters.computeCost(parsedData) println(trainErr) // 0.11999999999994547 } } ```