zoukankan      html  css  js  c++  java
  • 学习进度笔记

    学习进度笔记26

     分类算法

    分类算法属于监督式学习,使用类标签已知的样本建立一个分类函数或分类模型,应用分类模型,能把数据库中的类标签未知的数据进行归类。分类在数据挖掘中是一项重要的任务,目前在商业上应用最多,常见的典型应用场景有流失预测、精确营销、客户获取、个性偏好等。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)

     回归算法

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

    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)

     聚类算法

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

    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)

     协同过滤

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

    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)

  • 相关阅读:
    小学四则运算编程实践
    熟悉编程语言
    俄罗斯方块游戏(修改为无敌版)
    2020-2021-1 20201212《信息安全专业导论》第八周学习总结
    如何学好编程
    python day 4 turtle
    python day 3
    20191206《信息安全专业导论》第五周学习总结
    20191206《信息安全专业导论》第四周学习总结
    20191206《信息安全专业导论》第三周学习总结
  • 原文地址:https://www.cnblogs.com/xueqiuxiang/p/14467005.html
Copyright © 2011-2022 走看看