Примеры кода на Scala — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 31: Строка 31:
 
     libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"
 
     libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"
 
     libraryDependencies += "org.apache.spark" %% "spark-mllib" % "2.4.0" % "runtime"
 
     libraryDependencies += "org.apache.spark" %% "spark-mllib" % "2.4.0" % "runtime"
Пример линейной регрессии c применением org.apache.spark.ml.regression.LinearRegression<ref>[https://spark.apache.org/docs/latest/ml-classification-regression.html#linear-regression Spark ML, LinearRegression]</ref>:
+
Пример линейной регрессии c применением org.apache.spark.ml.regression.LinearRegression<ref>[https://spark.apache.org/docs/latest/ml-classification-regression.html#linear-regression Spark, LinearRegression]</ref>:
 
   val training = spark.read.format("libsvm")
 
   val training = spark.read.format("libsvm")
 
     .load("linear_regression.txt")
 
     .load("linear_regression.txt")
Строка 52: Строка 52:
 
     libraryDependencies += "com.github.haifengl" %% "smile-scala" % "1.5.2"
 
     libraryDependencies += "com.github.haifengl" %% "smile-scala" % "1.5.2"
 
Пример ридж и лассо регрессии c применением smile.regression<ref>[https://haifengl.github.io/smile/regression.html Smile, Regression]</ref>:
 
Пример ридж и лассо регрессии c применением smile.regression<ref>[https://haifengl.github.io/smile/regression.html Smile, Regression]</ref>:
 +
  import smile.data.{AttributeDataset, NumericAttribute}
 +
  import smile.read
 +
  import smile.regression.{LASSO, RidgeRegression, lasso, ridge}
 +
 
   val data: AttributeDataset = read.table("regression.txt", delimiter = " ", response = Some((new NumericAttribute("class"), 0)))
 
   val data: AttributeDataset = read.table("regression.txt", delimiter = " ", response = Some((new NumericAttribute("class"), 0)))
 
   val x: Array[Array[Double]] = data.x()
 
   val x: Array[Array[Double]] = data.x()
Строка 59: Строка 63:
 
   println(ridgeRegression)
 
   println(ridgeRegression)
 
   println(lassoRegression)
 
   println(lassoRegression)
 +
 +
===Логистическая регрессия===
 +
Sbt зависимость:
 +
    libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"
 +
    libraryDependencies += "org.apache.spark" %% "spark-mllib" % "2.4.0" % "runtime"
 +
Пример логистической регрессии c применением spark.mllib.classification<ref>[https://spark.apache.org/docs/2.3.1/mllib-linear-methods.html#logistic-regression Spark, Logistic Regression]</ref>:
 +
  import org.apache.spark.mllib.classification.{LogisticRegressionModel, LogisticRegressionWithLBFGS}
 +
  import org.apache.spark.mllib.evaluation.MulticlassMetrics
 +
  import org.apache.spark.mllib.regression.LabeledPoint
 +
  import org.apache.spark.mllib.util.MLUtils
 +
 +
  val data = MLUtils.loadLibSVMFile(sc, "logisticRegresion.txt")
 +
  val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L)
 +
  val training = splits(0).cache()
 +
  val test = splits(1)
 +
  val model = new LogisticRegressionWithLBFGS()
 +
    .setNumClasses(10)
 +
    .run(training)
 +
 +
  val predictionAndLabels = test.map { case LabeledPoint(label, features) =>
 +
    val prediction = model.predict(features)
 +
    (prediction, label)
 +
  }
 +
  val metrics = new MulticlassMetrics(predictionAndLabels)
 +
  val accuracy = metrics.accuracy
 +
  println(accuracy)
  
 
== Примечания ==
 
== Примечания ==
 
<references/>
 
<references/>

Версия 21:23, 12 января 2019

Раздел в разработке [WIP]

Популярные библиотеки

  • Breeze[1] — библиотека, которая копирует реализует идеи строения структур данных из MATLAB[2] и NumPy[3]. Breeze позволяет быстро манипулировть данными и позволяет реализовавать матричные и веторные операции, решать задачи оптимизации, обрабатывать сигналы устройств.
  • Epic[4] — часть ScalaNLP, позволяющая парсить и обрабатывать текст, поддерживающая использование GPU. Так же имеет фрэймворк для предсказаний текста.
  • Smpile[5] — развивающийся проект, похожий на scikit-learn[6], разработанный на Java и имеющий API для Scala. Имеет большой набор алгоритмов для решения задач классификации, регрессии, выбора фичей и другого.
  • Apache Spark MLlib[7] — построенная на Spark[8] имеет большой набор алгоритмов, написанный на Scala.
  • DeepLearning.scala [9] — набор инструментов для глубокого обучения[10]. Позволяет создавать динамические нейронные сети, давая возможность параллельных вычеслений.

Примеры кода

KNN

SBT зависимость:

 libraryDependencies += "com.github.haifengl" %% "smile-scala" % "1.5.2"

Пример классификации датасета и вычисления F1 меры[11] используя smile.classification.knn[12]:

 import smile.classification._
 import smile.data._
 import smile.plot._
 import smile.read
 import smile.validation.FMeasure
 val toy: AttributeDataset = read.table("iris.csv", delimiter = ",", response = Some((new NumericAttribute("class"), 2)))
 val x: Array[Array[Double]] = toy.x()
 val y: Array[Int] = toy.y().map(_.toInt)
 val KNN: KNN[Array[Double]] = knn(x, y, 3)
 val predictions: Array[Int] = x.map(KNN.predict)
 val f1Score = new FMeasure().measure(predictions, y)
 plot(x, y, KNN)

Линейная регрессия

Sbt зависимость:

   libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"
   libraryDependencies += "org.apache.spark" %% "spark-mllib" % "2.4.0" % "runtime"

Пример линейной регрессии c применением org.apache.spark.ml.regression.LinearRegression[13]:

 val training = spark.read.format("libsvm")
   .load("linear_regression.txt")
 val lr = new LinearRegression()
   .setMaxIter(10)
   .setRegParam(0.3)
   .setElasticNetParam(0.8)
 val lrModel = lr.fit(training)

Вывод итоговых параметров модели:

 println(lrModel.coefficients)
 println(lrModel.intercept)
 val trainingSummary = lrModel.summary
 println(trainingSummary.totalIterations)
 println(trainingSummary.objectiveHistory.mkString(","))
 trainingSummary.residuals.show()
 println(trainingSummary.rootMeanSquaredError)
 println(trainingSummary.r2)

Вариации регрессии

Sbt зависимость:

   libraryDependencies += "com.github.haifengl" %% "smile-scala" % "1.5.2"

Пример ридж и лассо регрессии c применением smile.regression[14]:

 import smile.data.{AttributeDataset, NumericAttribute}
 import smile.read
 import smile.regression.{LASSO, RidgeRegression, lasso, ridge}
 val data: AttributeDataset = read.table("regression.txt", delimiter = " ", response = Some((new NumericAttribute("class"), 0)))
 val x: Array[Array[Double]] = data.x()
 val y: Array[Double] = data.y()
 val ridgeRegression: RidgeRegression = ridge(x, y, 0.0057)
 val lassoRegression: LASSO = lasso(x, y, 10)
 println(ridgeRegression)
 println(lassoRegression)

Логистическая регрессия

Sbt зависимость:

   libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"
   libraryDependencies += "org.apache.spark" %% "spark-mllib" % "2.4.0" % "runtime"

Пример логистической регрессии c применением spark.mllib.classification[15]:

 import org.apache.spark.mllib.classification.{LogisticRegressionModel, LogisticRegressionWithLBFGS}
 import org.apache.spark.mllib.evaluation.MulticlassMetrics
 import org.apache.spark.mllib.regression.LabeledPoint
 import org.apache.spark.mllib.util.MLUtils
 val data = MLUtils.loadLibSVMFile(sc, "logisticRegresion.txt")
 val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L)
 val training = splits(0).cache()
 val test = splits(1)
 val model = new LogisticRegressionWithLBFGS()
   .setNumClasses(10)
   .run(training)
 val predictionAndLabels = test.map { case LabeledPoint(label, features) =>
   val prediction = model.predict(features)
   (prediction, label)
 }
 val metrics = new MulticlassMetrics(predictionAndLabels)
 val accuracy = metrics.accuracy
 println(accuracy)

Примечания