如何分析K-means Clustering ,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名申請(qǐng)、網(wǎng)站空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、斗門(mén)網(wǎng)站維護(hù)、網(wǎng)站推廣。
一:算法
K-means 算法是機(jī)器學(xué)習(xí) 聚類(lèi)算法中很常用,也是最基本的一種算法。聚類(lèi)算法屬于無(wú)監(jiān)督學(xué)習(xí)算法。算法的步驟分為以下兩步:1,根據(jù)分組大小K的值,找出K個(gè)中心點(diǎn),而這時(shí)候其他點(diǎn)也根據(jù)距離中心點(diǎn)的距離劃分給這個(gè)中心點(diǎn)。2,找出每個(gè)cluster最優(yōu)的中心點(diǎn),重新分配點(diǎn),并迭代。
二:Spark MLlib
Spark MLlib 提供了K-means算法的實(shí)現(xiàn)。
數(shù)據(jù)來(lái)源
數(shù)據(jù)來(lái)源于KDD CUP網(wǎng)站,這些數(shù)據(jù)是網(wǎng)絡(luò)連接的數(shù)據(jù),下載
找到data -> kddcup.data.zip 并下載。
數(shù)據(jù)每行格式如下:
0,tcp,http,SF,215,45076, 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1, 0.00,0.00,0.00,0.00,1.00,0.00,0.00,0,0,0.00, 0.00,0.00,0.00,0.00,0.00,0.00,0.00,normal.
除了最后一個(gè)為label外,其余的都是features。label可能并不準(zhǔn)確,這些label僅僅標(biāo)示能發(fā)現(xiàn)的異常,但是k-means卻能找到未知的異常。
2.讀取數(shù)據(jù)
val rawDataPath = "Your kddcup.data.txt Path"
val rawData = sc.textFile(rawDataPath)
val labelsAndData = rawData.flatMap { line =>
val buffer = line.split(',').toBuffer
if (buffer.length == 42) {
buffer.remove(1, 3)
val label = buffer.remove(buffer.length - 1)
val vector = Vectors.dense(buffer.map(_.toDouble).toArray)
Some(label, vector)
} else {
None
}
}數(shù)據(jù)除掉了第2,3,4列,最后一列數(shù)據(jù)。
3. K-Means算法
val kmeans = new KMeans() kmeans.setK(k) //默認(rèn)的K為2 kmeans.setRuns(10) //找尋中心點(diǎn)運(yùn)行次數(shù) kmeans.setEpsilon(1.0e-6) //找尋中心點(diǎn)每次變化距離,越小越遠(yuǎn) val model = kmeans.run(data)
使用生成的model并聚類(lèi)
val clusterLabelCount = labelsAndData.map { case (label,datum) =>
val cluster = model.predict(datum)
(cluster,label)
}.countByValue
clusterLabelCount.toSeq.sorted.foreach {case ((cluster,label),count) =>
println(f"$cluster%1s$label%18s$count%8s")
}4.如何選擇K
K的選擇是個(gè)問(wèn)題,正常說(shuō)來(lái),K值越大,聚類(lèi)的效果越好。想象下,如果每個(gè)點(diǎn)都是單獨(dú)的一個(gè)類(lèi)。。
另外,我們可以使用其他點(diǎn)距離中心點(diǎn)的距離來(lái)查看聚類(lèi)的效果:
def distance(a: Vector, b: Vector) = {
math.sqrt(a.toArray.zip(b.toArray).map(p => p._1 - p._2).map(p => p*p).sum)
}
def distToCentroid(datum: Vector, model: KMeansModel) = {
val cluster = model.predict(datum)
val centroid = model.clusterCenters(cluster)
distance(centroid, datum)
}
def clusteringScore(data: RDD[Vector], k: Int) = {
val kmeans = new KMeans()
kmeans.setK(k)
kmeans.setRuns(10)
kmeans.setEpsilon(1.0e-6)
val model = kmeans.run(data)
data.map(datum => distToCentroid(datum, model)).mean()
}
(30 to 150 by 10 ).map(k => clusteringScore(data,k)).foreach(println)有了評(píng)估,我們可以依次查看K的大小對(duì)聚類(lèi)的影響。
關(guān)于如何分析K-means Clustering 問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
文章標(biāo)題:如何分析K-meansClustering
標(biāo)題URL:http://chinadenli.net/article22/ppcecc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷(xiāo)推廣、服務(wù)器托管、、商城網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)