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

(Foto: RAYphotographer / Shutterstock)
Ein Beispiel für einen ersten Einstieg in Machine Learning ist die Library Scikit-Learn für Python.
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:
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
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())
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()
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))
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.
Bitte beachte unsere Community-Richtlinien
Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.
Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.
Dein t3n-Team