从 Spark 1.5+ 开始,可以使用 setInitialModel 在 Scala 中设置初始模型,这需要 KMeansModel:
import org.apache.spark.mllib.clustering.{KMeans, KMeansModel}
import org.apache.spark.mllib.linalg.Vectors
val data = sc.parallelize(Seq(
"[0.0, 0.0]", "[1.0, 1.0]", "[9.0, 8.0]", "[8.0, 9.0]"
)).map(Vectors.parse(_))
val initialModel = new KMeansModel(
Array("[0.6, 0.6]", "[8.0, 8.0]").map(Vectors.parse(_))
)
val model = new KMeans()
.setInitialModel(initialModel)
.setK(2)
.run(data)
和 PySpark 1.6+ 使用 initialModel 参数到 train 方法:
from pyspark.mllib.clustering import KMeansModel, KMeans
from pyspark.mllib.linalg import Vectors
data = sc.parallelize([
"[0.0, 0.0]", "[1.0, 1.0]", "[9.0, 8.0]", "[8.0, 9.0]"
]).map(Vectors.parse)
initialModel = KMeansModel([
Vectors.parse(v) for v in ["[0.6, 0.6]", "[8.0, 8.0]"]])
model = KMeans.train(data, 2, initialModel=initialModel)
如果这些方法中的任何一个不起作用,则表示您使用的是较早版本的 Spark。