Примеры кода на 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 | + | Пример линейной регрессии 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)
Примечания
- ↑ Breeze
- ↑ MATLAB, structures
- ↑ NumPy wiki
- ↑ ScalaNLP, Epic
- ↑ Smile, Statistical Machine Intelligence and Learning Engine
- ↑ scikit-learn
- ↑ Apache Spark MLlib
- ↑ Apache Spark
- ↑ DeppLearning.scala
- ↑ Глубокое обучение
- ↑ F1 мера
- ↑ Smile, KNN
- ↑ Spark, LinearRegression
- ↑ Smile, Regression
- ↑ Spark, Logistic Regression