Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
efinf:blcks2017:bigdatab:start [2018/03/06 12:16] Simon Knaus [L7] |
efinf:blcks2017:bigdatab:start [2018/03/08 07:54] (current) Simon Knaus |
||
---|---|---|---|
Line 593: | Line 593: | ||
=== Ziele === | === Ziele === | ||
+ | * Jeder kann die zentralen Begriffen erklären / beschreiben (-> | ||
* kNN mit Python und Scikit durchführen | * kNN mit Python und Scikit durchführen | ||
- | * Jeder kann die zentralen Begriffen erklären / beschreiben (-> | + | * Eigene Ziffer als GIF klassifizieren oder Random Forests durchführen |
+ | === Aufträge === | ||
+ | * Bei installiertem Python 2.7. die notwendigen Module installieren (siehe [[# | ||
+ | * kNN in Python durchführen, | ||
+ | * Wer soweit durch: | ||
+ | * Eigene Ziffer als GIF klassifizieren mit der Funktion '' | ||
+ | * Random Forests durchführen und Klassifikationsgüte mit kNN vergleichen | ||
+ | * kNN für verschiedene '' | ||
Line 613: | Line 621: | ||
</ | </ | ||
- | Ein wichtiges Konstrukt sind sogenannte numpy-Arrays: | + | Ein wichtiges Konstrukt sind sogenannte numpy-Arrays: |
<code python> | <code python> | ||
Line 625: | Line 633: | ||
trainingsdata[0,: | trainingsdata[0,: | ||
</ | </ | ||
+ | === kNN in Python === | ||
Nachher kann relativ einfach mit Python kNN implementiert werden: | Nachher kann relativ einfach mit Python kNN implementiert werden: | ||
<code python knn_scikit.py> | <code python knn_scikit.py> | ||
Line 631: | Line 639: | ||
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
from sklearn.neighbors import KNeighborsClassifier | from sklearn.neighbors import KNeighborsClassifier | ||
+ | from sklearn.metrics import confusion_matrix | ||
from numpy import genfromtxt, | from numpy import genfromtxt, | ||
from imageio import imread | from imageio import imread | ||
Line 670: | Line 679: | ||
print sum(predicted_class - test_digits_class == 0) / float(len(predicted_class)) | print sum(predicted_class - test_digits_class == 0) / float(len(predicted_class)) | ||
+ | |||
+ | ## Konfusionsmatrix berechnen | ||
+ | mat_knn = confusion_matrix(test_digits_class, | ||
+ | print(mat_knn) | ||
# Aquivalent der Funktion getPixelListFromFilePath | # Aquivalent der Funktion getPixelListFromFilePath | ||
Line 682: | Line 695: | ||
</ | </ | ||
+ | === Implementierung von Random Forests === | ||
+ | <code python knn_rf_scikit.py> | ||
+ | # | ||
+ | # -*- coding: utf-8 -*- | ||
- | dsfasdfj | + | from sklearn.neighbors import KNeighborsClassifier |
+ | from numpy import genfromtxt, asarray, sum | ||
+ | from sklearn.metrics import confusion_matrix | ||
+ | from sklearn.ensemble import RandomForestClassifier | ||
+ | |||
+ | ####################################################################### | ||
+ | # | ||
+ | # Daten einlesen. Für Random Forests (rf) und k-Nearest-Neighbors (knn) | ||
+ | # | ||
+ | ####################################################################### | ||
+ | |||
+ | |||
+ | # Trainingdaten einlesen | ||
+ | |||
+ | trainingdata = genfromtxt(' | ||
+ | |||
+ | # Testdaten einlesen | ||
+ | |||
+ | testdata = genfromtxt(' | ||
+ | |||
+ | # Trainingsfeatures und -klassen trennen. | ||
+ | # Kolonne 0:255: Features, Kolonne 256 Klasse | ||
+ | # Fuer Ekrlaerung der Syntax siehe: | ||
+ | # https:// | ||
+ | train_digits_features = trainingdata[: | ||
+ | train_digits_class = trainingdata[: | ||
+ | |||
+ | # Testfeatures und - klassen trennen. | ||
+ | test_digits_features = testdata[: , : -1] | ||
+ | test_digits_class = testdata[: , -1] | ||
+ | |||
+ | ####################################################################### | ||
+ | # | ||
+ | # kNN trainieren, vorhersagen und evaluieren. | ||
+ | # | ||
+ | ####################################################################### | ||
+ | |||
+ | |||
+ | #kNN initilisieren mit 10 Nachbarn | ||
+ | knn = KNeighborsClassifier(n_neighbors = 10) | ||
+ | |||
+ | # kNN traininieren | ||
+ | knn.fit(train_digits_features, | ||
+ | |||
+ | # Vorhersage | ||
+ | predicted_class_knn = knn.predict(test_digits_features) | ||
+ | |||
+ | # Konfusionsmatrix | ||
+ | mat_knn = confusion_matrix(test_digits_class, | ||
+ | print(mat_knn)# | ||
+ | guete_knn = sum(mat_knn.diagonal()) / float(sum(mat_knn)) | ||
+ | print "Guete kNN:", guete_knn | ||
+ | |||
+ | |||
+ | ####################################################################### | ||
+ | # | ||
+ | # Random Forests trainieren, vorhersagen und evaluieren. | ||
+ | # | ||
+ | ####################################################################### | ||
+ | |||
+ | rf = RandomForestClassifier(n_estimators = 200, random_state = 17) | ||
+ | rf.fit(train_digits_features, | ||
+ | predicted_class_rf = rf.predict(test_digits_features) | ||
+ | |||
+ | mat_rf = confusion_matrix(test_digits_class, | ||
+ | print(mat_rf) | ||
+ | |||
+ | # Güte | ||
+ | guete_rf = sum(mat_rf.diagonal()) / float(sum(mat_rf)) | ||
+ | print "Guete rf:", guete_rf | ||
+ | </ | ||
Line 870: | Line 957: | ||
print "Guete rf:", guete_rf | print "Guete rf:", guete_rf | ||
</ | </ | ||
- | <!-- | + | |
==== L8 ==== | ==== L8 ==== | ||
Prüfung und ANN | Prüfung und ANN | ||
Line 876: | Line 963: | ||
=== Evaluation === | === Evaluation === | ||
- | * {{efinf: | + | * {{efinf: |
* [[https:// | * [[https:// | ||
Line 886: | Line 973: | ||
=== Feedback === | === Feedback === | ||
https:// | https:// | ||
- | --> | + |