Weiter zum Inhalt

Machine Learning in R für Einsteiger

Dieses kurze Tutorial führt dich in die Grundlagen des Machine Learnings in R ein und zeigt dir, wie du mit KNN arbeitest.
Aktualisiert 18. Sept. 2026  · 15 Min. lesen

Mit KI erkunden

ChatGPTClaudePerplexity

Einführung: Machine Learning in R

Machine Learning ist ein Teilgebiet der Informatik, das sich mit der Entwicklung von Algorithmen befasst, die aus Daten lernen. Typische Aufgaben sind Konzepterkennung, Funktionslernen bzw. „Predictive Modeling“, Clustering sowie das Auffinden vorhersagerelevanter Muster. Das Lernen erfolgt auf Basis vorhandener Daten, die zum Beispiel durch Erfahrung oder Anweisungen erhoben wurden. Die Idee: Mit wachsender Erfahrung verbessert sich die Lernleistung. Das Ziel ist, das Lernen so weit zu automatisieren, dass wir Menschen nicht mehr eingreifen müssen.

Dieses kurze Tutorial führt dich in die Grundlagen des Machine Learnings in R ein. Konkret zeigt es dir, wie du in R mit dem bekannten Algorithmus „KNN“ bzw. k-Nearest Neighbors arbeitest.

Wenn du lieber einem Kurs folgen willst, schau dir unseren Kurs Introduction to Machine Learning with R oder DataCamps Unsupervised Learning in R an!

R für k-Nearest Neighbors (KNN) nutzen

Der KNN-Algorithmus gehört zu den einfachsten Machine-Learning-Verfahren und ist ein Beispiel für instanzbasiertes Lernen: Neue Datenpunkte werden auf Basis gespeicherter, gelabelter Instanzen klassifiziert.

Genauer gesagt wird die Distanz zwischen den gespeicherten Daten und der neuen Instanz über ein Ähnlichkeitsmaß berechnet. Üblich sind Abstandsmaße wie die euklidische oder Manhattan-Distanz sowie die Kosinus-Ähnlichkeit.

Anders formuliert: Für jeden neuen Datenpunkt, den du ins System gibst, wird seine Ähnlichkeit zu den bereits vorhandenen Daten berechnet.

Mit diesem Ähnlichkeitswert führst du dann Predictive Modeling durch. Das kann Klassifikation sein, also das Zuweisen eines Labels bzw. einer Klasse, oder Regression, also das Zuweisen eines numerischen Werts. Ob Klassifikation oder Regression, hängt davon ab, wie du dein KNN-Modell aufsetzt.

Der k-Nearest-Neighbors-Algorithmus erweitert das Grundprinzip: Nachdem die Distanzen des neuen Punkts zu allen gespeicherten Punkten berechnet wurden, werden sie sortiert und die k nächsten Nachbarn bestimmt. Deren Labels werden eingesammelt, und für Klassifikation oder Regression wird eine Mehrheits- oder gewichtete Abstimmung verwendet.

Heißt: Je höher der Score eines bereits gespeicherten Nachbarn, desto wahrscheinlicher erhält die neue Instanz dessen Klassifikation. Bei Regression ist der zugewiesene Wert der Mittelwert der k nächsten Nachbarn.



Schritt eins. Beschaffe deine Daten

Machine Learning startet in der Regel mit beobachteten Daten. Du kannst deinen eigenen Datensatz verwenden oder in anderen Quellen stöbern.

In R enthaltene Datensätze

In diesem Tutorial nutzen wir den Iris-Datensatz, einen Klassiker im Machine Learning. Er ist in R enthalten, du kannst ihn dir in der Konsole mit folgendem Befehl ansehen:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJpcmlzIn0=

UC Irvine Machine Learning Repository

Wenn du den Datensatz lieber separat herunterladen möchtest, findest du ihn im UC Irvine Machine Learning Repository unter „Iris“.


Tipp: Schau dir nicht nur den Datenordner an, sondern auch die Datenbeschreibung!

Mit folgendem Befehl lädst du die Daten anschließend ein:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFJlYWQgaW4gYGlyaXNgIGRhdGFcbmlyaXMgPC0gcmVhZC5jc3YodXJsKFwiaHR0cDovL2FyY2hpdmUuaWNzLnVjaS5lZHUvbWwvbWFjaGluZS1sZWFybmluZy1kYXRhYmFzZXMvaXJpcy9pcmlzLmRhdGFcIiksIFxuICAgICAgICAgICAgICAgICBoZWFkZXIgPSBGQUxTRSkgXG5cbiMgUHJpbnQgZmlyc3QgbGluZXNcbmhlYWQoaXJpcylcblxuIyBBZGQgY29sdW1uIG5hbWVzXG5uYW1lcyhpcmlzKSA8LSBjKFwiU2VwYWwuTGVuZ3RoXCIsIFwiU2VwYWwuV2lkdGhcIiwgXCJQZXRhbC5MZW5ndGhcIiwgXCJQZXRhbC5XaWR0aFwiLCBcIlNwZWNpZXNcIilcblxuIyBDaGVjayB0aGUgcmVzdWx0XG5pcmlzIn0=

Dieser Befehl liest die .csv- („Comma Separated Values“-)Datei von der Website ein. Das Argument header steht auf FALSE, da in dieser Quelle keine Spaltennamen mitgeliefert werden.

Statt Attributnamen siehst du beim Inspizieren des iris-Objekts mit head() eventuell „V1“, „V2“ usw. Diese werden automatisch vergeben.

Um die Arbeit zu erleichtern, vergibst du eigene Spaltennamen über names(), das die Namen eines Objekts liest oder setzt. Füge die gewünschten Attributnamen zusammen. Im obigen Code sind das Sepal.Length, Sepal.Width, Petal.Length, Petal.Width und Species.

Diese Namen kommen nicht aus dem Nichts: In der verlinkten Beschreibung des Datensatzes sind sie aufgeführt.

Learn Python for Data Science With DataCamp

Schritt zwei. Verstehe deine Daten

Nachdem du den Iris-Datensatz in RStudio geladen hast, verschaffe dir ein gründliches Verständnis deiner Daten. Nur anschauen oder darüber lesen reicht zum Start nicht aus!

Werde praktisch: Erkunde und visualisiere den Datensatz und eigne dir bei Bedarf zusätzliches Domänenwissen an.

Wahrscheinlich bringst du das nötige Fachwissen schon mit. Zur Erinnerung: Jede Blüte hat Kelch- und Blütenblätter. Die Kelchblätter umschließen die Blütenblätter und sind meist grün und laubartig, die Blütenblätter sind in der Regel farbig. Bei Irisblüten ist das etwas anders, wie das folgende Bild zeigt:

machine learning R

Erster Überblick über den Datensatz

Verschaffe dir zunächst mit Diagrammen wie Histogrammen oder Boxplots ein Bild. Besonders aufschlussreich sind hier jedoch Scatterplots: So erkennst du, wie stark eine Variable von einer anderen beeinflusst wird.

Mit anderen Worten: Du prüfst, ob zwischen zwei Variablen Korrelationen bestehen.

Scatterplots kannst du zum Beispiel mit dem ggvis-Paket erstellen.

Hinweis: Lade zuerst das Paket ggvis:

# Load in `ggvis`
library(ggvis)

# Iris scatter plot
iris %>% ggvis(~Sepal.Length, ~Sepal.Width, fill = ~Species) %>% layer_points()

correlation iris

Du siehst eine starke Korrelation zwischen Kelchblatt-Länge und -Breite bei Setosa, während sie bei Virginica und Versicolor schwächer ausfällt: Die Punkte sind stärker gestreut und bilden – anders als bei Setosa – keinen dichten Cluster.

Der Scatterplot für Blütenblatt-Länge und -Breite zeigt ein ähnliches Bild:

iris %>% ggvis(~Petal.Length, ~Petal.Width, fill = ~Species) %>% layer_points()

scatterplot iris

Hier deutet der Plot auf eine positive Korrelation zwischen Blütenblatt-Länge und -Breite für alle im Iris-Datensatz enthaltenen Arten hin. Um diese Hypothese abzusichern, kannst du weiter testen:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIE92ZXJhbGwgY29ycmVsYXRpb24gYFBldGFsLkxlbmd0aGAgYW5kIGBQZXRhbC5XaWR0aGBcbmNvcihpcmlzJFBldGFsLkxlbmd0aCwgaXJpcyRQZXRhbC5XaWR0aClcblxuIyBSZXR1cm4gdmFsdWVzIG9mIGBpcmlzYCBsZXZlbHMgXG54PWxldmVscyhpcmlzJFNwZWNpZXMpXG5cbiMgUHJpbnQgU2V0b3NhIGNvcnJlbGF0aW9uIG1hdHJpeFxucHJpbnQoeFsxXSlcbmNvcihpcmlzW2lyaXMkU3BlY2llcz09eFsxXSwxOjRdKVxuXG4jIFByaW50IFZlcnNpY29sb3IgY29ycmVsYXRpb24gbWF0cml4XG5wcmludCh4WzJdKVxuY29yKGlyaXNbaXJpcyRTcGVjaWVzPT14WzJdLDE6NF0pXG5cbiMgUHJpbnQgVmlyZ2luaWNhIGNvcnJlbGF0aW9uIG1hdHJpeFxucHJpbnQoeFszXSlcbmNvcihpcmlzW2lyaXMkU3BlY2llcz09eFszXSwxOjRdKSJ9

Kombiniert man alle drei Arten, ist die Korrelation etwas stärker als getrennt betrachtet: Insgesamt liegt sie bei 0,96, für Versicolor bei 0,79. Setosa und Virginica weisen – gerundet – Korrelationen von 0,31 bzw. 0,32 zwischen Blütenblatt-Länge und -Breite auf.

Tipp: Interessiert dich ggvis, Visualisierung oder speziell Histogramme? Sieh dir unser Histogramm-Tutorial und/oder den ggvis-Kurs an.

Nach der visuellen Übersicht kannst du dir den Datensatz auch direkt ausgeben lassen, indem du Folgendes eingibst:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFJldHVybiBhbGwgYGlyaXNgIGRhdGFcbmlyaXNcblxuIyBSZXR1cm4gZmlyc3QgNSBsaW5lcyBvZiBgaXJpc2BcbmhlYWQoaXJpcylcblxuIyBSZXR1cm4gc3RydWN0dXJlIG9mIGBpcmlzYFxuc3RyKGlyaXMpIn0=

Wie du an der Ausgabe siehst, ist das keine ideale Methode: Der Datensatz flutet die Konsole und erschwert den Überblick. Besser prüfst du ihn mit head(iris) oder str(iris).

Mit dem letzten Befehl siehst du klar den Datentyp num und die drei Ausprägungen des Attributs Species als Faktor. Das ist praktisch, denn viele ML-Klassifikatoren in R erwarten, dass das Zielmerkmal als Faktor kodiert ist.

Merke: Faktorvariablen repräsentieren kategoriale Merkmale in R und können nur eine begrenzte Zahl an Werten annehmen.

Ein schneller Blick auf Species zeigt eine 50-50-50-Verteilung. Willst du die prozentuale Verteilung sehen, lass dir eine Proportionstabelle ausgeben:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIERpdmlzaW9uIG9mIGBTcGVjaWVzYFxudGFibGUoaXJpcyRTcGVjaWVzKSBcblxuIyBQZXJjZW50dWFsIGRpdmlzaW9uIG9mIGBTcGVjaWVzYFxucm91bmQocHJvcC50YWJsZSh0YWJsZShpcmlzJFNwZWNpZXMpKSAqIDEwMCwgZGlnaXRzID0gMSkifQ==

Hinweis: round rundet die Werte des ersten Arguments prop.table(table(iris$Species))*100 auf die angegebene Stellenzahl, hier eine Nachkommastelle. Passe das über digits an.

Tieferes Verständnis deiner Daten

Bleib nicht beim High-Level-Überblick! R bietet dir mit summary() eine kompakte Statistik: Minimum, 1. Quartil, Median, Mittelwert, 3. Quartil und Maximum für numerische Spalten; für die Klassenvariable die Faktorhäufigkeiten:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFN1bW1hcnkgb3ZlcnZpZXcgb2YgYGlyaXNgXG5zdW1tYXJ5KC4uLi4pIFxuXG4jIFJlZmluZWQgc3VtbWFyeSBvdmVydmlld1xuc3VtbWFyeSguLi4uW2MoXCJQZXRhbC5XaWR0aFwiLCBcIlNlcGFsLldpZHRoXCIpXSkiLCJzb2x1dGlvbiI6IiMgU3VtbWFyeSBvdmVydmlldyBvZiBgaXJpc2BcbnN1bW1hcnkoaXJpcykgXG5cbiMgUmVmaW5lZCBzdW1tYXJ5IG92ZXJ2aWV3XG5zdW1tYXJ5KGlyaXNbYyhcIlBldGFsLldpZHRoXCIsIFwiU2VwYWwuV2lkdGhcIildKSIsInNjdCI6InRlc3RfZnVuY3Rpb24oXCJzdW1tYXJ5XCIsYXJncz1cIm9iamVjdFwiLCBpbmRleD0xKVxudGVzdF9mdW5jdGlvbihcInN1bW1hcnlcIiwgYXJncz1cIm9iamVjdFwiLCBpbmRleD0yKVxuc3VjY2Vzc19tc2coXCJHcmVhdCBqb2IhXCIpIn0=

Wie du siehst, wurde der Befehl um c() ergänzt: Die Spalten petal width und sepal width werden zusammengefasst, und es wird nur für diese beiden eine Zusammenfassung angefordert.

Schritt drei. Wie geht es weiter?

Nun, da du deine Daten gut verstehst, definierst du sinnvolle Use Cases. Was könnten dir die Daten beibringen, welche Erkenntnisse sind realistisch? Daraus leitest du ab, welche Algorithmen sich eignen, um die gewünschten Ergebnisse zu erzielen.

Tipp: Je besser du deine Daten kennst, desto leichter schätzt du passende Use Cases und wählst den geeigneten Algorithmus.

In diesem Tutorial nutzen wir Iris für eine Klassifikation, also ein Beispiel für Predictive Modeling. Das letzte Attribut Species ist die Zielvariable, die du vorhersagen willst.

Hinweis: Du kannst für eine Regression mit KNN auch eine der numerischen Spalten als Zielvariable wählen.

Schritt vier. Richte deine Arbeitsumgebung ein

Viele ML-Algorithmen sind in R nicht standardmäßig enthalten. Du wirst in der Regel passende Pakete installieren müssen, bevor du loslegst.


Tipp: Du weißt, welchen Algorithmus du verwenden willst, aber nicht, welches Paket? Eine recht vollständige Übersicht der ML-Pakete in R findest du hier.

Für KNN nutzen wir in diesem Tutorial das Paket class:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KC4uLi4uKSIsInNvbHV0aW9uIjoibGlicmFyeShjbGFzcykiLCJzY3QiOiJ0ZXN0X2Z1bmN0aW9uKFwibGlicmFyeVwiLCBhcmdzPVwicGFja2FnZVwiKVxuc3VjY2Vzc19tc2coXCJBd2Vzb21lIGpvYiFcIikifQ==

Falls du es noch nicht installiert hast, geht das schnell mit:

install.packages("<package name>")

Merke – Nerd-Tipp: Ob ein Paket installiert ist, prüfst du so:

any(grepl("<name of your package>", installed.packages()))

Schritt fünf. Bereite deine Daten vor

Nach der Exploration und dem Setup geht es an die Modellierung. Vorher solltest du die Daten vorbereiten. Zwei wichtige Schritte: falls nötig normalisieren und in Trainings- und Testdaten aufteilen.

Normalisierung

Als Teil der Vorbereitung kann es nötig sein, die Daten zu normalisieren, um sie konsistent zu machen. Für den Einstieg reicht: Normalisierung erleichtert KNN das Lernen. Es gibt zwei Arten:

  • Beispiel-Normalisierung passt jede Instanz individuell an,
  • Feature-Normalisierung skaliert jedes Merkmal einheitlich über alle Instanzen.

Wann normalisieren?

Kurz: Wenn du vermutest, dass die Skalen nicht vergleichbar sind.

Das siehst du leicht in der Ausgabe von summary(). Schau dir die Min- und Max-Werte aller numerischen Attribute an. Hat ein Attribut einen deutlich größeren Wertebereich, dominiert es die Distanzberechnung – dann normalisieren.

Beispiel: Hast du nur X und Y, X reicht von 1 bis 1000, Y von 1 bis 100, dann überwiegt X in der Distanzfunktion.

Durch Normalisierung bringst du alle Merkmale in einen vergleichbaren Bereich, sodass Variablen mit großem Range die Distanz nicht übermäßig beeinflussen.

Tipp: Sieh dir summary(iris) an und prüfe, ob eine Normalisierung nötig ist.

Beim Iris-Datensatz ist sie nicht nötig: Sepal.Length liegt zwischen 4,3 und 7,9, Sepal.Width zwischen 2 und 4,4, Petal.Length zwischen 1 und 6,9 und Petal.Width zwischen 0,1 und 2,5. Alles bewegt sich grob zwischen 0,1 und 7,9 – akzeptabel.

Trotzdem lohnt es sich, Normalisierung und ihre Wirkung zu verstehen – besonders, wenn du neu im ML bist. Eine Feature-Normalisierung kannst du z. B. mit einer eigenen Funktion normalize() umsetzen.

Danach nutzt du sie in einem weiteren Befehl: lapply() wendet normalize auf jede Spalte an und liefert eine Liste, die du mit as.data.frame() in ein Dataframe verwandelst:

YourNormalizedDataSet <- as.data.frame(lapply(YourDataSet, normalize))

Probier das im DataCamp-Light-Block unten aus!

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIEJ1aWxkIHlvdXIgb3duIGBub3JtYWxpemUoKWAgZnVuY3Rpb25cbm9ybWFsaXplIDwtIGZ1bmN0aW9uKHgpIHtcbnVtIDwtIHggLSBtaW4oeClcbmRlbm9tIDwtIG1heCh4KSAtIG1pbigpeFxucmV0dXJuIChudW0vZGVub20pXG59XG5cbiMgTm9ybWFsaXplIHRoZSBgaXJpc2AgZGF0YVxuaXJpc19ub3JtIDwtIC4uLi4uLi4uLi4uLi4oLi4uLi4oaXJpc1sxOjRdLCBub3JtYWxpemUpKVxuXG4jIFN1bW1hcml6ZSBgaXJpc19ub3JtYFxuc3VtbWFyeSguLi4uLi4uLi4pIiwic29sdXRpb24iOiIjIEJ1aWxkIHlvdXIgb3duIGBub3JtYWxpemUoKWAgZnVuY3Rpb25cbm9ybWFsaXplIDwtIGZ1bmN0aW9uKHgpIHtcbnVtIDwtIHggLSBtaW4oeClcbmRlbm9tIDwtIG1heCh4KSAtIG1pbigpeFxucmV0dXJuIChudW0vZGVub20pXG59XG5cbiMgTm9ybWFsaXplIHRoZSBgaXJpc2AgZGF0YVxuaXJpc19ub3JtIDwtIGFzLmRhdGEuZnJhbWUobGFwcGx5KGlyaXNbMTo0XSwgbm9ybWFsaXplKSlcblxuIyBTdW1tYXJpemUgYGlyaXNfbm9ybWBgXG5zdW1tYXJ5KGlyaXNfbm9ybSkiLCJzY3QiOiJ0ZXN0X29iamVjdChcIm5vcm1hbGl6ZVwiKVxudGVzdF9vYmplY3QoXCJpcmlzX25vcm1cIilcbnRlc3RfZnVuY3Rpb24oXCJzdW1tYXJ5XCIsIGFyZ3M9XCJvYmplY3RcIikifQ==

Für Iris würdest du normalize auf die vier numerischen Attribute (Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) anwenden und das Ergebnis in ein Dataframe schreiben.

Tipp: Vergleiche zur Veranschaulichung den Normalisierungs-Output mit der Zusammenfassung aus Schritt zwei.

Trainings- und Testdaten

Um die Modellleistung zu bewerten, teilst du den Datensatz in zwei Teile: Training und Test.

Mit dem ersten trainierst du das System, mit dem zweiten evaluierst du es. Üblich ist eine disjunkte Aufteilung, z. B. 2/3 Training und 1/3 Test.

Ein letzter Blick zeigt: Wenn du blind aufteilst, riskierst du, dass im Training nicht alle drei Arten vertreten sind, z. B. keine „Virginica“. Dann würde das Modell unbekannte Instanzen nur als „Setosa“ oder „Versicolor“ einstufen – ohne Kenntnis einer dritten Art.

Ergebnis: falsche Vorhersagen im Test.

Sorge also dafür, dass alle drei Klassen im Training vorkommen und in etwa gleich häufig sind, damit du keine Klasse bevorzugst.

Für die Aufteilung setzt du zuerst einen Seed – die Startzahl für R’s Zufallszahlengenerator. Vorteil: Mit demselben Seed erhältst du dieselbe Zufallsfolge und damit reproduzierbare Ergebnisse.

set.seed(1234)

Dann mischst du den Datensatz und stellst sicher, dass Training und Test je Anteile aller Arten enthalten.

Mit sample() ziehst du eine Stichprobe in der Größe der Zeilenzahl (150). Du ziehst mit Zurücklegen aus einem Vektor mit zwei Elementen und weist jeder Zeile eine 1 oder 2 zu – mit den Wahrscheinlichkeiten 0,67 bzw. 0,33.

ind <- sample(2, nrow(iris), replace=TRUE, prob=c(0.67, 0.33))

Hinweis: replace ist TRUE, d. h. nach jeder Ziehung wird der Ursprungsvektor wiederhergestellt. So kann für jede weitere Zeile erneut 1 oder 2 zugewiesen werden. Die Auswahlwahrscheinlichkeiten legst du über prob fest. Der Seed ist weiterhin auf 1234 gesetzt.

Merke: Da 2/3 Training und 1/3 Test vorgesehen sind, vergibst du 1 mit 0,67 und 2 mit 0,33 Wahrscheinlichkeit.

Mit der in ind gespeicherten Stichprobe definierst du dann Trainings- und Testdaten:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6InNldC5zZWVkKDEyMzQpXG5pbmQgPC0gc2FtcGxlKDIsIG5yb3coaXJpcyksIHJlcGxhY2U9VFJVRSwgcHJvYj1jKDAuNjcsIDAuMzMpKSIsInNhbXBsZSI6IiMgQ29tcG9zZSB0cmFpbmluZyBzZXRcbmlyaXMudHJhaW5pbmcgPC0gLi4uLltpbmQ9PTEsIDE6NF1cblxuIyBJbnNwZWN0IHRyYWluaW5nIHNldFxuaGVhZCguLi4uLi4uLi4uLi4uLi4uKVxuXG4jIENvbXBvc2UgdGVzdCBzZXRcbmlyaXMudGVzdCA8LSAuLi4uW2luZD09MiwgMTo0XVxuXG4jIEluc3BlY3QgdGVzdCBzZXRcbmhlYWQoLi4uLi4uLi4uLi4pIiwic29sdXRpb24iOiIjIENvbXBvc2UgdHJhaW5pbmcgc2V0XG5pcmlzLnRyYWluaW5nIDwtIGlyaXNbaW5kPT0xLCAxOjRdXG5cbiMgSW5zcGVjdCB0cmFpbmluZyBzZXRcbmhlYWQoaXJpcy50cmFpbmluZylcblxuIyBDb21wb3NlIHRlc3Qgc2V0XG5pcmlzLnRlc3QgPC0gaXJpc1tpbmQ9PTIsIDE6NF1cblxuIyBJbnNwZWN0IHRlc3Qgc2V0XG5oZWFkKGlyaXMudGVzdCkiLCJzY3QiOiJ0ZXN0X29iamVjdChcImlyaXMudHJhaW5pbmdcIilcbnRlc3RfZnVuY3Rpb24oXCJoZWFkXCIsIGFyZ3M9XCJ4XCIsIGluZGV4PTEpXG50ZXN0X29iamVjdChcImlyaXMudGVzdFwiKVxudGVzdF9mdW5jdGlvbihcImhlYWRcIiwgYXJncz1cInhcIiwgaW5kZXg9MikifQ==

Hinweis: Neben der 2/3–1/3-Aufteilung nimmst du nicht alle Attribute in die Feature-Matrix auf. Konkret nutzt du Sepal.Length, Sepal.Width, Petal.Length und Petal.Width. Species ist die Zielvariable. Sie wird nicht als Feature genutzt, aber natürlich für die Bewertung benötigt.

Speichere daher die Klassenlabels als Faktorvektoren und teile sie ebenfalls in Training und Test auf:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6InNldC5zZWVkKDEyMzQpXG5pbmQgPC0gc2FtcGxlKDIsIG5yb3coaXJpcyksIHJlcGxhY2U9VFJVRSwgcHJvYj1jKDAuNjcsIDAuMzMpKSIsInNhbXBsZSI6IiMgQ29tcG9zZSBgaXJpc2AgdHJhaW5pbmcgbGFiZWxzXG5pcmlzLnRyYWluTGFiZWxzIDwtIGlyaXNbaW5kPT0xLDVdXG5cbiMgSW5zcGVjdCByZXN1bHRcbnByaW50KGlyaXMudHJhaW5MYWJlbHMpXG5cbiMgQ29tcG9zZSBgaXJpc2AgdGVzdCBsYWJlbHNcbmlyaXMudGVzdExhYmVscyA8LSBpcmlzW2luZD09MiwgNV1cblxuIyBJbnNwZWN0IHJlc3VsdFxucHJpbnQoaXJpcy50ZXN0TGFiZWxzKSIsInNvbHV0aW9uIjoiIyBDb21wb3NlIGBpcmlzYCB0cmFpbmluZyBsYWJlbHNcbmlyaXMudHJhaW5MYWJlbHMgPC0gaXJpc1tpbmQ9PTEsNV1cblxuIyBJbnNwZWN0IHJlc3VsdFxucHJpbnQoaXJpcy50cmFpbkxhYmVscylcblxuIyBDb21wb3NlIGBpcmlzYCB0ZXN0IGxhYmVsc1xuaXJpcy50ZXN0TGFiZWxzID0gIGlyaXNbaW5kPT0yLCA1XVxuXG4jIEluc3BlY3QgcmVzdWx0XG5wcmludChpcmlzLnRlc3RMYWJlbHMpIiwic2N0IjoidGVzdF9vYmplY3QoXCJpcmlzLnRyYWluTGFiZWxzXCIpXG50ZXN0X2Z1bmN0aW9uKFwicHJpbnRcIiwgYXJncz1cInhcIiwgaW5kZXg9MSlcbnRlc3Rfb2JqZWN0KFwiaXJpcy50ZXN0TGFiZWxzXCIpXG50ZXN0X2Z1bmN0aW9uKFwicHJpbnRcIiwgYXJncz1cInhcIiwgaW5kZXg9MikifQ==

Schritt sechs. Das eigentliche KNN-Modell

Classifier bauen

Nach der Vorbereitung sind alle Trainingsdaten bereit – gelernt wurde bisher noch nicht. Jetzt suchst du die k nächsten Nachbarn für deine Testinstanzen.

Am einfachsten gelingt das mit knn(), das standardmäßig die euklidische Distanz nutzt, um die k nächsten Nachbarn zu einem neuen, unbekannten Punkt zu finden. k legst du selbst fest.

Wie erwähnt, erfolgt die Klassifikation per Mehrheits- oder gewichteter Abstimmung. Bei Klassifikation „gewinnt“ der Datenpunkt mit dem höchsten Score, und die unbekannte Instanz erhält dessen Label. Bei Stimmengleichheit wird zufällig entschieden.

Hinweis: k ist oft ungerade, um Tie-Breaks zu vermeiden.

Für den Classifier ergänzt du knn() um die nötigen Argumente, z. B. so:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoY2xhc3MpXG5zZXQuc2VlZCgxMjM0KVxuaW5kIDwtIHNhbXBsZSgyLCBucm93KGlyaXMpLCByZXBsYWNlPVRSVUUsIHByb2I9YygwLjY3LCAwLjMzKSlcbmlyaXMudHJhaW5pbmcgPC0gaXJpc1tpbmQ9PTEsIDE6NF1cbmlyaXMudGVzdCA8LSBpcmlzW2luZD09MiwgMTo0XVxuaXJpcy50cmFpbkxhYmVscyA8LSBpcmlzW2luZD09MSw1XSIsInNhbXBsZSI6IiMgQnVpbGQgdGhlIG1vZGVsXG5pcmlzX3ByZWQgPC0gLi4uKHRyYWluID0gaXJpcy50cmFpbmluZywgdGVzdCA9IGlyaXMudGVzdCwgY2wgPSBpcmlzLnRyYWluTGFiZWxzLCBrPTMpXG5cbiMgSW5zcGVjdCBgaXJpc19wcmVkYFxuLi4uLi4uLi4uIiwic29sdXRpb24iOiIjIEJ1aWxkIHRoZSBtb2RlbFxuaXJpc19wcmVkIDwtIGtubih0cmFpbiA9IGlyaXMudHJhaW5pbmcsIHRlc3QgPSBpcmlzLnRlc3QsIGNsID0gaXJpcy50cmFpbkxhYmVscywgaz0zKVxuXG4jIEluc3BlY3QgYGlyaXNfcHJlZGBcbmlyaXNfcHJlZCIsInNjdCI6InRlc3RfZnVuY3Rpb24oXCJrbm5cIiwgYXJncz1jKFwidHJhaW5cIiwgXCJ0ZXN0XCIsIFwiY2xcIiwgXCJrXCIpKVxudGVzdF9vdXRwdXRfY29udGFpbnMoXCJpcmlzX3ByZWRcIiwgaW5jb3JyZWN0X21zZz1cIkRpZCB5b3UgaW5zcGVjdCBgaXJpc19wcmVkYD9cIilcbnN1Y2Nlc3NfbXNnKFwiQ29uZ3JhdHMhIFlvdSd2ZSBzdWNjZXNzZnVsbHkgYnVpbHQgeW91ciBmaXJzdCBtYWNoaW5lIGxlYXJuaW5nIG1vZGVsIVwiKSJ9

In iris_pred speicherst du die Ausgabe von knn(), das Trainingsdaten, Testdaten, Trainingslabels und die gewünschte Zahl an Nachbarn entgegennimmt. Das Ergebnis ist ein Faktorvektor mit den vorhergesagten Klassen für jede Zeile der Testdaten.

Hinweis: Die Testlabels gibst du nicht mit – sie dienen zur Bewertung der Vorhersagen.

Beim Inspizieren von iris_pred siehst du die vorhergesagten Klassen für jede Testzeile.

Schritt sieben. Evaluation deines Modells

Ein zentraler Schritt ist die Bewertung der Modellleistung. Du analysierst also, wie korrekt die Vorhersagen sind.

Für eine erste Einschätzung vergleichst du iris_pred einfach mit den zuvor definierten Testlabels:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoY2xhc3MpXG5zZXQuc2VlZCgxMjM0KVxuaW5kIDwtIHNhbXBsZSgyLCBucm93KGlyaXMpLCByZXBsYWNlPVRSVUUsIHByb2I9YygwLjY3LCAwLjMzKSlcbmlyaXMudHJhaW5pbmcgPC0gaXJpc1tpbmQ9PTEsIDE6NF1cbmlyaXMudGVzdCA8LSBpcmlzW2luZD09MiwgMTo0XVxuaXJpcy50cmFpbkxhYmVscyA8LSBpcmlzW2luZD09MSw1XVxuaXJpcy50ZXN0TGFiZWxzIDwtIGlyaXNbaW5kPT0yLCA1XVxuaXJpc19wcmVkIDwtIGtubih0cmFpbiA9IGlyaXMudHJhaW5pbmcsIHRlc3QgPSBpcmlzLnRlc3QsIGNsID0gaXJpcy50cmFpbkxhYmVscywgaz0zKSIsInNhbXBsZSI6IiMgUHV0IGBpcmlzLnRlc3RMYWJlbHNgIGluIGEgZGF0YSBmcmFtZVxuaXJpc1Rlc3RMYWJlbHMgPC0gZGF0YS5mcmFtZSguLi4uLi4uLi4uLi4uLi4uKVxuXG4jIE1lcmdlIGBpcmlzX3ByZWRgIGFuZCBgaXJpcy50ZXN0TGFiZWxzYCBcbm1lcmdlIDwtIGRhdGEuZnJhbWUoLi4uLi4uLi4uLCAuLi4uLi4uLi4uLi4uLi4pXG5cbiMgU3BlY2lmeSBjb2x1bW4gbmFtZXMgZm9yIGBtZXJnZWBcbm5hbWVzKC4uLi4uKSA8LSBjKFwiUHJlZGljdGVkIFNwZWNpZXNcIiwgXCJPYnNlcnZlZCBTcGVjaWVzXCIpXG5cbiMgSW5zcGVjdCBgbWVyZ2VgIFxubWVyZ2UiLCJzb2x1dGlvbiI6IiMgUHV0IGBpcmlzLnRlc3RMYWJlbHNgIGluIGEgZGF0YSBmcmFtZVxuaXJpc1Rlc3RMYWJlbHMgPC0gZGF0YS5mcmFtZShpcmlzLnRlc3RMYWJlbHMpXG5cbiMgTWVyZ2UgYGlyaXNfcHJlZGAgYW5kIGBpcmlzLnRlc3RMYWJlbHNgIFxubWVyZ2UgPC0gZGF0YS5mcmFtZShpcmlzX3ByZWQsIGlyaXMudGVzdExhYmVscylcblxuIyBTcGVjaWZ5IGNvbHVtbiBuYW1lcyBmb3IgYG1lcmdlYFxubmFtZXMobWVyZ2UpIDwtIGMoXCJQcmVkaWN0ZWQgU3BlY2llc1wiLCBcIk9ic2VydmVkIFNwZWNpZXNcIilcblxuIyBJbnNwZWN0IGBtZXJnZWAgXG5tZXJnZSIsInNjdCI6InRlc3Rfb2JqZWN0KFwiaXJpc1Rlc3RMYWJlbHNcIilcbnRlc3RfZGF0YV9mcmFtZShcIm1lcmdlXCIsIGNvbHVtbnM9YyhcIlByZWRpY3RlZCBTcGVjaWVzXCIsIFwiT2JzZXJ2ZWQgU3BlY2llc1wiKSwgdW5kZWZpbmVkX21zZz1cIkRpZCB5b3UgY3JlYXRlIGEgZGF0YSBmcmFtZSB3aXRoIGBpcmlzX3ByZWRgIGFuZCBgaXJpcy50ZXN0TGFiZWxzYCBhcyBkYXRhP1wiLCB1bmRlZmluZWRfY29sc19tc2c9XCJEaWQgeW91IGRlZmluZSB0aGUgY29sdW1ucyBgUHJlZGljdGVkIFNwZWNpZXNgIGFuZCBgT2JzZXJ2ZWQgU3BlY2llc2A/XCIsIGluY29ycmVjdF9tc2c9XCJTb21ldGhpbmcgaXNuJ3QgcmlnaHQgd2l0aCB0aGUgYG1lcmdlYCBkYXRhIGZyYW1lLiBBcmUgeW91IHN1cmUgeW91IGRlZmluZWQgdGhlIGNvcnJlY3QgZGF0YSBhbmQgY29sdW1uIG5hbWVzP1wiKVxudGVzdF9vdXRwdXRfY29udGFpbnMoXCJtZXJnZVwiKSJ9

Das Modell trifft recht genaue Vorhersagen, bis auf eine Fehlklassifikation in Zeile 29: „Versicolor“ statt „Virginica“.

Das ist ein erster Hinweis auf die Leistung. Für eine tiefergehende Analyse kannst du das Paket gmodels nutzen:

install.packages("package name")

Falls bereits installiert, einfach laden:

library(gmodels)

Anschließend erstellst du eine Kreuztabelle (Contingency Table), um die Beziehung zwischen den echten Klassen (iris.testLabels) und den Modellvorhersagen (iris_pred) zu untersuchen:

CrossTable(x = iris.testLabels, y = iris_pred, prop.chisq=FALSE)

Crosstable iris knn

Hinweis: Das Argument prop.chisq steuert, ob der Chi-Quadrat-Beitrag jeder Zelle ausgegeben wird. Die Summe dieser Beiträge ergibt die Chi-Quadrat-Statistik, mit der man prüft, ob die Differenz zwischen beobachteten und erwarteten Werten signifikant ist.

Aus der Tabelle liest du die Zahl richtiger und falscher Vorhersagen ab: Eine Testinstanz wurde als Versicolor vorhergesagt, war aber tatsächlich Virginica (erste Zeile der „Virginica“-Spalte bei iris.testLabels). In allen anderen Fällen lag das Modell richtig. Fazit: Die Leistung ist gut, eine Verbesserung ist nicht zwingend nötig!

Learn Python for Data Science With DataCamp

Machine Learning in R mit caret

Du hast KNN als Beispiel für überwachtes Lernen in R kennengelernt. Wie du gesehen hast, kann ML in R komplex werden: viele Algorithmen, unterschiedliche Syntax, etliche Parameter. Paketnamen und jeweilige Syntax zu merken, kann mühsam sein.

Hier hilft caret („Classification and Regression Training“): ein einheitliches Interface zu einer Vielzahl von ML-Algorithmen – ähnlich wie scikit-learn in Python.

Im Folgenden gehst du die gleichen Schritte wie oben, nutzt diesmal aber caret für die Klassifikation. Vieles hast du bereits erledigt: Daten verstehen, explorieren, Workspace vorbereiten. Jetzt geht’s ans Preprocessing mit caret!

Wie zuvor kannst du die Wirkung der Normalisierung untersuchen – später im Tutorial folgt ein Beispiel.

Als Nächstes teilst du die Daten in Training und Test auf. Diesmal gehst du etwas anders vor: Du splittest anhand der Labels in iris$Species. Außerdem nutzt du ein 75/25-Verhältnis.

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoY2FyZXQpXG5zZXQuc2VlZCgxMjM0KSIsInNhbXBsZSI6IiMgQ3JlYXRlIGluZGV4IHRvIHNwbGl0IGJhc2VkIG9uIGxhYmVscyAgXG5pbmRleCA8LSBjcmVhdGVEYXRhUGFydGl0aW9uKGlyaXMkU3BlY2llcywgcD0wLjc1LCBsaXN0PUZBTFNFKVxuXG4jIFN1YnNldCB0cmFpbmluZyBzZXQgd2l0aCBpbmRleFxuaXJpcy50cmFpbmluZyA8LSBpcmlzWy4uLi4uLi4sXVxuXG4jIFN1YnNldCB0ZXN0IHNldCB3aXRoIGluZGV4XG5pcmlzLnRlc3QgPC0gaXJpc1stLi4uLi4uLi4uLF0iLCJzb2x1dGlvbiI6IiMgQ3JlYXRlIGluZGV4IHRvIHNwbGl0IGJhc2VkIG9uIGxhYmVscyAgXG5pbmRleCA8LSBjcmVhdGVEYXRhUGFydGl0aW9uKGlyaXMkU3BlY2llcywgcD0wLjc1LCBsaXN0PUZBTFNFKVxuXG4jIFN1YnNldCB0cmFpbmluZyBzZXQgd2l0aCBpbmRleFxuaXJpcy50cmFpbmluZyA8LSBpcmlzW2luZGV4LF1cblxuIyBTdWJzZXQgdGVzdCBzZXQgd2l0aCBpbmRleFxuaXJpcy50ZXN0IDwtIGlyaXNbLWluZGV4LF0iLCJzY3QiOiJ0ZXN0X29iamVjdChcImluZGV4XCIpXG50ZXN0X29iamVjdChcImlyaXMudHJhaW5pbmdcIilcbnRlc3Rfb2JqZWN0KFwiaXJpcy50ZXN0XCIpXG5zdWNjZXNzX21zZyhcIkF3ZXNvbWUhIFdlbGwgZG9uZSFcIikifQ==

Jetzt kannst du Modelle trainieren! caret umfasst sehr viele Algorithmen. Wenn du unsicher bist, welche verfügbar sind, liste sie mit names(getModelInfo()) auf. Wähle dann einen Algorithmus und trainiere mit train():

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoY2FyZXQpXG5zZXQuc2VlZCgxMjM0KVxuaW5kZXggPC0gY3JlYXRlRGF0YVBhcnRpdGlvbihpcmlzJFNwZWNpZXMsIHA9MC43NSwgbGlzdD1GQUxTRSlcbmlyaXMudHJhaW5pbmcgPC0gaXJpc1tpbmRleCxdXG5pcmlzLnRlc3QgPC0gaXJpc1staW5kZXgsXSIsInNhbXBsZSI6IiMgT3ZlcnZpZXcgb2YgYWxnb3Mgc3VwcG9ydGVkIGJ5IGNhcmV0XG5uYW1lcyhnZXRNb2RlbEluZm8oKSlcblxuIyBUcmFpbiBhIG1vZGVsXG5tb2RlbF9rbm4gPC0gdHJhaW4oaXJpcy50cmFpbmluZ1ssIDE6NF0sIGlyaXMudHJhaW5pbmdbLCA1XSwgbWV0aG9kPSdrbm4nKSJ9

Andere Modelle zu trainieren ist jetzt simpel: Ändere nur das Argument method, z. B. so:

model_cart <- train(iris.training[, 1:4], iris.training[, 5], method='rpart2')

Nachdem das Modell trainiert ist, sagst du die Labels des Testsets vorher und bewertest die Leistung:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoY2FyZXQpXG5zZXQuc2VlZCgxMjM0KVxuaW5kZXggPC0gY3JlYXRlRGF0YVBhcnRpdGlvbihpcmlzJFNwZWNpZXMsIHA9MC43NSwgbGlzdD1GQUxTRSlcbmlyaXMudHJhaW5pbmcgPC0gaXJpc1tpbmRleCxdXG5pcmlzLnRlc3QgPC0gaXJpc1staW5kZXgsXVxubW9kZWxfa25uIDwtIHRyYWluKGlyaXMudHJhaW5pbmdbLCAxOjRdLCBpcmlzLnRyYWluaW5nWywgNV0sIG1ldGhvZD0na25uJykiLCJzYW1wbGUiOiIjIFByZWRpY3QgdGhlIGxhYmVscyBvZiB0aGUgdGVzdCBzZXRcbnByZWRpY3Rpb25zPC1wcmVkaWN0KG9iamVjdD1tb2RlbF9rbm4saXJpcy50ZXN0WywxOjRdKVxuXG4jIEV2YWx1YXRlIHRoZSBwcmVkaWN0aW9uc1xudGFibGUocHJlZGljdGlvbnMpXG5cbiMgQ29uZnVzaW9uIG1hdHJpeCBcbmNvbmZ1c2lvbk1hdHJpeChwcmVkaWN0aW9ucyxpcmlzLnRlc3RbLDVdKSIsInNvbHV0aW9uIjoiIyBQcmVkaWN0IHRoZSBsYWJlbHMgb2YgdGhlIHRlc3Qgc2V0XG5wcmVkaWN0aW9uczwtcHJlZGljdC50cmFpbihvYmplY3Q9bW9kZWxfa25uLGlyaXMudGVzdFssMTo0XSwgdHlwZT1cInJhd1wiKVxuXG4jIEV2YWx1YXRlIHRoZSBwcmVkaWN0aW9uc1xudGFibGUocHJlZGljdGlvbnMpXG5cbiMgQ29uZnVzaW9uIG1hdHJpeCBcbmNvbmZ1c2lvbk1hdHJpeChwcmVkaWN0aW9ucyxpcmlzLnRlc3RbLDVdKSIsInNjdCI6InRlc3Rfb2JqZWN0KFwicHJlZGljdGlvbnNcIilcbnRlc3RfZnVuY3Rpb24oXCJ0YWJsZVwiKVxudGVzdF9mdW5jdGlvbihcImNvbmZ1c2lvbk1hdHJpeFwiKVxuc3VjY2Vzc19tc2coXCJXZWxsIGRvbmUhXCIpIn0=

Zudem kannst du – wie zuvor – testen, welchen Effekt Preprocessing wie Skalierung und Zentrierung hat. Führe dazu diesen Code aus:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImxpYnJhcnkoY2FyZXQpXG5zZXQuc2VlZCgxMjM0KVxuaW5kZXggPC0gY3JlYXRlRGF0YVBhcnRpdGlvbihpcmlzJFNwZWNpZXMsIHA9MC43NSwgbGlzdD1GQUxTRSlcbmlyaXMudHJhaW5pbmcgPC0gaXJpc1tpbmRleCxdXG5pcmlzLnRlc3QgPC0gaXJpc1staW5kZXgsXSIsInNhbXBsZSI6IiMgVHJhaW4gdGhlIG1vZGVsIHdpdGggcHJlcHJvY2Vzc2luZ1xubW9kZWxfa25uIDwtIHRyYWluKGlyaXMudHJhaW5pbmdbLCAxOjRdLCBpcmlzLnRyYWluaW5nWywgNV0sIG1ldGhvZD0na25uJywgcHJlUHJvY2Vzcz1jKFwiY2VudGVyXCIsIFwic2NhbGVcIikpXG5cbiMgUHJlZGljdCB2YWx1ZXNcbnByZWRpY3Rpb25zPC1wcmVkaWN0LnRyYWluKG9iamVjdD1tb2RlbF9rbm4saXJpcy50ZXN0WywxOjRdLCB0eXBlPVwicmF3XCIpXG5cbiMgQ29uZnVzaW9uIG1hdHJpeFxuY29uZnVzaW9uTWF0cml4KHByZWRpY3Rpb25zLGlyaXMudGVzdFssNV0pIiwic29sdXRpb24iOiIjIFRyYWluIHRoZSBtb2RlbCB3aXRoIHByZXByb2Nlc3Npbmdcbm1vZGVsX2tubiA8LSB0cmFpbihpcmlzLnRyYWluaW5nWywgMTo0XSwgaXJpcy50cmFpbmluZ1ssIDVdLCBtZXRob2Q9J2tubicsIHByZVByb2Nlc3M9YyhcImNlbnRlclwiLCBcInNjYWxlXCIpKVxuXG4jIFByZWRpY3QgdmFsdWVzXG5wcmVkaWN0aW9uczwtcHJlZGljdC50cmFpbihvYmplY3Q9bW9kZWxfa25uLGlyaXMudGVzdFssMTo0XSwgdHlwZT1cInJhd1wiKVxuXG4jIENvbmZ1c2lvbiBtYXRyaXhcbmNvbmZ1c2lvbk1hdHJpeChwcmVkaWN0aW9ucyxpcmlzLnRlc3RbLDVdKSIsInNjdCI6InRlc3Rfb2JqZWN0KFwibW9kZWxfa25uXCIsIGV2YWw9RkFMU0UpXG50ZXN0X29iamVjdChcInByZWRpY3Rpb25zXCIpXG50ZXN0X2Z1bmN0aW9uKFwiY29uZnVzaW9uTWF0cml4XCIsIGFyZ3M9YyhcImRhdGFcIiwgXCJyZWZlcmVuY2VcIikpXG5zdWNjZXNzX21zZyhcIkNvbmdyYXR1bGF0aW9ucyEgWW91IGhhdmUgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCB0aGUgdHV0b3JpYWwhXCIpIn0=

Weiter zu Big Data

Glückwunsch! Du hast das Tutorial erfolgreich abgeschlossen.

Im Fokus stand der grundlegende KNN-Algorithmus in R. Der verwendete Iris-Datensatz ist klein und überschaubar. Du hast gesehen, wie du jeden Schritt selbst durchführst, aber auch, wie dir eine einheitliche Schnittstelle wie caret die Arbeit erleichtert.

Und es geht noch viel mehr!

Wenn du mit den Grundlagen und weiteren ML-Algorithmen experimentiert hast, lohnt es sich, tiefer in R und Datenanalyse einzusteigen.

Themen
R
Datenwissenschaft
Maschinelles Lernen

R-Kurse

Kurs

Einführung in R

4 Std.
3.1M
Beherrsche die Grundlagen der Datenanalyse in R, einschließlich Vektoren, Listen und Datenrahmen, und übe R mit echten Datensätzen.
Details anzeigenRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow