Изменения

Перейти к: навигация, поиск

Примеры кода на Scala

12 818 байт добавлено, 19:30, 4 сентября 2022
м
rollbackEdits.php mass rollback
Раздел в разработке[<span style="color[File:#faecc8">WIP<scala_logo.png|auto|thumb|Scala: https://www.scala-lang.org/span>]]
==Популярные библиотеки==
* Breeze<ref>[https://github.com/scalanlp/breeze Breeze]</ref> {{---}} библиотека, которая копирует реализует идеи строения структур данных из MATLAB<ref>[https://www.mathworks.com/help/matlab/structures.html MATLAB, structures]</ref> и NumPy<ref>;[https://en.wikipedia.org/wiki/NumPy NumPy wiki]</ref>. Breeze позволяет быстро манипулировть манипулировать данными и позволяет реализовавать реализовать матричные и веторные векторные операции, решать задачи оптимизации, обрабатывать сигналы устройств.;* Epic<ref>[http://www.scalanlp.org/ ScalaNLP, Epic]</ref> {{---}} часть ScalaNLP, позволяющая парсить и обрабатывать текст, поддерживающая использование GPU. Так же имеет фрэймворк для предсказаний текста.;* Smpile<ref>[https://haifengl.github.io/smile/ Smile, Statistical Machine Intelligence and Learning Engine]</ref> {{---}} развивающийся проект, похожий на scikit-learn<ref>[https://scikit-learn.org/ scikit-learn]</ref>, разработанный на Java и имеющий API для Scala. Имеет большой набор алгоритмов для решения задач классификации, регрессии, выбора фичей и другого.;* Apache Spark MLlib<ref>[https://spark.apache.org/mllib/ Apache Spark MLlib]</ref> {{---}} построенная на Spark<ref>[https://spark.apache.org/ Apache Spark]</ref> имеет большой набор алгоритмов, написанный на Scala.;
* DeepLearning.scala <ref>[https://deeplearning.thoughtworks.school/ DeppLearning.scala]</ref> {{---}} набор инструментов для глубокого обучения<ref>[http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 Глубокое обучение]</ref>. Позволяет создавать динамические нейронные сети, давая возможность параллельных вычеслений.
==Примеры кода==
===KNNЛинейная регрессия==={{main|Линейная регрессия|l1=Линейная регрессия<sup>[на 28.01.19 не создан]</sup>}} 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<ref>[https://spark.apache.org/docs/latest/ml-classification-regression.html#linear-regression Spark, LinearRegression]</ref>: '''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) ===Вариации регрессии==={{main|Вариации регрессии}}  Sbt зависимость: libraryDependencies '''+=''' "com.github.haifengl" '''%%''' "smile-scala" '''%''' "1.5.2"Пример ридж и лассо регрессии 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 '''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) ===Логистическая регрессия==={{main|Логистическая регрессия}} 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) ===Классификация при помощи MLP==={{main|Нейронные сети, перцептрон}} Sbt зависимость: libraryDependencies '''+=''' "com.github.haifengl" '''%%''' "smile-scala" '''%''' "1.5.2"Пример классификации c применением smile.classification.mlp<ref>[https://haifengl.github.io/smile/classification.html#neural-network Smile, MLP]</ref>: '''import '''smile.classification.NeuralNetwork.{ActivationFunction, ErrorFunction} '''import '''smile.data.{AttributeDataset, NumericAttribute} '''import '''smile.read '''import '''smile.classification.mlp '''import '''smile.plot.plot  '''val '''data: AttributeDataset = read.table("iris.csv", delimiter = ",", response = Some(('''new '''NumericAttribute("class"), 2))) '''val '''x: Array[Array['''Double''']] = data.x() '''val '''y: Array['''Int'''] = data.y().map(_.toInt) '''val '''mlpModel = mlp(x, y, Array(2, 10, 2), ErrorFunction.LEAST_MEAN_SQUARES, ActivationFunction.LOGISTIC_SIGMOID) plot(x, y, mlpModel) ===Рекуррентные нейронные сети==={{main|Рекуррентные нейронные сети}} Пример кода, с использованием библиотеки DeepLearning.scala <span style="color:#3D9970>// Задание слоёв</span> '''def '''tanh(x: INDArrayLayer): INDArrayLayer = { '''val '''exp_x = hyperparameters.exp(x) '''val '''exp_nx = hyperparameters.exp(-x) (exp_x - exp_nx) / (exp_x + exp_nx) } '''def '''charRNN(x: INDArray, y: INDArray, hprev: INDArrayLayer): (DoubleLayer, INDArrayLayer, INDArrayLayer) = { '''val '''hnext = tanh(wxh.dot(x) + whh.dot(hprev) + bh) '''val '''yraw = why.dot(hnext) + by '''val '''yraw_exp = hyperparameters.exp(yraw) '''val '''prob = yraw_exp / yraw_exp.sum '''val '''loss = -hyperparameters.log((prob * y).sum) (loss, prob, hnext) }  <span style="color:#3D9970>// Определение структуры</span> '''val '''batches = data.zip(data.tail).grouped(seqLength).toVector type WithHiddenLayer[A] = (A, INDArrayLayer) type Batch = IndexedSeq[(Char, Char)] type Losses = Vector['''Double'''] '''def '''singleBatch(batch: WithHiddenLayer[Batch]): WithHiddenLayer[DoubleLayer] = { batch '''match '''{ '''case '''(batchseq, hprev) => batchseq.foldLeft((DoubleLayer(0.0.forward), hprev)) { (bstate: WithHiddenLayer[DoubleLayer], xy: (Char, Char)) => (bstate, xy) '''match '''{ '''case '''((tot, localhprev), (x, y)) => { charRNN(oneOfK(x), oneOfK(y), localhprev) '''match '''{ '''case '''(localloss, _, localhnext) => { (tot + localloss, localhnext) } } } } } } }  <span style="color:#3D9970>// Определение одного шага обучения</span> '''def '''initH = INDArrayLayer(Nd4j.zeros(hiddenSize, 1).forward) '''def '''singleRound(initprevloss: Losses): Future[Losses] = (batches.foldLeftM((initprevloss, initH)) { (bstate: WithHiddenLayer[Losses], batch: Batch) => bstate '''match '''{ '''case '''(prevloss, hprev) => singleBatch(batch, hprev) '''match '''{ '''case '''(bloss, hnext) => bloss.train.map { (blossval: '''Double''') => { '''val '''nloss = prevloss.last * 0.999 + blossval * 0.001 '''val '''loss_seq = prevloss :+ prevloss.last * 0.999 + blossval * 0.001 (loss_seq, hnext) } } } } }).map { (fstate: WithHiddenLayer[Losses]) => fstate '''match '''{ '''case '''(floss, _) => floss } } '''def '''allRounds: Future[Losses] = (0 until 2048).foldLeftM(Vector(-math.log(1.0 / vocabSize) * seqLength)) { (ploss: Losses, round: '''Int''') => { singleRound(ploss) } }  <span style="color:#3D9970>// Обучение сети</span> '''def '''unsafePerformFuture[A](f: Future[A]): A = Await.result(f.toScalaFuture, Duration.Inf) '''val '''losses = unsafePerformFuture(allRounds) ===Долгая краткосрочная память===Основная статья: [[Долгая краткосрочная память]]. [https://github.com/IlyaHalsky/neerc-wiki-ml-scala/blob/master/lstm/GravesLSTMCharModellingExample.scala Пример реализации LSTM] на основе DeepLearning4j<ref>[https://deeplearning4j.org/ DeepLearning4j]</ref> и ND4J<ref>[https://deeplearning4j.org/docs/latest/nd4j-overview ND4J]</ref> ===Обработка естественного языка===Основная статья: [[Обработка естественного языка#Пример кода на языке Scala | Обработка естественного языка: Пример кода на языке Scala]]. ===Метрический классификатор и метод ближайших соседей===Основная статья: [[Метрический классификатор и метод ближайших соседей#Пример на языке Scala | Метрический классификатор и метод ближайших соседей: Пример на языке Scala]]. ===Метод опорных векторов===Основная статья: [[Метод опорных векторов (SVM)]]<sup>[на 28.01.19 не создан]</sup>. SBT зависимость: libraryDependencies '''+=''' "com.github.haifengl" '''%%''' "smile-scala" '''%''' "1.5.2"Пример классификации датасета и вычисления F1 меры<ref>[https://en.wikipedia.org/wiki/F1_score F1 мера]</ref> используя smile.classification.svm<ref>[https://haifengl.github.io/smile/classification.html#svm Smile, SVM]</ref>: '''import '''smile.classification._ '''import '''smile.data._ '''import '''smile.plot._ '''import '''smile.read '''import '''smile.validation.FMeasure  '''val '''iris: AttributeDataset = read.table("iris.csv", delimiter = ",", response = Some(('''new '''NumericAttribute("class"), 2))) '''val '''x: Array[Array['''Double''']] = iris.x() '''val '''y: Array['''Int'''] = iris.y().map(_.toInt) '''val '''SVM = svm(x, y, '''new '''GaussianKernel(8.0), 100) '''val '''predictions: Array['''Int'''] = x.map(SVM.predict) '''val '''f1Score = '''new '''FMeasure().measure(predictions, y) plot(x, y, SVM) ===Дерево решений и случайный лес===Основная статья: [[Дерево решений и случайный лес#Пример на языке Scala | Дерево решений и случайный лес: Пример на языке Scala]]. ===Байесовская классификация===Основная статья: [[Байесовская классификация]]. SBT зависимость: libraryDependencies '''+=''' "com.tsukaby" '''%%''' "naive-bayes-classifier-scala" '''%''' "0.2.0"Пример классификации используя smile.classification.cart<ref>[https://github.com/tsukaby/naive-bayes-classifier-scala Naive bayes classifier, Scala]</ref>: <span style="color:#3D9970>// Создание модели</span> '''val '''bayes = '''new '''BayesClassifier[String, String]() <span style="color:#3D9970>// Задание соотвествия категория - слово</span> bayes.learn("technology", "github" :: "git" :: "tech" :: "technology" :: Nil) bayes.learn("weather", "sun" :: "rain" :: "cloud" :: "weather" :: "snow" :: Nil) bayes.learn("government", "ballot" :: "winner" :: "party" :: "money" :: "candidate" :: Nil) <span style="color:#3D9970>// Тестовые примеры</span> '''val '''unknownText1 = "I use git".split(" ") '''val '''unknownText2 = "Today's weather is snow".split(" ") '''val '''unknownText3 = "I will vote '''for '''that party".split(" ") <span style="color:#3D9970>// Классификация</span> println(bayes.classify(unknownText1).map(_.category).getOrElse("")) <span style="color:#3D9970>// technology</span> println(bayes.classify(unknownText2).map(_.category).getOrElse("")) <span style="color:#3D9970>// weather</span> println(bayes.classify(unknownText3).map(_.category).getOrElse("")) <span style="color:#3D9970>// government</span> ===EM-алгоритм===Основная статья: [[EM-алгоритм]]<sup>[на 28.01.19 не создан]</sup>. 
SBT зависимость:
libraryDependencies '''+= ''' "com.github.haifengl" '''%% ''' "smile-scala" '''% ''' "1.5.2"Пример классификации датасета и вычисления F1 меры<ref>[https://en.wikipedia.org/wiki/F1_score F1 мера]</ref> используя smile.classificationclustering.knnkmeans<ref>[https://haifengl.github.io/smile/classificationclustering.html#knn k-means Smile, KNNK-Means]</ref>: '''import '''smile.classificationclustering._ '''import '''smile.data._ '''import '''smile.plot._ '''import '''smile.read  import smile'''val '''iris: AttributeDataset = read.table("iris.csv", delimiter = ",", response = Some(('''new '''NumericAttribute("class"), 2))) '''val '''x: Array[Array['''Double''']] = iris.x() '''val '''kMeans: KMeans = kmeans(x, k = 6, maxIter = 1000) '''val '''y = kMeans.getClusterLabel plot(x, y, '.', Palette.validationCOLORS) ===Бустинг, AdaBoost===Основная статья: [[Бустинг, AdaBoost#Пример на языке Scala | Бустинг, AdaBoost: Пример на языке Scala]].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Уменьшение размерности#Пример на языке Scala | Уменьшение размерности: Пример на языке Scala]] = knn(x, y, 3) val predictions: Array[Int] = x.map(KNN.predict) val f1Score = new FMeasure().measure(predictions, y) plot(x, y, KNN)
== Примечания ==
<references/>
[[Категория: Машинное обучение]] [[Категория: Примеры кода]]
1632
правки

Навигация