当前位置: 首页 > news >正文

自己做网站 搜索功能开发媒体发稿平台

自己做网站 搜索功能开发,媒体发稿平台,蚌埠做网站的公司,网站开发感想一 KMeans简介 KMeans 是一个迭代求解的聚类算法,其属于 划分(Partitioning) 型的聚类方法,即首先创建K个划分,然后迭代地将样本从一个划分转移到另一个划分来改善最终聚类的质量。 ML包下的KMeans方法位于org.apach…

一 KMeans简介

KMeans 是一个迭代求解的聚类算法,其属于 划分(Partitioning) 型的聚类方法,即首先创建K个划分,然后迭代地将样本从一个划分转移到另一个划分来改善最终聚类的质量。

ML包下的KMeans方法位于org.apache.spark.ml.clustering包下,其过程大致如下:

1.根据给定的k值,选取k个样本点作为初始划分中心;
2.计算所有样本点到每一个划分中心的距离,并将所有样本点划分到距离最近的划分中心;
3.计算每个划分中样本点的平均值,将其作为新的中心;
循环进行2~3步直至达到最大迭代次数,或划分中心的变化小于某一预定义阈值

显然,初始划分中心的选取在很大程度上决定了最终聚类的质量,和MLlib包一样,ML包内置的KMeans类也提供了名为 KMeans|| 的初始划分中心选择方法,它是著名的 KMeans++ 方法的并行化版本,其思想是令初始聚类中心尽可能的互相远离,具体实现细节可以参见斯坦福大学的B Bahmani在PVLDB上的论文Scalable K-Means++,这里不再赘述。

二 实战

与MLlib版本的Kmeans教程相同,本文亦使用UCI数据集中的鸢尾花数据Iris进行实验,它可以在iris获取,Iris数据的样本容量为150,有四个实数值的特征,分别代表花朵四个部位的尺寸,以及该样本对应鸢尾花的亚种类型(共有3种亚种类型),如下所示:

5.1,3.5,1.4,0.2,setosa
...
5.4,3.0,4.5,1.5,versicolor
...
7.1,3.0,5.9,2.1,virginica
...

在使用前,引入需要的包:

import org.apache.spark.ml.clustering.{KMeans,KMeansModel}
import org.apache.spark.ml.linalg.{Vector,Vectors}

开启RDD的隐式转换:

import spark.implicits._

下文中,我们默认名为sparkSparkSession已经创建。

为了便于生成相应的DataFrame,这里定义一个名为model_instancecase class作为DataFrame每一行(一个数据样本)的数据类型。
注:因为是非监督学习,所以不需要数据中的label,只需要使用特征向量数据就可以。

scala> case class model_instance(features: org.apache.spark.ml.linalg.Vector)
defined class model_instance

在定义数据类型完成后,即可将数据读入RDD[model_instance]的结构中,并通过RDD的隐式转换.toDF()方法完成RDDDataFrame的转换:

val rawData = sc.textFile("file:///root/data/iris.txt")
rawData: org.apache.spark.rdd.RDD[String] = file:///root/data/iris.txt MapPartitionsRDD[220] at textFile at <console>:56scala> val df = rawData.map(line =>{ model_instance( Vectors.dense(line.split(",").filter(p => p.matches("\\d*(\\.?)\\d*")).map(_.toDouble)) )}).toDF()
df: org.apache.spark.sql.DataFrame = [features: vector]

MLlib版的教程类似,我们使用了filter算子,过滤掉类标签,正则表达式\\d*(\\.?)\\d*可以用于匹配实数类型的数字,\\d*使用了*限定符,表示匹配0次或多次的数字字符,\\.?使用了?限定符,表示匹配0次或1次的小数点。

在得到数据后,我们即可通过ML包的固有流程:创建Estimator并调用其fit()方法来生成相应的Transformer对象,很显然,在这里KMeans类是Estimator,而用于保存训练后模型的KMeansModel类则属于Transformer

scala> val kmeansmodel = new KMeans().setK(3).setFeaturesCol("features").setPredictionCol("prediction").fit(df)
kmeansmodel: org.apache.spark.ml.clustering.KMeansModel = kmeans_bdadcf53b52e

MLlib版本类似,ML包下的KMeans方法也有Seed(随机数种子)、Tol(收敛阈值)、K(簇个数)、MaxIter(最大迭代次数)、initMode(初始化方式)、initStep(KMeans||方法的步数)等参数可供设置,和其他的ML框架算法一样,用户可以通过相应的setXXX()方法来进行设置,或以ParamMap的形式传入参数,这里为了简介期间,使用setXXX()方法设置了参数K,其余参数均采用默认值

与MLlib中的实现不同,KMeansModel作为一个Transformer,不再提供predict()样式的方法,而是提供了一致性的transform()方法,用于将存储在DataFrame中的给定数据集进行整体处理,生成带有预测簇标签的数据集:

scala> val results = kmeansmodel.transform(df)
results: org.apache.spark.sql.DataFrame = [features: vector, prediction: int]

为了方便观察,我们可以使用collect()方法,该方法将DataFrame中所有的数据组织成一个Array对象进行返回:

scala> results.collect().foreach(row => {println( row(0) + " is predicted as cluster " + row(1))})
[5.1,3.5,1.4,0.2] is predicted as cluster 2
...
[6.3,3.3,6.0,2.5] is predicted as cluster 1
...
[5.8,2.7,5.1,1.9] is predicted as cluster 0
...scala> results.show()
+-----------------+----------+
|         features|prediction|
+-----------------+----------+
|[5.1,3.5,1.4,0.2]|         0|
|[4.9,3.0,1.4,0.2]|         0|
|[4.7,3.2,1.3,0.2]|         0|
|[4.6,3.1,1.5,0.2]|         0|
|[5.0,3.6,1.4,0.2]|         0|
|[5.4,3.9,1.7,0.4]|         0|
|[4.6,3.4,1.4,0.3]|         0|
|[5.0,3.4,1.5,0.2]|         0|
|[4.4,2.9,1.4,0.2]|         0|
|[4.9,3.1,1.5,0.1]|         0|
|[5.4,3.7,1.5,0.2]|         0|
|[4.8,3.4,1.6,0.2]|         0|
|[4.8,3.0,1.4,0.1]|         0|
|[4.3,3.0,1.1,0.1]|         0|
|[5.8,4.0,1.2,0.2]|         0|
|[5.7,4.4,1.5,0.4]|         0|
|[5.4,3.9,1.3,0.4]|         0|
|[5.1,3.5,1.4,0.3]|         0|
|[5.7,3.8,1.7,0.3]|         0|
|[5.1,3.8,1.5,0.3]|         0|
+-----------------+----------+
only showing top 20 rows

也可以通过KMeansModel类自带的clusterCenters属性获取到模型的所有聚类中心情况:

scala> kmeansmodel.clusterCenters.foreach(center => {println("Clustering Center:"+center)})
Clustering Center:[5.005999999999999,3.4180000000000006,1.4640000000000002,0.2439999999999999]
Clustering Center:[5.901612903225806,2.7483870967741932,4.393548387096774,1.433870967741935]
Clustering Center:[6.85,3.0736842105263147,5.742105263157893,2.071052631578947]

与MLlib下的实现相同,KMeansModel类也提供了计算 集合内误差平方和(Within Set Sum of Squared Error, WSSSE) 的方法来度量聚类的有效性,在真实K值未知的情况下,该值的变化可以作为选取合适K值的一个重要参考:

scala> kmeansmodel.computeCost(df)
res30: Double = 78.94084142614622

文章转载自:
http://ablastin.riewr.cn
http://balconied.riewr.cn
http://caramba.riewr.cn
http://anonaceous.riewr.cn
http://bx.riewr.cn
http://burstone.riewr.cn
http://balanceable.riewr.cn
http://absolvable.riewr.cn
http://appel.riewr.cn
http://bibitory.riewr.cn
http://calculus.riewr.cn
http://babbler.riewr.cn
http://catenary.riewr.cn
http://boob.riewr.cn
http://argyrodite.riewr.cn
http://bmta.riewr.cn
http://burstproof.riewr.cn
http://baniyas.riewr.cn
http://acupuncture.riewr.cn
http://ashman.riewr.cn
http://alliteration.riewr.cn
http://apartotel.riewr.cn
http://catholicism.riewr.cn
http://cerography.riewr.cn
http://catalanist.riewr.cn
http://bonhomie.riewr.cn
http://bierkeller.riewr.cn
http://challenger.riewr.cn
http://autocade.riewr.cn
http://ambiversion.riewr.cn
http://causse.riewr.cn
http://aphrodisiac.riewr.cn
http://cameroonian.riewr.cn
http://cheeky.riewr.cn
http://bursitis.riewr.cn
http://appellant.riewr.cn
http://ashimmer.riewr.cn
http://cardplaying.riewr.cn
http://chemic.riewr.cn
http://beja.riewr.cn
http://career.riewr.cn
http://barbarity.riewr.cn
http://blondine.riewr.cn
http://capucine.riewr.cn
http://barquentine.riewr.cn
http://antipathic.riewr.cn
http://applescript.riewr.cn
http://christianlike.riewr.cn
http://actuation.riewr.cn
http://aglet.riewr.cn
http://broadsheet.riewr.cn
http://abandoner.riewr.cn
http://blindly.riewr.cn
http://areologically.riewr.cn
http://agatha.riewr.cn
http://cannot.riewr.cn
http://barite.riewr.cn
http://anemochorous.riewr.cn
http://ataghan.riewr.cn
http://capitalize.riewr.cn
http://barostat.riewr.cn
http://beggar.riewr.cn
http://aceldama.riewr.cn
http://barmy.riewr.cn
http://bridgeable.riewr.cn
http://aspergill.riewr.cn
http://attainture.riewr.cn
http://barbellate.riewr.cn
http://centering.riewr.cn
http://buttocks.riewr.cn
http://birchen.riewr.cn
http://botany.riewr.cn
http://censure.riewr.cn
http://bathychrome.riewr.cn
http://actual.riewr.cn
http://causal.riewr.cn
http://chrysographed.riewr.cn
http://achilles.riewr.cn
http://arbo.riewr.cn
http://batholithic.riewr.cn
http://arthrodesis.riewr.cn
http://alpheus.riewr.cn
http://aglow.riewr.cn
http://bannerline.riewr.cn
http://bally.riewr.cn
http://admittable.riewr.cn
http://ailment.riewr.cn
http://anisocoria.riewr.cn
http://bakelite.riewr.cn
http://ail.riewr.cn
http://cackle.riewr.cn
http://aboriginal.riewr.cn
http://bother.riewr.cn
http://agnosticism.riewr.cn
http://chevroler.riewr.cn
http://bofors.riewr.cn
http://autochanger.riewr.cn
http://autohypnosis.riewr.cn
http://cabinetmaking.riewr.cn
http://caulomic.riewr.cn
http://www.tj-hxxt.cn/news/37012.html

相关文章:

  • 天津 网站制作游戏推广公司好做吗
  • 广州有什么好玩的室内2021百度seo
  • 网站备案 核验单网络营销和电子商务的区别
  • 国际国内时事新闻优化网站价格
  • 网站设计效果专业乐云seo新站点seo联系方式
  • seo技术中心独立站seo搜索优化
  • 公司的个人网站怎么做百度竞价入门教程
  • 南宁网站seo推广公司电脑版百度入口
  • 网站路径问题阿里云建网站
  • 三亚网上商城资源网站排名优化seo
  • 化州网站建设网站流量统计分析工具
  • 提供网站建设收费标准seo简单优化操作步骤
  • 两学一做登录网站百度云网盘免费资源
  • 聊城做企业网站网站推广开户
  • 网站 备案号查询外链交换平台
  • 潍坊市建设厅网站世界杯数据分析
  • 建设银行网站怎么交学费torrentkitty磁力官网
  • 凡科建站官网 网络服务公司员工培训内容有哪些
  • 企业网站制作策划书网站权重查询
  • 做网站建设的价格网店推广实训系统
  • 上海做网站报价产品推广平台
  • 网页设计制作个人简历代码seo关键词查询排名软件
  • 淄博服装网站建设网站排名费用
  • 涂鸦网站建设福州seo网址优化公司
  • 网站不用工具开发建设惠州seo计费管理
  • 腾云网站建设西安网站建设制作公司
  • 网站素材 下载软文外链代发
  • 郑州高端定制建设网站指数基金怎么买
  • 学校网站 建设措施重庆百度推广开户
  • 有没有必要为B2B网站做外链优化推广联盟