大数据当中,算法是一个听起来就自带光环的词,而在行业当中,大数据算法工程师也可以说是企业亟需的高级技术人才。我们所熟悉的某条、某宝,这些APP的背后都离不开大数据算法的支持。今天的大数据专业课程培训分享,我们来讲讲K-Means聚类算法。
K-Means聚类算法,也称k均值聚类算法,是集简单和经典于一身的基于距离的聚类算法。在大数据当中,聚类算法本身也是非常普遍采用的,常常用在数据预处理上。
K-Means聚类算法核心思想
K-means聚类算法是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。
聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
TF-IDF算法实现过程示例
第一步,导入实验要用到的包工具
import org.apache.spark.ml.clustering.{KMeans,KMeansModel}
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.sql.SparkSession
引入spark.implicits._,以便于RDDs和DataFrames之间的隐式转换
import spark.implicits._
第二步,定义一个case class作为DataFrame每一个数据样本的数据类型。
case class model_examples (features: org.apache.spark.ml.linalg.Vector)
第三步,把定义完成的数据读入RDD结构中去,并通过RDD的隐式转换.toDF()方法完成RDD到DataFrame的转换(实验数据还是采用的):
val rawData = sc.textFile("file:///data/iris.data")
使用split方法取得每条数据的值,使用filter算子过滤掉类标签。
val df = rawData.map(line =>{ model_examples( Vectors.dense(line.split(",").filter(p => p.matches("\\d*(\\.?)\\d*")).map(_.toDouble)) )}).toDF()
第四步,得到过滤完的数据以后,通过ML包的固有流程:创建Estimator并调用其fit()方法来生成相应的Transformer对象
val kmeansmodel = new KMeans().
setK(3).
setFeaturesCol("features").
setPredictionCol("prediction").
fit(df)
第五步,使用transform()方法将存储在DataFrame中的给定数据集进行整体处理,生成带有预测簇标签的数据集
val results = kmeansmodel.transform(df)
第六步,使用collect()方法,该方法将DataFrame中所有的数据组织成一个Array对象进行返回
results.collect().foreach(row =>
{
println( row(0) + " is predicted as cluster " + row(1))
})
第七步,使用kmeansmodel类中自带的clusterCenters属性查看iris数据中所有类别的聚类中心情况
kmeansmodel.clusterCenters.foreach(
center => {
println("Clustering Center:"+center)
})
以上就是今天的大数据专业课程培训,K-Means聚类算法的简单介绍了。聚类算法是大数据算法当中的一个重要类别,K-Means聚类算法更是其中的重要知识点,必学必掌握。加米谷大数据,
成都大数据培训机构,大数据开发、大数据分析与挖掘,高级技能提升,本月正在招生中,课程大纲及学习资料可联系客服获取!