最近公司需要用到机器学习做项目,本菜鸟就得去研究研究怎么回事
这个案例是网上找的一个聚类算法的案例,自己敲了敲,写写
先上训练数据
0.0 | 0.0 | 0.0 |
0.1 | 0.1 | 0.1 |
0.2 | 0.2 | 0.2 |
5.0 | 5.0 | 5.0 |
5.1 | 5.1 | 5.1 |
5.2 | 5.2 | 5.2 |
9.0 | 9.0 | 9.0 |
9.1 | 9.1 | 9.1 |
9.2 | 9.2 | 9.2 |
object JuleiMLdemo { def main(args: Array[String]): Unit = { //聚类算法 //屏蔽不必要的日志 Logger.getLogger("org.apache.spark").setLevel(Level.ERROR) //设置运行环境 val sparkConf = new SparkConf().setMaster("local[4]").setAppName("MLdemo") val sc = new SparkContext(sparkConf) //加载 解析本地文件 val data = sc.textFile("E:\\YBLdata\\MLdata.txt",1) val parseData = data.map(s=>Vectors.dense(s.split(' ').map(_.toDouble))) //将数据聚类,4个类,迭代次数20次,进行模型训练 val numClusters=3 val numIterations=100 val model = KMeans.train(parseData,numClusters,numIterations) //数据模型的中心点 for (c<-model.clusterCenters){ println(" "+c.toString) } //使用代价函数评估数据模型 val cost = model.computeCost(parseData) println(cost) //单点数据进行模型测试 println(model.predict(Vectors.dense("6 6 6".split(' ').map(_.toDouble)))) //交叉评估,返回结果(返回的是属于哪一个类的类型号) val testdata = data.map(s => Vectors.dense(s.split(' ').map(_.toDouble))) model.predict(testdata).foreach(println) //交叉评估,返回数据集和结果(返回当前数据集和类型号) val map = data.map { line => val linevector = Vectors.dense(line.split(' ').map(_.toDouble)) val res = model.predict(linevector) (line, res) } map.foreach(println) // } }运行结果
[0.1,0.1,0.1]
[9.1,9.1,9.1] =>数据模型中心点
[5.1,5.1,5.1]
0.1800000000000046 代价函数值
2 =>测试(6,6,6)属于哪一类
0
0
0
1
1 =>每一行数据对应的类 即 聚类结果
1
2
2
2
(0.0 0.0 0.0,0)
(0.1 0.1 0.1,0)
(0.2 0.2 0.2,0)
(9.0 9.0 9.0,1)
(9.1 9.1 9.1,1) =>数据集和对应的聚类结果
(9.2 9.2 9.2,1)
(5.0 5.0 5.0,2)
(5.1 5.1 5.1,2)
(5.2 5.2 5.2,2)