06大数据内存计算spark系列贴-mllib 机器学习

   (原文地址: http://blog.csdn.net/codemosi/article/category/2777045,转载麻烦带上原文地址。hadoop hive hbase mahout storm spark kafka flume,等连载中,做个爱分享的人 奋斗)
商业理解 - 数据理解 - 数据准备 - 建立模型 - 模型评估 - 模型发布

      数据挖掘是从海量数据中挖掘出有用的商业价值,如客户分类,新闻分类等。挖掘类型分为,聚类,分类,预测,关联。4种类型的挖掘任务。数据挖掘的过程 原始数据 --》 抽取特征向量  --》  训练模型 -》评估模型 -》 最终模型。
      mllib是spark提供的用于数据挖掘的 机器学习算法库。mllib在数据挖掘中,充当  训练模型 -》评估模型 -》 最终模型。后3个过程的角色。

mllib 1.1包含了以下算法:

分类算法 (数据挖掘主要的分类算法有:1.逻辑回归,2.支持向量机,3.决策树,4.朴素贝叶斯,5.神经网络,6.K近邻),spark的mllib基本都实现了
SVMs 3
支持向量机
logistic regression
逻辑回归
decision trees
决策树 1
naive Bayes
朴素贝叶斯 9

预测算法
linear regression
线性回归

协同过滤算法(只实现了一个ALS
alternating least squares (ALS)
交替最小二乘(ALS)
聚类算法(只实现了一个kmeas算法) k-means 2

Dimensionality reduction (没听过,不知道干啥的)
降维
singular value decomposition (SVD)
奇异值分解(SVD)
principal component analysis (PCA)
主成分分析(PCA)

mllib的KMeans算法API说明
聚类算法从使用上分三步,1:训练模型,2:检验模型,3:使用模型。

1 模型训练接口

/**
   * Trains a k-means model using the given set of parameters.
   *
   * @param data training points stored as `RDD[Array[Double]]`
   * @param k number of clusters
   * @param maxIterations max number of iterations
   * @param runs number of parallel runs, defaults to 1. The best model is returned.
   * @param initializationMode initialization model, either "random" or "k-means||" (default).
   */
def train( data: RDD[Vector],//数据集
      k: Int,//聚类的数量
      maxIterations: Int,//最大迭代次数
      runs: Int,//
      initializationMode: String): KMeansModel = {
    new KMeans().setK(k)
      .setMaxIterations(maxIterations)
      .setRuns(runs)
      .setInitializationMode(initializationMode)
      .run(data)
  }

2 模型评估接口(距离平方和)  /**
   * Return the K-means cost (sum of squared distances of points to their nearest center) for this
   * model on the given data.
   */
  def computeCost(data: RDD[Vector]): Double = {
    val centersWithNorm = clusterCentersWithNorm
    val bcCentersWithNorm = data.context.broadcast(centersWithNorm)
    data.map(p => KMeans.pointCost(bcCentersWithNorm.value, new BreezeVectorWithNorm(p))).sum()
  }

3 预测接口
/** Returns the cluster index that a given point belongs to. */
  def predict(point: Vector): Int = {
    KMeans.findClosest(clusterCentersWithNorm, new BreezeVectorWithNorm(point))._1
  }

mllib的kmeans算法,做聚类应用

假设有文本数据kmeans.txt,记录的是用户的信息,每行代表一个用户的用户数据的特征向量,各个数据以tab符隔开,文本的内容如下

2 3 4 5 6
5 1 6 7 3
4 6 1 3 6
3 5 7 1 6
5 1 6 3 3
2 3 6 2 6

//0 准备spark上下文环境
val conf = new SparkConf().setAppName(s"RDC KMeans")
    val sc = new SparkContext(conf)

//1 准备数据,一共有6个数据
    val examples = sc.textFile("/usr/rdc/kmeans.txt").map { line =>  Vectors.dense(line.split(' ').map(_.toDouble))}.cache()

//2 模型训练,将6个数据分为 3 聚类
    val model = KMeans. train(examples , 3, 20)

//3 评估模型,计算距离平方和,这个cost越小,则聚类的结果越准确。
    val cost = model. computeCost(examples)

//3 预测,假设此时来了一个新的用户数据的特征向量(4 4 4 4 4),根据训练好的3个聚类的模型做预测,返回值代表所属的类型,
    val type = model. predict(Vectors.dense("4 4 4 4 4".split(' ').map(_.toDouble)))//如返回值type 为1,说明(4 4 4 4 4)属于第二类。3个聚类 (0,1,2),从0开始算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值