<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Machine Learning on Android with Oracle Tribuo, SMILE and Weka∗</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Máté Szabó</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Faculty of Informatics, University of Debrecen</institution>
          ,
          <country country="HU">Hungary</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Proceedings of the 1</institution>
        </aff>
      </contrib-group>
      <fpage>176</fpage>
      <lpage>186</lpage>
      <abstract>
        <p>Machine learning is reaching nearly every programming language and most kinds of devices. While the most popular language for developing machine learning application is Python, it has its own limits, for example, the partial compatibility with Android devices. When a mobile application needs to train a model, it is easier to achieve this with the device's native language like Java or Kotlin. There are many machine learning libraries for Java, but most of them lack Android support. This paper compares the resources needed to train random forest, support-vector machine and K-means models of the Weka, Tribuo and SMILE libraries. We developed an application to compare these libraries' implementations on datasets with various sizes. The results show that Weka is the suggested library for bigger datasets and complex models, as it is the least resource hungry.</p>
      </abstract>
      <kwd-group>
        <kwd>Android</kwd>
        <kwd>machine learning</kwd>
        <kwd>Tribuo</kwd>
        <kwd>SMILE</kwd>
        <kwd>mobile</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>In September 2020, Oracle announced Tribuo, their open source Java machine
learning library under Apache 2.0 license. It features many commonly used
algorithms like random forest, SVM, lasso, K-means, so it can solve prediction,
classification, regression, clustering and anomaly detection problems. SMILE, the
Statistical Machine Intelligence and Learning Engine is another machine learning library
for Java. Its main advantage is performance compared to other libraries and
algorithm support. Weka is a general purpose open source machine learning software
with Java API, which is easy to use and has its own graphical interface. The
common thing in these libraries is that they can be used with Java or Kotlin and there
are many algorithms that all of them support. Because of this, their performance
can be compared in the same environment, which will be an Android device with
a mobile processor in it. Although these are not native Android libraries, they
can work on these systems and their performance can be compared. Kotlin is a
programming language for JVM, which became the preferred language for Android
programming. Codes from Java can be transformed into Kotlin code, so it is easy
to use Java libraries in this environment. Benchmarking mobile devices’ model
training performance is a repeating task, because we can measure how much these
devices evolved in years. In this paper, we present the Android machine learning
ecosystem, the libraries, the challenge of porting machine learning libraries, and
the results.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Related Works</title>
      <p>
        With the evolution of mobile devices and applications, it was inevitable to use
machine learning techniques for more personal user experience. Most applications
use pre-trained models to recognize voice, to take better pictures or to swap faces.
There are many disadvantages of training models on mobile, for example, the
energy consumption [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. Besides that, there are many use cases of models trained
on mobiles like comparison of machine learning capability of processors [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ],
detecting potholes [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], or malware [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ]. The present work can be placed on the topic of
machine learning and Android benchmarking. There are many articles about
comparing devices or machine learning libraries by training time, memory and CPU
eficiency. For a complete benchmarking tool, there is the PMLB, the Penn
machine learning benchmark [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. There are other papers about benchmarking, like
the Analysis of DAWNBench, a Time-to-Accuracy Machine Learning Performance
Benchmark [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], the MLPerf Training Benchmark [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], or the Benchmark of Machine
Learning Methods for Classification of a Sentinel-2 Image [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ].
      </p>
      <sec id="sec-2-1">
        <title>2.1. Java Machine Learning</title>
        <p>
          Java is not a popular language for machine learning, but it is popular for
application development, and because of the need of intelligent applications, it supports
many machine learning features with libraries. Each of these supports diferent
algorithms and datasets and each of them has advantages for specific systems. Weka
[
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] is a complete machine learning software with graphical interface, command-line
interface and it can be used as a Java library too. It supports tasks like
preprocessing, classification, regression, clustering, association rules and visualization.
SMILE [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ], the Statistical Machine Intelligence and Learning Engine is a powerful
engine that covers every aspect of machine learning. It supports JVM languages,
so SMILE codes can be transformed into Kotlin codes. It has many algorithms
for classification, regression, clustering, association rule mining and many built-in
solutions for pre-processing, validation, feature engineering and time series. Oracle
Tribuo [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ] is a newly open sourced machine learning library written in Java and
it has unique features like provenance, type safety and interoperability. Models,
datasets, and evaluations have provenance, which means they know the
transformations and parameters used to create them. The interoperability means that Tribuo
has interfaces to libraries like XGBoost [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] and Tensorflow [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] and the ONNX [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ]
exchange format. Deeplearning4J [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ] is a SMILE based library focusing on deep
learning, which is not in the scope of this paper. H2O [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] is an in-memory platform
that has many softwares and libraries for machine learning. It supports most kind
of data mining tasks and it can be integrated with Java applications through REST
API or embedding. Mallet [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ] is another option for applications which use natural
language processing, document classification or clustering.
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. Machine Learning on Android</title>
      <p>When we want to train and use machine learning models on Android, we can
encounter many challenges. The main reason not to train models especially with
large datasets on mobiles is that these operations need a lot of energy, so running
applications would result in battery drain. While training is possible, it is limited
by these devices’ memory capacity, because most mid-range smartphones usually
have 4-6 gigabytes of memory, and this is not enough for processing larger datasets,
not to mention that Android has limitations for memory usage. Another challenge
for mobile machine learning developers is the architectural diference between the
processors of computers and mobiles. Using Java libraries on these devices can be
risky because Android does not have full Java support, so it is possible that some
functions don not work or work, but with diferent results.</p>
      <p>Currently, applications that want to use machine learning can choose from
using TensorFlow Lite, or a library with Android Neural Network API support, or
web services. With TensorFlow Lite developers can mostly use pre-trained models
created with TensorFlow or they can train specific models for image and text
classification. A popular choice is to use machine learning web services where the
application sends data to the service and gets back the result.</p>
      <sec id="sec-3-1">
        <title>3.1. Porting Weka</title>
        <p>
          Weka contains many Android incompatible code, mostly its graphical interface
and logging, but there are many more functions that use specific code parts, which
cannot be compiled on mobiles. Our strategy here was to remove everything that is
incompatible and see how the application can work with the newly compiled Weka.
The porting was successful, however sometimes minor errors occured during the
tests. The tested library was based on rjmarsan’s Weka-for-Android project [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ].
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>3.2. Porting SMILE</title>
        <p>SMILE also contained incompatible code, for example Java codes that were not
supported by Android or functions with java.sql type. Because the number of
these code parts were few, they were replaced by Android compatible ones. The
result was good enough to run on mobiles, but it did not support all features, and
some of these errors occured during runtime.</p>
      </sec>
      <sec id="sec-3-3">
        <title>3.3. Porting Tribuo</title>
        <p>Oracle’s Tribuo library consists of many Maven artifacts, and some of them were not
needed for this application. There are modules which cannot be compiled on
Android, but the most important ones, namely tribuo-data, tribuo-classification-trees,
tribuo-clustering-kmeans and tribuo-classification-sgd ran without modifications.
Overally we can say that not all of Tribuo’s functions work on Android, especially
the ones using third-party libraries, but we can do simple machine learning tasks
with it on mobiles.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Application</title>
      <p>The aim of the Android application is to measure properties of machine learning
libraries like memory usage or runtime. The libraries involved are the newly open
sourced Oracle Tribuo, SMILE and Weka. The application runs the same test with
each library, which means it trains models like SVM, Random Forest and K-means
on multiple datasets with diferent sizes. The test uses the same algorithms and
parameters for all libraries. The results and runtime properties are logged by the
application.</p>
      <p>
        The graphical interface is quite simple. When we tap on a library name, the
software will train a selected type of model on a selected dataset. The “ALL”
button is for running the training operation of all libraries parallelly. We can choose
from the Iris dataset [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] with 150 records, a subset of the Record Linkage
Comparison Patterns dataset [
        <xref ref-type="bibr" rid="ref15 ref20">15, 20</xref>
        ] with 60,000 records and the full Record Linkage
Comparison Patterns dataset with 5749132 records. The algorithms we can choose
from are the random forest with 500 trees, split rule GINI, maximum depth = 20,
maximum nodes = data size / 5 and node size = 5, the SVM with an RBF kernel,
gamma = 0.1, lambda = 0.5, epochs = 30, and the K-Means algorithm with 2 or
3 centroids based on the dataset, iterations = 10 and distance is Euclidean. The
outputted result contains the runtime, the maximum and the average CPU usage,
the memory usage and the energy consumption.
      </p>
    </sec>
    <sec id="sec-5">
      <title>5. Results</title>
      <p>Weka, SMILE and Tribuo can train machine learning models on Android and all
of them can be used for simpler applications. As the software trained the same
models with the same parameters and datasets these models’ performance was the
same on the test datasets. The only diference between these libraries was in the
runtime, memory usage, average CPU usage and energy consumption.</p>
      <sec id="sec-5-1">
        <title>5.1. Runtime</title>
        <p>In Table 1 and Figure 2, we can see how fast the libraries finished the training
of the models, where the prefix is the dataset (i is the Iris dataset and p is the
Patterns dataset), and the second part is the name of the algorithm (where r is the
random forest, s is the support-vector machine and k is the K-means).</p>
        <p>As we can see, most of the time, Weka library was the fastest, except for
Kmeans where SMILE was faster. For smaller datasets, both Tribuo’s and SMILE’s
results are good, but for larger ones, they were much slower than Weka. Where
there are zeros in the table, the software did not complete the training of the model,
because the Android system killed the application due to its high resource need.</p>
      </sec>
      <sec id="sec-5-2">
        <title>5.2. Memory Consumption</title>
        <p>In Table 2 and Figure 3, we can see how much memory the algorithms needed in
megabytes. The notation is the same as in Table 1 and Figure 2.</p>
        <p>It is clear, that Weka used the least amount of memory, but in some cases Tribuo
was wery close to it, like in iris-svm, iris-kmeans, and patterns-kmeans. There
are special cases where the training did not finish, like Tribuo’s
pattern-60000svm, pattern-rsvm and pattern-kmeans or SMILE’s pattern-60000-svm,
patternsvm and pattern-kmeans where the memory need was extremely high compared to
other cases. The highest value was the SMILE’s K-means training for the Pattern
dataset where the application used 1.2 GB memory. For smaller datasets we can
say that Tribuo and SMILE needed somewhat more memory, but this is not a huge
diference.</p>
      </sec>
      <sec id="sec-5-3">
        <title>5.3. Battery Consumption</title>
        <p>In Table 3 and Figure 4 we can see the battery consumption of the application,
when it trains the selected models. The table’s and figure’s notations are the same
as earlier. The values range from 0 to 1, where 0 is the no energy need and 1 is the
highest energy need.</p>
        <p>Battery consumption is an important part of these measurements, because this
means that a machine learning application could be maintained or it drains the
battery that much, that the application is unusable. In Figure 4 we can see that
Weka used the least amount of battery, the next one was Tribuo and the hungriest
library was SMILE. For smaller tasks, Tribuo’s and Weka’s energy need were nearly
the same.</p>
      </sec>
      <sec id="sec-5-4">
        <title>5.4. Average CPU Usage</title>
        <p>In Table 4 and Figure 5 we can see the average CPU usage while training the
models. The table’s and figure’s notations are the same as earlier. Average CPU
usage shows how these libraries use this resource. When this value is below 50, it
means that other applications can run parallelly while the training is running.</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>6. Conclusion</title>
      <p>This paper showed that using machine learning libraries meant for Java can be
used in Android application development if we have a specific task. However if an
application uses models for image or text classification the recommendation is to
use Tensorflow or web services. Specific tasks can be classifying or recommendation
based on the users’ data, where it is necessary to train a local model.</p>
      <p>Porting Weka, Tribuo and SMILE to Android devices is a somewhat challenging
task, because each of them has some Java version or platform specific codes, which
will not work on mobiles. To compare these libraries’ performance, we must select
algorithms that each of them supports and has Android compatible
implementation. For the comparison, we chose the random forest, SVM and K-means models
and datasets with diferent sizes. The results show that Weka is the suggested
library for bigger datasets and complex models, as it is the least resource hungry.
It supports a wide range of algorithms, so every kind of machine learning task can
be done with it. For smaller datasets or fewer complex models, Tribuo and Smile
can be an option because they get updates frequently, so they can react faster to
market needs.</p>
      <p>An improvement can be extending these tests with other datasets, algorithms,
or multiple devices. The results could be compared to results from computers
instead of Android devices. As new machine learning libraries are released, they
could be ported to mobiles and the results could be extended.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>M.</given-names>
            <surname>Abadi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Barham</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Chen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Chen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Davis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Dean</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Devin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Ghemawat</surname>
          </string-name>
          , G. Irving,
          <string-name>
            <given-names>M.</given-names>
            <surname>Isard</surname>
          </string-name>
          , et al.:
          <article-title>Tensorflow: A system for large-scale machine learning</article-title>
          ,
          <source>in: 12th USENIX Symposium on Operating Systems Design and Implementation (OSDI'16)</source>
          ,
          <year>2016</year>
          , pp.
          <fpage>265</fpage>
          -
          <lpage>283</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>J.</given-names>
            <surname>Bai</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Lu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Zhang</surname>
          </string-name>
          , et al.:
          <source>ONNX: Open Neural Network Exchange</source>
          , https : / / github.com/onnx/onnx,
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>T.</given-names>
            <surname>Chen</surname>
          </string-name>
          ,
          <string-name>
            <surname>C.</surname>
          </string-name>
          <article-title>Guestrin: XGBoost: A Scalable Tree Boosting System</article-title>
          ,
          <source>in: Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining</source>
          , KDD '
          <fpage>16</fpage>
          , San Francisco, California, USA: ACM,
          <year>2016</year>
          , pp.
          <fpage>785</fpage>
          -
          <lpage>794</lpage>
          , isbn:
          <fpage>978</fpage>
          -1-
          <fpage>4503</fpage>
          -4232-2, doi: 10.1145/2939672.2939785, url: http://doi.acm.
          <source>org/10</source>
          .1145/2939672.2939785.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>C.</given-names>
            <surname>Coleman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Kang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Narayanan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Nardi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Zhao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Zhang</surname>
          </string-name>
          , P. Bailis,
          <string-name>
            <given-names>K.</given-names>
            <surname>Olukotun</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Ré</surname>
          </string-name>
          ,
          <string-name>
            <surname>M.</surname>
          </string-name>
          <article-title>Zaharia: Analysis of dawnbench, a time-to-accuracy machine learning performance benchmark</article-title>
          ,
          <source>ACM SIGOPS Operating Systems Review 53.1</source>
          (
          <issue>2019</issue>
          ), pp.
          <fpage>14</fpage>
          -
          <lpage>25</lpage>
          , doi: 10.1145/3352020.3352024.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>R.</given-names>
            <surname>Fischer: Iris Dataset</surname>
          </string-name>
          ,
          <year>1988</year>
          , url: https://archive.ics.uci.edu/ml/datasets/iris.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>E.</given-names>
            <surname>Frank</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Hall</surname>
          </string-name>
          ,
          <string-name>
            <surname>I.</surname>
          </string-name>
          <article-title>Witten: The WEKA workbench</article-title>
          .
          <article-title>Online appendix, in: Data mining: practical machine learning tools and techniques</article-title>
          , Morgan Kaufmann,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <fpage>H2O</fpage>
          .
          <source>ai: H2O, 3.10.0</source>
          .8,
          <string-name>
            <surname>Nov</surname>
          </string-name>
          .
          <year>2020</year>
          , url: https://github.com/h2oai/h2o-3.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>A.</given-names>
            <surname>Ignatov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Timofte</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Chou</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <string-name>
            <surname>M. Wu</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <string-name>
            <surname>Hartley</surname>
          </string-name>
          , L. Van Gool:
          <source>AI Benchmark: Running Deep Neural Networks on Android Smartphones, in: Proceedings of the European Conference on Computer Vision</source>
          (ECCV) Workshops, Sept.
          <year>2018</year>
          , doi: 10.1007/978-3-
          <fpage>030</fpage>
          -11021-5_
          <fpage>19</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>A.</given-names>
            <surname>Kulkarni</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Mhalgi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Gurnani</surname>
          </string-name>
          ,
          <string-name>
            <surname>N.</surname>
          </string-name>
          <article-title>Giri: Pothole detection system using machine learning on Android</article-title>
          ,
          <source>International Journal of Emerging Technology and Advanced Engineering</source>
          <volume>4</volume>
          .7 (
          <issue>2014</issue>
          ), pp.
          <fpage>360</fpage>
          -
          <lpage>364</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>H.</given-names>
            <surname>Li</surname>
          </string-name>
          : Smile, https://haifengl.github.io,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>R.</given-names>
            <surname>Marsan</surname>
          </string-name>
          :
          <article-title>Weka-for-</article-title>
          <string-name>
            <surname>Android</surname>
          </string-name>
          , https://github.com/rjmarsan/Weka-for-Android,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>P.</given-names>
            <surname>Mattson</surname>
          </string-name>
          , C. Cheng, G. Diamos,
          <string-name>
            <given-names>C.</given-names>
            <surname>Coleman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Micikevicius</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Patterson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Tang</surname>
          </string-name>
          , G.-Y. Wei,
          <string-name>
            <given-names>P.</given-names>
            <surname>Bailis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Bittorf</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Brooks</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Chen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Dutta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>U.</given-names>
            <surname>Gupta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Hazelwood</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Hock</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Huang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Kang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Kanter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Kumar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Liao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Narayanan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Oguntebi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Pekhimenko</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Pentecost</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Janapa Reddi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Robie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>St John</surname>
          </string-name>
          , C.-
          <string-name>
            <surname>J. Wu</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          <string-name>
            <surname>Xu</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          <string-name>
            <surname>Young</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <article-title>Zaharia: MLPerf Training Benchmark</article-title>
          ,
          <source>in: Proceedings of Machine Learning and Systems</source>
          , ed. by I. Dhillon,
          <string-name>
            <given-names>D.</given-names>
            <surname>Papailiopoulos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Sze</surname>
          </string-name>
          , vol.
          <volume>2</volume>
          ,
          <issue>2020</issue>
          , pp.
          <fpage>336</fpage>
          -
          <lpage>349</lpage>
          , url: https://proceedings.mlsys.org/paper/2020/file/02522a2b2726fb0a03bb19f2d8d9524dPaper.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>A. K. McCallum: MALLET:</surname>
          </string-name>
          <article-title>A Machine Learning for</article-title>
          <source>Language Toolkit</source>
          ,
          <year>2002</year>
          , url: http://mallet.cs.umass.edu.
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>A.</given-names>
            <surname>McIntosh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Hindle</surname>
          </string-name>
          ,
          <string-name>
            <surname>S.</surname>
          </string-name>
          <article-title>Hassan: What can Android mobile app developers do about the energy consumption of machine learning?</article-title>
          ,
          <source>Empirical Software Engineering 24.1</source>
          (
          <issue>2019</issue>
          ), pp.
          <fpage>562</fpage>
          -
          <lpage>601</lpage>
          , doi: 10.1007/s10664-018-9629-2.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>E. C.</surname>
          </string-name>
          R. of North Rhine-Westphalia: Record Linkage Comparison Patterns Dataset,
          <year>2011</year>
          , url: https://archive.ics.uci.edu/ml/datasets/record+linkage+comparison+patterns.
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>R. S.</given-names>
            <surname>Olson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W. La</given-names>
            <surname>Cava</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Orzechowski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R. J.</given-names>
            <surname>Urbanowicz</surname>
          </string-name>
          ,
          <string-name>
            <surname>J. H.</surname>
          </string-name>
          <article-title>Moore: PMLB: a large benchmark suite for machine learning evaluation and comparison</article-title>
          ,
          <source>BioData mining 10.1</source>
          (
          <issue>2017</issue>
          ), pp.
          <fpage>1</fpage>
          -
          <lpage>13</lpage>
          , doi: 10.1186/s13040-017-0154-4.
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>Oracle</surname>
          </string-name>
          : Oracle Tribuo, https://tribuo.org/,
          <year>2020</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>F.</given-names>
            <surname>Pirotti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Sunar</surname>
          </string-name>
          ,
          <string-name>
            <surname>M.</surname>
          </string-name>
          <article-title>Piragnolo: Benchmark of Machine Learning Methods for Classification of a SENTINEL-2 Image , International Archives of the Photogrammetry</article-title>
          ,
          <source>Remote Sensing &amp; Spatial Information Sciences</source>
          <volume>41</volume>
          (
          <year>2016</year>
          ), doi: 10.5194/
          <string-name>
            <surname>isprsarchives-XLI-B7-</surname>
          </string-name>
          335-
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>J.</given-names>
            <surname>Sahs</surname>
          </string-name>
          ,
          <string-name>
            <surname>L. Khan:</surname>
          </string-name>
          <article-title>A Machine Learning Approach to Android Malware Detection</article-title>
          , in: 2012
          <source>European Intelligence and Security Informatics Conference</source>
          ,
          <year>2012</year>
          , pp.
          <fpage>141</fpage>
          -
          <lpage>147</lpage>
          , doi: 10.1109/EISIC.
          <year>2012</year>
          .
          <volume>34</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>M.</given-names>
            <surname>Sariyar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Borg</surname>
          </string-name>
          ,
          <string-name>
            <surname>K.</surname>
          </string-name>
          <article-title>Pommerening: Controlling false match rates in record linkage using extreme value theory</article-title>
          ,
          <source>Journal of Biomedical Informatics 44.4</source>
          (
          <issue>2011</issue>
          ), pp.
          <fpage>648</fpage>
          -
          <lpage>654</lpage>
          , doi: 10.1016/j.jbi.
          <year>2011</year>
          .
          <volume>02</volume>
          .008.
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <surname>E. D. D.</surname>
          </string-name>
          <article-title>Team: Deeplearning4j: Open-source distributed deep learning for the JVM</article-title>
          ,
          <year>2016</year>
          , url: http://deeplearning4j.org/.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>