spark機器學習之KMeans演算法實現

2022-07-26 21:00:20 字數 1757 閱讀 9931

一、概念

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...