一、概念
kmeans基於劃分的聚類方法
給定資料樣本集sample和應該劃分的類書k,對樣本資料sample進行聚類,最終形成k個聚類,其相似的度量是某條資料與中心點的「距離」(距離可分為絕對距離、歐氏距離、閔可夫斯基距離。這裡說的距離是歐式距離,歐氏距離也稱歐幾里得距離,它是在m維空間中兩個點之間的真實距離)。
二、演算法實現
完整**:
package operator.operator結果展示import org.apache.spark.mllib.clustering.kmeans
import org.apache.spark.mllib.linalg.
import org.apache.spark.
import scala.io.source
import scala.util.random
object kmean
}//上面已引入kmeans的演算法包,設定模型引數k,最大迭代次數和訓練次數
val numclusters = 5
val numiterations = 10
val numruns = 3
var clusterindex: int = 0
val clustermodel = kmeans.train(parsetestdata, numclusters, numiterations, numruns)
// evaluate clustering by computing within set sum of squared errors(通過計算平方誤差的總和來評估聚類結果)
val clustermodelwssse = clustermodel.computecost(parsetestdata)
println("wssse for model = " + clustermodelwssse)
//列印中心點
println("cluster centers: ")
// clustermodel.clustercenters.foreach(println)
clustermodel.clustercenters.foreach(x => )
//case class是一種樣例類,用於模式匹配
case class matchdata(vec: vector, classs: int)
//列印原資料+類
val kmeanstestresult = parsetestdata.map(vec => matchdata(vec, clustermodel.predict(vec)))
//println(kmeanstestresult.filter(_.classs==0).count())//統計某類的數量,先filter:篩選集合元素,再進行統計
//統計每類的數量(步驟:將kmeanstestresult中的classs進行對映成鍵值對(key/value)結構),再進行分組統計
kmeanstestresult.map(line => (line.classs, 1)).reducebykey(_ + _).foreach(println)}}
三、演算法優化
k折交叉驗證找出合理的k值,損失值
機器學習實戰之KMean
kmeans演算法步驟 1.確定聚類個數k 2.隨機選擇k個質心 3.對於所有樣本點 根據樣本點到質心的距離分類 4.分類完成後,如果所有樣本點的類別沒有變化,演算法結束 如果有變化,重新計算質心 當前類中樣本的平均值 回到步驟3 幾個問題 1.聚類個數k的確定 2.初始時質心的選取 3.容易出現區...
機器學習之K Mean聚類演算法
知識點 coding utf 8 import numpy as np import pandas as pd from sklearn.cluster import kmeans 非監督學習 聚類演算法 1 隨機再資料當中抽取三個樣本,當作三個類別的中心點 k1,k2,k3 2 計算其餘的點分別到...
機器學習(7)K mean聚類
聚類屬於非監督學習,k mean是聚類中經典演算法。非監督學習即是只有樣本沒有標籤。訓練資料集 其中x i rnx i rn 和聚類數量kk 將資料劃分為kk類 演算法輸出是kk個聚類中心 1,2,k 1,2,k和每個資料點x i x i 所在的分類。步驟 1,初始化k個聚類中心 1,2,k 1,2...