SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
Apache Spark 2 mit Java 8
Schnelles Denken - Maschinelles
Lernen mit Apache Spark 2
Heiko Spindler
Apache Spark 2 mit Java 8
Apache Spark - Components
Apache Spark 2 mit Java 8
Machine learning explores the construction and study of
algorithms that can learn from data.
These algorithms build models based on inputs and make
predictions or decisions, rather than following explicitly
programmed instructions.
Machine Learning
Apache Spark 2 mit Java 8
• Feature transformations: standardization, normalization, hashing,...
• Classification: logistic regression, naive Bayes,...
• Regression: generalized linear regression, isotonic regression,...
• Decision trees, random forests, and gradient-boosted trees
• Recommendation: alternating least squares (ALS)
• Clustering: K-means, Gaussian mixtures (GMMs),...
• Topic modeling: latent Dirichlet allocation (LDA)
• Model evaluation and hyper-parameter tuning
• Survival analysis: accelerated failure time model
• Sequential pattern mining: FP-growth, association rules, PrefixSpan
• Distributed linear algebra: singular value decomposition (SVD), principal
component analysis (PCA),...
• Statistics: summary statistics, hypothesis testing,...
Spark ML Algorithmen
Apache Spark 2 mit Java 8
 DataFrames API
 Transformers
 Estimators
 Piplines
Spark ML - Elemente
Apache Spark 2 mit Java 8
• Extractors
• Transformers + Selectors
• Estimators
Spark ML – Pipline Elemente
Apache Spark 2 mit Java 8
DataFrames
Transformers
Estimators
Piplines
Basics – Pipelines (Training)
Apache Spark 2 mit Java 8
ML Extractors – Transformers
Tokenizer
StopWordsRemover
nn-gram
Binarizer
PCA
PolynomialExpansion
Discrete Cosine
Transform (DCT)
StringIndexer
IndexToString
OneHotEncoder
VectorIndexer
Normalizer
StandardScaler
MinMaxScaler
MaxAbsScaler
Bucketizer
ElementwiseProduct
SQLTransformer
VectorAssembler
QuantileDiscretizer
Apache Spark 2 mit Java 8
Bietet Test- und Trainingsdaten für die Erkennung
bzw. Klassifizierung von handgeschriebenen
Zeichen (0-9).
50.000 Trainingsdaten mit Klassifizierung
10.000 Testdaten mit Klassifizierung
Auf der Webseite sind mehrere
Lösungsansätze mit Vorgehen und
Ergebnissen verlinkt.
MNIST – Aufgabenstellung
Apache Spark 2 mit Java 8
MNIST – Beispiele der Ziffern
Apache Spark 2 mit Java 8
MNIST - Online http://myselph.de/neuralNet.html
Apache Spark 2 mit Java 8
Datenformat ist auf der Webseite dokumentiert.
Es gibt Skripte, die z.B. CSV erzeugen.
Label plus Pixeldaten:
Komma-separiert für alle 28 x 28 Pixel: 0: Schwarz, 255: Weiss
Header:
Label, p0, p1, … p783
MNIST - Daten
Apache Spark 2 mit Java 8
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
89,207,253,255,206,88,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,76,215,252,252,253,252,246,122,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225,239,1
80,55,119,246,252,230,25,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,225,195,0,0,0,122,246,252,112,0,0
,0,0,0,0,0,0,0...
MNIST – Daten Beispiel
Apache Spark 2 mit Java 8
●
Einlesen der Daten
●
Vorbereiten der Daten: Zerlegen in Label und Feature-Vektor
●
Konfigurieren des ML Algorithmus
●
Trainieren des Models
●
Prüfen des Models mit Testdaten
●
Auswertung
Schritte
Apache Spark 2 mit Java 8
Vorbereitung
Apache Spark 2 mit Java 8
SparkSession spark = SparkSession
.builder()
.appName("JavaMNISTDT")
.master("local[3]")
.getOrCreate();
Spark konfigurieren
Apache Spark 2 mit Java 8
DataFrameReader reader = spark.read()
.option("header", "true")
.option("delimiter", ",")
.option("inferSchema", true)
.format("com.databricks.spark.csv");
Dataset<Row> test = reader
.load(Const.BASE_DIR_DATASETS+"mnist_test2.csv")
.filter(e -> Math.random() > 0.00 );
Dataset<Row> train = reader
.load(Const.BASE_DIR_DATASETS+"mnist_train2.csv")
.filter(e -> Math.random() > 0.00 );
CSV Einlesen
Apache Spark 2 mit Java 8
StructType schema = train.schema();
String[] inputFeatures =
Arrays.copyOfRange(schema.fieldNames(), 1,
schema.fieldNames().length);
VectorAssembler assembler = new VectorAssembler()
.setInputCols( inputFeatures )
.setOutputCol( "features" );
Feature Vector erzeugen
Apache Spark 2 mit Java 8
StringIndexerModel stringIndexer = new StringIndexer()
.setInputCol("label")
.setHandleInvalid("skip")
.setOutputCol("indexedLabel")
.fit(train);
StringIndexer erzeugen
Bildet die Labels als numerische Werte ab.
Apache Spark 2 mit Java 8
Entscheidungsbaum
Apache Spark 2 mit Java 8
DecisionTreeClassifier dt = new DecisionTreeClassifier()
.setMaxDepth(28)
.setSeed(12345L)
.setLabelCol(stringIndexer.getOutputCol())
.setFeaturesCol(assembler.getOutputCol());
DT erzeugen
Apache Spark 2 mit Java 8
IndexToString indexToString = new IndexToString()
.setInputCol("prediction")
.setOutputCol("predictedLabel")
.setLabels(stringIndexer.labels());
IndexToString
Rücktransformation der numerischen Labels auf
Sprechende / fachliche Bezeichnungen
Apache Spark 2 mit Java 8
Pipeline pipeline = new Pipeline()
.setStages(new PipelineStage[] {
assembler
, stringIndexer
, dt
, indexToString
});
Pipeline
Führt die Schritte in einem Ablauf zusammen
Apache Spark 2 mit Java 8
PipelineModel model = pipeline.fit(train);
// Use the model to evaluate the test set.
Dataset<Row> result = model.transform(test);
Ausführen der Pipeline
Führt die Schritte in einem Ablauf zusammen
Apache Spark 2 mit Java 8
+-----+---+----+---+---+---+---+---+---+---+---+
|label|0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |
+-----+---+----+---+---+---+---+---+---+---+---+
|0 |919|1 |12 |5 |3 |6 |12 |3 |7 |12 |
|1 |1 |1092|6 |7 |1 |5 |5 |2 |15 |1 |
|2 |14 |6 |881|33 |12 |9 |16 |31 |24 |6 |
|3 |8 |5 |34 |852|8 |44 |2 |14 |24 |19 |
|4 |5 |2 |8 |3 |859|3 |19 |20 |20 |43 |
|5 |11 |9 |6 |44 |10 |748|12 |8 |24 |20 |
|6 |18 |7 |12 |2 |16 |21 |859|1 |17 |5 |
|7 |2 |15 |20 |19 |8 |8 |1 |922|11 |22 |
|8 |23 |3 |25 |31 |16 |25 |12 |19 |790|30 |
|9 |11 |2 |6 |17 |27 |15 |1 |17 |29 |884|
+-----+---+----+---+---+---+---+---+---+---+---+
Duration: ~2 minutes
Precision: 0.8806
MNIST – Ergebnisse DT
Apache Spark 2 mit Java 8
Random Forests
Apache Spark 2 mit Java 8
RandomForestClassifier rf = new RandomForestClassifier()
.setNumTrees(30)
.setLabelCol("indexedLabel")
.setFeaturesCol(assembler.getOutputCol());
Pipeline pipeline = new Pipeline()
.setStages(new PipelineStage[] {
assembler
, stringIndexer
, rf
, indexToString
});
RandomForest
Apache Spark 2 mit Java 8
+-----+----+----+---+----+----+----+----+----+---+----+
|label|0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |
+-----+----+----+---+----+----+----+----+----+---+----+
|0 |968 | |1 | | |3 |4 |1 |3 | |
|1 | |1122|4 |3 |1 | |4 | |1 | |
|2 |8 | |998|5 |4 |1 |3 |7 |4 |2 |
|3 | | |8 |974 | |7 |1 |9 |5 |6 |
|4 |1 |1 |3 |1 |940 | |6 |1 |8 |21 |
|5 |3 | |3 |17 |3 |840 |5 |5 |12 |4 |
|6 |9 |3 |3 |1 |5 |7 |926 | |4 | |
|7 |1 |5 |20 |2 |1 | | |984 |1 |14 |
|8 |2 | |7 |12 |5 |4 |4 |4 |926|10 |
|9 |7 |5 |4 |11 |14 |4 |1 |4 |6 |953 |
+-----+----+----+---+----+----+----+----+----+---+----+
Duration: ~4 minutes
Precision: 0.963
MNIST – Ergebnisse RF
Apache Spark 2 mit Java 8
Neuronale Netze
Apache Spark 2 mit Java 8
784 Pixel => Input Neuronen
800 Versteckte Neuronen
10 Ausgabe Neuronen => 10 Zielklassen (10 Ziffern)
Alle Neuronen sind mit allen Neuronen der vorherigen Schicht
verbunden
MultiLayerPerceptronClassifier
(MLPC)
Apache Spark 2 mit Java 8
int[] layers = { 784, 800, 100, 10 };
MultilayerPerceptronClassifier mlpc = new
MultilayerPerceptronClassifier()
.setLabelCol(stringIndexer.getOutputCol())
.setFeaturesCol(assembler.getOutputCol())
.setLayers(layers);
MNIST - MLPC
Apache Spark 2 mit Java 8
int[] layers = { 784, 800, 100, 10 };
MultilayerPerceptronClassifier mlpc = new
MultilayerPerceptronClassifier()
.setLabelCol(stringIndexer.getOutputCol())
.setFeaturesCol(assembler.getOutputCol())
.setLayers(layers);
MNIST - MLPC
Laufzeit: 33 Minuten
Ergebnisse verbessert sich leicht auf 96,7%
Apache Spark 2 mit Java 8
+-----+----+----+----+----+----+----+----+----+----+----+
|label|0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |
+-----+----+----+----+----+----+----+----+----+----+----+
|0 |970 | |1 | | |3 |2 |2 |1 |1 |
|1 | |1128|1 |1 | |1 |3 | |1 | |
|2 |5 |1 |1003|6 |2 |1 |3 |6 |5 | |
|3 | | |4 |987 | |7 |1 |4 |3 |4 |
|4 |1 | |2 | |958 | |5 |4 | |12 |
|5 |3 |1 | |6 |3 |869 |2 |1 |4 |3 |
|6 |4 |3 |3 | |7 |4 |936 | |1 | |
|7 | |3 |6 |3 |1 | | |1009| |6 |
|8 |2 |1 |3 |6 |4 |4 |1 |4 |945 |4 |
|9 |3 |4 | | |10 |3 |3 |6 |5 |975 |
+-----+----+----+----+----+----+----+----+----+----+----+
Duration: ~63 minutes
Precision: 0.978
MNIST – Ergebnisse MLPC
Apache Spark 2 mit Java 8
Links
Heise.de Developer:
https://heise.de/-3657735
SourceCode:
https://github.com/brainbrix/spark-tests
Apache Spark 2 mit Java 8
- Es gibt mehr ML Algorithmen als nur Neuronale Netze!
- Spark bringt viele Standard ML Algorithmen mit.
- Mächtiges Pipeline-Konzept (Modell-Persistenz und
Optimierung)
Fazit
Apache Spark 2 mit Java 8
Fragen & Antworten
Heiko Spindler
hs@heikospindler.de
Apache Spark 2 mit Java 8
• Binarizer
• Affine-Transformationen (z.B. Drehungen + / - 10 Grad)
• ...
MNIST - Optimierung
Apache Spark 2 mit Java 8
http://pjreddie.com/projects/mnist-in-csv/
http://yann.lecun.com/exdb/mnist/
http://mike.seddon.ca/using-apache-spark-neural-networks-to-
recognise-digits/…
Links

Weitere ähnliche Inhalte

Ähnlich wie Schnelles Denken - Maschinelles Lernen mit Apache Spark 2

Oracle workshop sessiontracing
Oracle workshop sessiontracingOracle workshop sessiontracing
Oracle workshop sessiontracing
ciganek
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQL
FromDual GmbH
 
Haltet den (Daten-) Dieb! Echtzeiterkennung von Anomalien in Computernetzwerk...
Haltet den (Daten-) Dieb! Echtzeiterkennung von Anomalien in Computernetzwerk...Haltet den (Daten-) Dieb! Echtzeiterkennung von Anomalien in Computernetzwerk...
Haltet den (Daten-) Dieb! Echtzeiterkennung von Anomalien in Computernetzwerk...
inovex GmbH
 

Ähnlich wie Schnelles Denken - Maschinelles Lernen mit Apache Spark 2 (20)

Oracle workshop sessiontracing
Oracle workshop sessiontracingOracle workshop sessiontracing
Oracle workshop sessiontracing
 
Nagios Conference 2007 | Vmware Monitoring by Ingo Latschner
Nagios Conference 2007 | Vmware Monitoring by Ingo LatschnerNagios Conference 2007 | Vmware Monitoring by Ingo Latschner
Nagios Conference 2007 | Vmware Monitoring by Ingo Latschner
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQL
 
Slideshare Recurrent Neural Networks (RNN)
Slideshare Recurrent Neural Networks (RNN)Slideshare Recurrent Neural Networks (RNN)
Slideshare Recurrent Neural Networks (RNN)
 
DOAG 2018 / Praktische Erfahrungen mit SPARC S7-2 Server
DOAG 2018 / Praktische Erfahrungen mit SPARC S7-2 ServerDOAG 2018 / Praktische Erfahrungen mit SPARC S7-2 Server
DOAG 2018 / Praktische Erfahrungen mit SPARC S7-2 Server
 
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
 
What's new in SQL und PL/SQL in 12.2
What's new in SQL und PL/SQL in 12.2What's new in SQL und PL/SQL in 12.2
What's new in SQL und PL/SQL in 12.2
 
LAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global DataLAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global Data
 
Bachelorarbeit paul gerber.pdf
Bachelorarbeit paul gerber.pdfBachelorarbeit paul gerber.pdf
Bachelorarbeit paul gerber.pdf
 
Boston webcast gpu_2016-12
Boston webcast gpu_2016-12Boston webcast gpu_2016-12
Boston webcast gpu_2016-12
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
Oracle 11g - Neuerungen im Überblick
Oracle 11g - Neuerungen im ÜberblickOracle 11g - Neuerungen im Überblick
Oracle 11g - Neuerungen im Überblick
 
Qualitätssicherung für APEX Anwendungen.pdf
Qualitätssicherung für APEX Anwendungen.pdfQualitätssicherung für APEX Anwendungen.pdf
Qualitätssicherung für APEX Anwendungen.pdf
 
Elastic Compute Cloud: Darf es noch ein Server mehr sein?
Elastic Compute Cloud: Darf es noch ein Server mehr sein?Elastic Compute Cloud: Darf es noch ein Server mehr sein?
Elastic Compute Cloud: Darf es noch ein Server mehr sein?
 
Warum 'ne Datenbank, wenn wir Elasticsearch haben?
Warum 'ne Datenbank, wenn wir Elasticsearch haben?Warum 'ne Datenbank, wenn wir Elasticsearch haben?
Warum 'ne Datenbank, wenn wir Elasticsearch haben?
 
Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...
Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...
Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...
 
Haltet den (Daten-) Dieb! Echtzeiterkennung von Anomalien in Computernetzwerk...
Haltet den (Daten-) Dieb! Echtzeiterkennung von Anomalien in Computernetzwerk...Haltet den (Daten-) Dieb! Echtzeiterkennung von Anomalien in Computernetzwerk...
Haltet den (Daten-) Dieb! Echtzeiterkennung von Anomalien in Computernetzwerk...
 
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & CoReady for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
 
GPU-Computing mit CUDA und OpenCL
GPU-Computing mit CUDA und OpenCLGPU-Computing mit CUDA und OpenCL
GPU-Computing mit CUDA und OpenCL
 
openstack Übersicht @GPN15
openstack Übersicht @GPN15openstack Übersicht @GPN15
openstack Übersicht @GPN15
 

Schnelles Denken - Maschinelles Lernen mit Apache Spark 2

  • 1. Apache Spark 2 mit Java 8 Schnelles Denken - Maschinelles Lernen mit Apache Spark 2 Heiko Spindler
  • 2. Apache Spark 2 mit Java 8 Apache Spark - Components
  • 3. Apache Spark 2 mit Java 8 Machine learning explores the construction and study of algorithms that can learn from data. These algorithms build models based on inputs and make predictions or decisions, rather than following explicitly programmed instructions. Machine Learning
  • 4. Apache Spark 2 mit Java 8 • Feature transformations: standardization, normalization, hashing,... • Classification: logistic regression, naive Bayes,... • Regression: generalized linear regression, isotonic regression,... • Decision trees, random forests, and gradient-boosted trees • Recommendation: alternating least squares (ALS) • Clustering: K-means, Gaussian mixtures (GMMs),... • Topic modeling: latent Dirichlet allocation (LDA) • Model evaluation and hyper-parameter tuning • Survival analysis: accelerated failure time model • Sequential pattern mining: FP-growth, association rules, PrefixSpan • Distributed linear algebra: singular value decomposition (SVD), principal component analysis (PCA),... • Statistics: summary statistics, hypothesis testing,... Spark ML Algorithmen
  • 5. Apache Spark 2 mit Java 8  DataFrames API  Transformers  Estimators  Piplines Spark ML - Elemente
  • 6. Apache Spark 2 mit Java 8 • Extractors • Transformers + Selectors • Estimators Spark ML – Pipline Elemente
  • 7. Apache Spark 2 mit Java 8 DataFrames Transformers Estimators Piplines Basics – Pipelines (Training)
  • 8. Apache Spark 2 mit Java 8 ML Extractors – Transformers Tokenizer StopWordsRemover nn-gram Binarizer PCA PolynomialExpansion Discrete Cosine Transform (DCT) StringIndexer IndexToString OneHotEncoder VectorIndexer Normalizer StandardScaler MinMaxScaler MaxAbsScaler Bucketizer ElementwiseProduct SQLTransformer VectorAssembler QuantileDiscretizer
  • 9. Apache Spark 2 mit Java 8 Bietet Test- und Trainingsdaten für die Erkennung bzw. Klassifizierung von handgeschriebenen Zeichen (0-9). 50.000 Trainingsdaten mit Klassifizierung 10.000 Testdaten mit Klassifizierung Auf der Webseite sind mehrere Lösungsansätze mit Vorgehen und Ergebnissen verlinkt. MNIST – Aufgabenstellung
  • 10. Apache Spark 2 mit Java 8 MNIST – Beispiele der Ziffern
  • 11. Apache Spark 2 mit Java 8 MNIST - Online http://myselph.de/neuralNet.html
  • 12. Apache Spark 2 mit Java 8 Datenformat ist auf der Webseite dokumentiert. Es gibt Skripte, die z.B. CSV erzeugen. Label plus Pixeldaten: Komma-separiert für alle 28 x 28 Pixel: 0: Schwarz, 255: Weiss Header: Label, p0, p1, … p783 MNIST - Daten
  • 13. Apache Spark 2 mit Java 8 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 89,207,253,255,206,88,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,76,215,252,252,253,252,246,122,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225,239,1 80,55,119,246,252,230,25,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,225,195,0,0,0,122,246,252,112,0,0 ,0,0,0,0,0,0,0... MNIST – Daten Beispiel
  • 14. Apache Spark 2 mit Java 8 ● Einlesen der Daten ● Vorbereiten der Daten: Zerlegen in Label und Feature-Vektor ● Konfigurieren des ML Algorithmus ● Trainieren des Models ● Prüfen des Models mit Testdaten ● Auswertung Schritte
  • 15. Apache Spark 2 mit Java 8 Vorbereitung
  • 16. Apache Spark 2 mit Java 8 SparkSession spark = SparkSession .builder() .appName("JavaMNISTDT") .master("local[3]") .getOrCreate(); Spark konfigurieren
  • 17. Apache Spark 2 mit Java 8 DataFrameReader reader = spark.read() .option("header", "true") .option("delimiter", ",") .option("inferSchema", true) .format("com.databricks.spark.csv"); Dataset<Row> test = reader .load(Const.BASE_DIR_DATASETS+"mnist_test2.csv") .filter(e -> Math.random() > 0.00 ); Dataset<Row> train = reader .load(Const.BASE_DIR_DATASETS+"mnist_train2.csv") .filter(e -> Math.random() > 0.00 ); CSV Einlesen
  • 18. Apache Spark 2 mit Java 8 StructType schema = train.schema(); String[] inputFeatures = Arrays.copyOfRange(schema.fieldNames(), 1, schema.fieldNames().length); VectorAssembler assembler = new VectorAssembler() .setInputCols( inputFeatures ) .setOutputCol( "features" ); Feature Vector erzeugen
  • 19. Apache Spark 2 mit Java 8 StringIndexerModel stringIndexer = new StringIndexer() .setInputCol("label") .setHandleInvalid("skip") .setOutputCol("indexedLabel") .fit(train); StringIndexer erzeugen Bildet die Labels als numerische Werte ab.
  • 20. Apache Spark 2 mit Java 8 Entscheidungsbaum
  • 21. Apache Spark 2 mit Java 8 DecisionTreeClassifier dt = new DecisionTreeClassifier() .setMaxDepth(28) .setSeed(12345L) .setLabelCol(stringIndexer.getOutputCol()) .setFeaturesCol(assembler.getOutputCol()); DT erzeugen
  • 22. Apache Spark 2 mit Java 8 IndexToString indexToString = new IndexToString() .setInputCol("prediction") .setOutputCol("predictedLabel") .setLabels(stringIndexer.labels()); IndexToString Rücktransformation der numerischen Labels auf Sprechende / fachliche Bezeichnungen
  • 23. Apache Spark 2 mit Java 8 Pipeline pipeline = new Pipeline() .setStages(new PipelineStage[] { assembler , stringIndexer , dt , indexToString }); Pipeline Führt die Schritte in einem Ablauf zusammen
  • 24. Apache Spark 2 mit Java 8 PipelineModel model = pipeline.fit(train); // Use the model to evaluate the test set. Dataset<Row> result = model.transform(test); Ausführen der Pipeline Führt die Schritte in einem Ablauf zusammen
  • 25. Apache Spark 2 mit Java 8 +-----+---+----+---+---+---+---+---+---+---+---+ |label|0 |1 |2 |3 |4 |5 |6 |7 |8 |9 | +-----+---+----+---+---+---+---+---+---+---+---+ |0 |919|1 |12 |5 |3 |6 |12 |3 |7 |12 | |1 |1 |1092|6 |7 |1 |5 |5 |2 |15 |1 | |2 |14 |6 |881|33 |12 |9 |16 |31 |24 |6 | |3 |8 |5 |34 |852|8 |44 |2 |14 |24 |19 | |4 |5 |2 |8 |3 |859|3 |19 |20 |20 |43 | |5 |11 |9 |6 |44 |10 |748|12 |8 |24 |20 | |6 |18 |7 |12 |2 |16 |21 |859|1 |17 |5 | |7 |2 |15 |20 |19 |8 |8 |1 |922|11 |22 | |8 |23 |3 |25 |31 |16 |25 |12 |19 |790|30 | |9 |11 |2 |6 |17 |27 |15 |1 |17 |29 |884| +-----+---+----+---+---+---+---+---+---+---+---+ Duration: ~2 minutes Precision: 0.8806 MNIST – Ergebnisse DT
  • 26. Apache Spark 2 mit Java 8 Random Forests
  • 27. Apache Spark 2 mit Java 8 RandomForestClassifier rf = new RandomForestClassifier() .setNumTrees(30) .setLabelCol("indexedLabel") .setFeaturesCol(assembler.getOutputCol()); Pipeline pipeline = new Pipeline() .setStages(new PipelineStage[] { assembler , stringIndexer , rf , indexToString }); RandomForest
  • 28. Apache Spark 2 mit Java 8 +-----+----+----+---+----+----+----+----+----+---+----+ |label|0 |1 |2 |3 |4 |5 |6 |7 |8 |9 | +-----+----+----+---+----+----+----+----+----+---+----+ |0 |968 | |1 | | |3 |4 |1 |3 | | |1 | |1122|4 |3 |1 | |4 | |1 | | |2 |8 | |998|5 |4 |1 |3 |7 |4 |2 | |3 | | |8 |974 | |7 |1 |9 |5 |6 | |4 |1 |1 |3 |1 |940 | |6 |1 |8 |21 | |5 |3 | |3 |17 |3 |840 |5 |5 |12 |4 | |6 |9 |3 |3 |1 |5 |7 |926 | |4 | | |7 |1 |5 |20 |2 |1 | | |984 |1 |14 | |8 |2 | |7 |12 |5 |4 |4 |4 |926|10 | |9 |7 |5 |4 |11 |14 |4 |1 |4 |6 |953 | +-----+----+----+---+----+----+----+----+----+---+----+ Duration: ~4 minutes Precision: 0.963 MNIST – Ergebnisse RF
  • 29. Apache Spark 2 mit Java 8 Neuronale Netze
  • 30. Apache Spark 2 mit Java 8 784 Pixel => Input Neuronen 800 Versteckte Neuronen 10 Ausgabe Neuronen => 10 Zielklassen (10 Ziffern) Alle Neuronen sind mit allen Neuronen der vorherigen Schicht verbunden MultiLayerPerceptronClassifier (MLPC)
  • 31. Apache Spark 2 mit Java 8 int[] layers = { 784, 800, 100, 10 }; MultilayerPerceptronClassifier mlpc = new MultilayerPerceptronClassifier() .setLabelCol(stringIndexer.getOutputCol()) .setFeaturesCol(assembler.getOutputCol()) .setLayers(layers); MNIST - MLPC
  • 32. Apache Spark 2 mit Java 8 int[] layers = { 784, 800, 100, 10 }; MultilayerPerceptronClassifier mlpc = new MultilayerPerceptronClassifier() .setLabelCol(stringIndexer.getOutputCol()) .setFeaturesCol(assembler.getOutputCol()) .setLayers(layers); MNIST - MLPC Laufzeit: 33 Minuten Ergebnisse verbessert sich leicht auf 96,7%
  • 33. Apache Spark 2 mit Java 8 +-----+----+----+----+----+----+----+----+----+----+----+ |label|0 |1 |2 |3 |4 |5 |6 |7 |8 |9 | +-----+----+----+----+----+----+----+----+----+----+----+ |0 |970 | |1 | | |3 |2 |2 |1 |1 | |1 | |1128|1 |1 | |1 |3 | |1 | | |2 |5 |1 |1003|6 |2 |1 |3 |6 |5 | | |3 | | |4 |987 | |7 |1 |4 |3 |4 | |4 |1 | |2 | |958 | |5 |4 | |12 | |5 |3 |1 | |6 |3 |869 |2 |1 |4 |3 | |6 |4 |3 |3 | |7 |4 |936 | |1 | | |7 | |3 |6 |3 |1 | | |1009| |6 | |8 |2 |1 |3 |6 |4 |4 |1 |4 |945 |4 | |9 |3 |4 | | |10 |3 |3 |6 |5 |975 | +-----+----+----+----+----+----+----+----+----+----+----+ Duration: ~63 minutes Precision: 0.978 MNIST – Ergebnisse MLPC
  • 34. Apache Spark 2 mit Java 8 Links Heise.de Developer: https://heise.de/-3657735 SourceCode: https://github.com/brainbrix/spark-tests
  • 35. Apache Spark 2 mit Java 8 - Es gibt mehr ML Algorithmen als nur Neuronale Netze! - Spark bringt viele Standard ML Algorithmen mit. - Mächtiges Pipeline-Konzept (Modell-Persistenz und Optimierung) Fazit
  • 36. Apache Spark 2 mit Java 8 Fragen & Antworten Heiko Spindler hs@heikospindler.de
  • 37. Apache Spark 2 mit Java 8 • Binarizer • Affine-Transformationen (z.B. Drehungen + / - 10 Grad) • ... MNIST - Optimierung
  • 38. Apache Spark 2 mit Java 8 http://pjreddie.com/projects/mnist-in-csv/ http://yann.lecun.com/exdb/mnist/ http://mike.seddon.ca/using-apache-spark-neural-networks-to- recognise-digits/… Links