9.5.2、Spark Mllib_机器学习流程

1、读取数据

使用MLUtils工具读取向量数据
—LabeledPoint类型,包含Label(标签)和Features(特征数据)

//人体指标数据,标签,7个指标数据
// 0 1:3.9 2:3.0 3:2.3 4:81.4 5:61.3 6:51.0 7:87
//数据太多使用工具读取
val conf: SparkConf = new SparkConf()
conf.setMaster("local")
conf.setAppName("Demo02shili")
val sc: SparkContext = new SparkContext(conf)
/**
  * libsvm数据格式
  */
  //LabeledPoint类型,前面可以传入一个数据,是label标签和特征数据features
val dense_vec: RDD[LabeledPoint] = MLUtils.loadLibSVMFile(sc,"sparkproject/data/files.txt")
//dense_vec.foreach(println)

2、机器学习整体流程

(1)对数据经进行特征工程处理:将数据变成机器学习中的模型能够接收的数据
—(2)将数据切分为训练集和测试集(0.7,0.3)randomSplit()
—(3)选择合适的算法进行模型训练
—(4)将训练集带入模型进行训练
—(5)使用测试集验证模型(评估模型) 准确率、精确率、召回率、F1 score
—(6)模型评估后符合要求,将模型进行保存,以便下一次应用

object Demo03futter {
  def main(args: Array[String]): Unit = {
    /**
      * (1)对数据经进行特征工程处理
      * 将数据变成机器学习中的模型能够接收的数据
      */
    val spark: SparkSession = SparkSession
      .builder()
      .master("local[*]")
      .appName("Demo2Person")
      .getOrCreate()

    //读取数据失败,换方式读取数据
    //        val personDF: DataFrame = spark.read
    //          .format("libsvm")
    //          .load("sparkproject/data/files.txt")
    //    persDF.show()

    //导入隐式转换
    import spark.implicits._
    import org.apache.spark.sql.functions._
    val sc: SparkContext = spark.sparkContext

    val personRDD: RDD[LabeledPoint] = MLUtils.loadLibSVMFile(sc, "sparkproject/data/files.txt")
    //将RDD转成DataFrame
    val personDF: DataFrame = personRDD.toDF()

    /**
      * (2)将数据切分为训练集和测试集(0.7,0.3)
      */
    val splitArr: Array[Dataset[Row]] = personDF.randomSplit(Array(0.7, 0.3))
    val trainData: Dataset[Row] = splitArr(0) //训练集
    val testData: Dataset[Row] = splitArr(1) //测试集

    /**
      * (3)选择合适的算法进行模型训练(逻辑回归算法0和1结果)
      * 有Label =>监督学习 =>看结果连续或离散
      * =>连续:回归
      * =>离散:分类
      * 无Label  =>无监督学习
      */
    val llr: LogisticRegression = new LogisticRegression()
      .setMaxIter(10) //设置最大迭代次数
      .setFitIntercept(true) //有没有截距

    /**
      * (4)将训练集带入模型进行训练
      */

    val model: LogisticRegressionModel = llr.fit(trainData)

    /**
      * (5)使用测试集验证模型(评估模型)
      * 评估模型标准:
      * 准确率、精确率、召回率、F1 score
      */
    val resuDF: DataFrame = model.transform(testData)

    //将数据中原有的label同预测出来的结果 prediction 进行比较 计算模型的准确率
    resuDF.select(sum(when($"label" === $"prediction", 1).otherwise(0)) / count($"label"))
      .show()

    /**
      * (6)模型评估后符合要求,将模型进行保存,以便下一次应用
      * 一般要求准确率达到95%
      */
    model.save("sparpproject/data/model")
  }

}

3、使用模型

//加载模型
val model = LogisticRegressionModel.load("spark/data/mode")
//也可以使用transform
//传入向量进行预测
model.predict()

你可能感兴趣的:(Dcc09,Scala,&,Spark-原创,机器学习,spark,mllib)