Spark中常用的算法:

3.2.1 分类算法

分类算法属于监督式学习,使用类标签已知的样本建立一个分类函数或分类模型,应用分类模型,能把数据库中的类标签未知的数据进行归类。分类在数据挖掘中是一项重要的任务,目前在商业上应用最多,常见的典型应用场景有流失预测、精确营销、客户获取、个性偏好等。MLlib 目前支持分类算法有:逻辑回归、支持向量机、朴素贝叶斯和决策树。

案例:导入训练数据集,然后在训练集上执行训练算法,最后在所得模型上进行预测并计算训练误差。

import org.apache.spark.SparkContext

import org.apache.spark.mllib.classification.SVMWithSGD

import org.apache.spark.mllib.regression.LabeledPoint

 

// 加载和解析数据文件

val data = sc.textFile("mllib/data/sample_svm_data.txt")

val parsedData = data.map { line =>

  val parts = line.split(' ')

  LabeledPoint(parts(0).toDouble, parts.tail.map(x => x.toDouble).toArray)

}

 

// 设置迭代次数并进行进行训练

val numIterations = 20

val model = SVMWithSGD.train(parsedData, numIterations)

 

// 统计分类错误的样本比例

val labelAndPreds = parsedData.map { point =>

val prediction = model.predict(point.features)

(point.label, prediction)

}

val trainErr = labelAndPreds.filter(r => r._1 != r._2).count.toDouble / parsedData.count

println("Training Error = " + trainErr)

3.2.2 回归算法

回归算法属于监督式学习,每个个体都有一个与之相关联的实数标签,并且我们希望在给出用于表示这些实体的数值特征后,所预测出的标签值可以尽可能接近实际值。MLlib 目前支持回归算法有:线性回归、岭回归、Lasso和决策树。

案例:导入训练数据集,将其解析为带标签点的RDD,使用 LinearRegressionWithSGD 算法建立一个简单的线性模型来预测标签的值,最后计算均方差来评估预测值与实际值的吻合度。

import org.apache.spark.mllib.regression.LinearRegressionWithSGD

import org.apache.spark.mllib.regression.LabeledPoint

 

// 加载和解析数据文件

val data = sc.textFile("mllib/data/ridge-data/lpsa.data")

val parsedData = data.map { line =>

  val parts = line.split(',')

  LabeledPoint(parts(0).toDouble, parts(1).split(' ').map(x => x.toDouble).toArray)

}

 

//设置迭代次数并进行训练

val numIterations = 20

val model = LinearRegressionWithSGD.train(parsedData, numIterations)

 

// 统计回归错误的样本比例

val valuesAndPreds = parsedData.map { point =>

val prediction = model.predict(point.features)

(point.label, prediction)

}

val MSE = valuesAndPreds.map{ case(v, p) => math.pow((v - p), 2)}.reduce(_ + _)/valuesAndPreds.count

println("training Mean Squared Error = " + MSE)

3.2.3 聚类算法

聚 类算法属于非监督式学习,通常被用于探索性的分析,是根据“物以类聚”的原理,将本身没有类别的样本聚集成不同的组,这样的一组数据对象的集合叫做簇,并 且对每一个这样的簇进行描述的过程。它的目的是使得属于同一簇的样本之间应该彼此相似,而不同簇的样本应该足够不相似,常见的典型应用场景有客户细分、客 户研究、市场细分、价值评估。MLlib 目前支持广泛使用的KMmeans聚类算法。

案例:导入训练数据集,使用 KMeans 对象来将数据聚类到两个类簇当中,所需的类簇个数会被传递到算法中,然后计算集内均方差总和 (WSSSE),可以通过增加类簇的个数 k 来减小误差。 实际上,最优的类簇数通常是 1,因为这一点通常是WSSSE图中的 “低谷点”。

import org.apache.spark.mllib.clustering.KMeans

 

// 加载和解析数据文件

val data = sc.textFile("kmeans_data.txt")

val parsedData = data.map( _.split(' ').map(_.toDouble))

// 设置迭代次数、类簇的个数

val numIterations = 20

val numClusters = 2

 

// 进行训练

val clusters = KMeans.train(parsedData, numClusters, numIterations)

 

// 统计聚类错误的样本比例

val WSSSE = clusters.computeCost(parsedData)

println("Within Set Sum of Squared Errors = " + WSSSE)

3.2.4 协同过滤

协同过滤常被应用于推荐系统,这些技术旨在补充用户-商品关联矩阵中所缺失的部分。MLlib当前支持基于模型的协同过滤,其中用户和商品通过一小组隐语义因子进行表达,并且这些因子也用于预测缺失的元素。

案例:导入训练数据集,数据每一行由一个用户、一个商品和相应的评分组成。假设评分是显性的,使用默认的ALS.train()方法,通过计算预测出的评分的均方差来评估这个推荐模型。

import org.apache.spark.mllib.recommendation.ALS

import org.apache.spark.mllib.recommendation.Rating

 

// 加载和解析数据文件

val data = sc.textFile("mllib/data/als/test.data")

val ratings = data.map(_.split(',') match {

case Array(user, item, rate) => Rating(user.toInt, item.toInt, rate.toDouble)

})

 

// 设置迭代次数

val numIterations = 20

val model = ALS.train(ratings, 1, 20, 0.01)

 

// 对推荐模型进行评分

val usersProducts = ratings.map{ case Rating(user, product, rate) => (user, product)}

val predictions = model.predict(usersProducts).map{

case Rating(user, product, rate) => ((user, product), rate)

}

val ratesAndPreds = ratings.map{

case Rating(user, product, rate) => ((user, product), rate)

}.join(predictions)

val MSE = ratesAndPreds.map{

case ((user, product), (r1, r2)) => math.pow((r1- r2), 2)

}.reduce(_ + _)/ratesAndPreds.count

println("Mean Squared Error = " + MSE)

摘自:http://www.cnblogs.com/shishanyuan/p/4747761.html

最新文章

  1. C#组件系列———又一款日志组件:Elmah的学习和分享
  2. asp.net mvc 在视图中获取控制器与动作的名称
  3. CPU利用率异常的分析思路和方法交流探讨
  4. javascript日期验证:填写的日期大于等于当前日期
  5. AVAudioPlayer播放并实现了后台播放和远程控制
  6. POJ1947 Rebuilding Roads(树形DP)
  7. aspcms标签使用经验
  8. 【BZOJ 2243】染色 - 树链剖分+线段树
  9. BZOJ 1058 报表统计 (STL)
  10. Maven之(九)依赖关系
  11. Swiper --移动端触摸滑动插件
  12. 深入理解java虚拟机_第三章(上)----->垃圾收集器与内存分配策略
  13. 记录ok6410 jlink 命令行调试uboot
  14. checkbox操作判断 Jquery选择器
  15. re正则匹配
  16. Python开发经验汇总
  17. 工具-github在linux下面没有git push报错
  18. C语言 · 9-1九宫格
  19. javascript的函数,定义
  20. 转:kafka入门

热门文章

  1. Laravel5.1学习笔记6 响应
  2. Android学习——动态注册监听网络变化
  3. 时序分析:ARIMA模型(非平稳时间序列)
  4. C#异步Async、Task、Await
  5. beetl模板入门例子
  6. cocos creator 底部按钮touch延迟
  7. Vue select默认选中第一个
  8. [kuangbin带你飞]专题1-23题目清单总结
  9. struts2中<jsp:forward>跳转时报404错误的问题
  10. android 权限问题分析