Du hast deinen AdBlocker an?

Es wäre ein Traum, wenn du ihn für t3n.de deaktivierst. Wir zeigen dir gerne, wie das geht. Und natürlich erklären wir dir auch, warum uns das so wichtig ist. Digitales High-five, deine t3n-Redaktion

Ratgeber

Crash-Kurs mit Python und Machine Learning: Einstieg in Scikit-Learn

(Foto: RAYphotographer / Shutterstock)

Machine Learning und KI sind Buzzwords in der Tech-Szene. Doch was oft sehr kompliziert und abstrakt klingt, muss es gar nicht sein.

Ein Beispiel für einen ersten Einstieg in Machine Learning ist die Library Scikit-Learn für Python.

Wieso Scikit?

Scikit ist sicherlich nicht die Library mit der größten Auswahl an Machine-Learning-Algorithmen. Aber dafür ist die Dokumentation für Scikit sehr gut, und die Community auf Stackoverflow ebenfalls sehr lebendig, was vor allem Einsteigern hilft.

Ich persönlich habe Scikit im Rahmen meiner Masterarbeit zum ersten Mal genutzt. Ich wollte versuchen, Bot-Tweets über sprachliche Auffälligkeiten herauszufiltern, und habe dafür den Ansatz der Stylometrics verwendet. Das heißt also, dass zum Beispiel die Anzahl an bestimmten Satzzeichen, die Menge an verschiedenen Wörtern und die durchschnittliche Länge von Worten in Bot-Tweets anders ist als bei „normalen“ Tweets.

Für diesen Usecase habe ich verschiedene Algorithmen ausprobiert, darunter den klassische Decision Tree, Regressionsanalysen oder auch Support Vector Machine, das immer wieder als eines der besten Tools benannt wird. Am Ende bin ich jedoch bei einem Random Forrest Classifier gelandet, der eine Art Durchschnitt von Decision Trees ist, die aus Teilgruppen des Datensatzes gebildet werden.

Hier kurz mein Vorgehen Step by Step:

Step 0: Libraries laden

Wir benötigen die Python Libraries Pandas und Scikit-Learn, die am besten über die Command Line mit Pip Install installiert werden. Anschließend werden im Modul selbst folgendermaßen die Libraries geladen:

import pandas as pd
 import re
 #importing all machine learning libraries
 from sklearn.ensemble import RandomForestClassifier
 from sklearn.model_selection import train_test_split
 from sklearn import metrics
 from sklearn.metrics import confusion_matrix

Step1: Datensatz aufbauen

Da es hier hauptsächlich um Scikit geht, will ich nicht lange darüber sprechen, wie genau ich den Datensatz zusammengestellt habe: Ganz einfach gesagt besteht er zur Hälfte aus Tweets, die ich als von Bots gesendet klassifiziert habe, und zur Hälfte aus Tweets von normalen Usern. Jeder Tweet ist eine Reihe von Zahlen in einem CSV-Dokument.

testdata=pd.read_csv("botRELcounts.csv")
 (testdata.head())

Step 2: Datensatz aufteilen

Dann definiere ich meine abhängige Variable, speichere sie separat und spalte nochmal den Datensatz in zwei Teile. Einen Teil, mit dem ich den Algorithmus trainiere, und einen anderen Teil, mit dem ich seine Performance teste. Hier gibt es verschiedene Herangehensweisen. Ich benutze hier den klassischen Ansatz des Hold-Outs (X Prozent eines Datensatzes werden zurückgehalten und für das Prüfen genutzt). Es gibt aber auch die Möglichkeit von Cross-Validation. Der Datensatz wird dafür in Y Teile geteilt, jedes Mal bleibt ein anderer Teil als Hold-Out zurück, und mit dem Rest wird der Algorithmus trainiert. Am Ende wird dann über Y Durchläufe das Ergebnis gemittelt.

#loading in the dataset
 X = testdata

#defining the dependent variable as the botornot column in the dataset
 y=X['botornot']

#removing user_id and bot_or_not column from the dataset with the independent variables
 del X['botornot']
 del X['user_id']
 (X.head())

#splitting the dataset
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)

#defining rf as the RandomForestClassifier
 clf=RandomForestClassifier()

Step 3: Datensatz einlesen, Algorithmus trainieren und Performance prüfen

Das alles ist erstaunlich einfach in Scikit-Learn. Es wird dafür schlichtweg der eine Teil des Datensatzes fürs Aufbauen des Algorithmus eingelesen und mit dem anderen eine Vorhersage getroffen. Anschließend lässt sich über die Metrics sehen, wie genau der Algorithmus ist.

Was Mut macht: Mit dem relativ einfachen Ansatz hatte ich bereits eine Genauigkeit von rund 70 Prozent im Vergleich zu einem rein zufälligen Raten mit einer Genauigkeit von 50 Prozent. Entsprechend sind die Beispiele, die folgen, aus diesem Projekt.

#train the dataset with fitting
 clf.fit(X_train, y_train)
 #then run the prediction with the rest of the dataset
 pred_test = clf.predict(X_test)
 print ("Mean absolute error:",metrics.mean_absolute_error(y_test,pred_test))
 print ("Accuracy:",metrics.accuracy_score(y_test,pred_test))
 print (confusion_matrix(y_test, pred_test))

Step 4: Vorhersagen machen

Nun ist das Modell aufgebaut, und entsprechend könnte man sich jetzt an einem neuen Datensatz von Tweets an Vorhersagen versuchen. Dazu muss man schlichtweg die Zeile

pred_test = clf.predict(X_test)

nochmals auf den neuen Datensatz anwenden. Wichtig: Der Datensatz muss genau so viele Variablen/Spalten haben und genau auf die gleiche Art und Weise angeordnet sein.

Viel Spaß beim Ausprobieren! Der ganze Code ist hinterlegt auf Github.

Finde einen Job, den du liebst

Bitte beachte unsere Community-Richtlinien

Schreib den ersten Kommentar!

Melde dich mit deinem t3n-Account an oder fülle die unteren Felder aus.

Abbrechen