Die Ausgabe zeigt einen Ausschnitt des Datensatzes mit 10 Zeilen und allen Spalten. Wenn du bfriday.head(x,y) versuchst, erhältst du einen Fehler, weil die Gesamtzahl der Spalten bereits fest ist. bfriday.head() gibt ebenfalls eine Ausgabe zurück, ohne Fehler, und wählt Zeilen und Spalten standardmäßig.
bfriday.shape #gibt die Dimensionen des Datensatzes (Zeilen, Spalten) ausBereitgestellt von
bfriday['Stay_In_Current_City_Years'].value_counts()# zählt die Anzahl der Werte pro Bereich, bfriday['City_Category'].value_counts()Bereitgestellt von
11938212101838395285584726074398Name: Stay_In_Current_City_Years,dtype: int64
Bereitgestellt von
bfriday.isnull().sum()#berechnet die Anzahl der Nullwerte je Spalte im DatensatzBereitgestellt von
b =['Product_Category_2','Product_Category_3']#wir erstellen hier eine Liste mit den Spalten Product_Category_2 und Product_Category_3Bereitgestellt von
for i in b:exec("bfriday.%s.fillna(bfriday.%s.value_counts().idxmax(), inplace=True)"%(i,i))Bereitgestellt von
Jetzt haben wir fehlende Werte mit dem häufigsten Wert aufgefüllt. Alternativ kannst du das auch explizit schreiben: bfriday.Product_Category_2.fillna(bfriday.Product_Category_2.value_counts().idxmax(), inplace=True). Genauso lässt sich die Spalte Product_Category_3 bereinigen.
Wir haben die Spalte Purchase aus dem Datensatz entfernt und ein Array X erstellt, das alle Spalten außer Purchase enthält.
from sklearn.preprocessing import LabelEncoder#Jetzt importieren wir den Encoder aus sklearn
LE = LabelEncoder()#Wir encodieren die Daten per LabelEncoder, um die Verarbeitung zu erleichternBereitgestellt von
X = X.apply(LE.fit_transform)#Hier wenden wir den Encoder auf die Daten anBereitgestellt von
Nun wandeln wir die Daten mit pandas in numerische Formen um, da der Umgang mit numerischen Daten einfacher ist als mit kategorialen Daten.
Y = bfriday["Purchase"]#Wir erstellen ein Array Y aus der Spalte PurchaseBereitgestellt von
from sklearn.preprocessing import StandardScaler
SS = StandardScaler()Bereitgestellt von
Standardisiere Features, indem der Mittelwert entfernt und auf Einheitsvarianz skaliert wird. Zentrierung und Skalierung passieren für jedes Feature unabhängig, basierend auf den Statistiken des Trainingsdatensatzes. Mittelwert und Standardabweichung werden gespeichert und mit der transform-Methode auf spätere Daten angewendet.
Xs = SS.fit_transform(X)#Du musst X in eine numerische Darstellung transformieren (nicht zwingend binär), da alle ML-Methoden mit Zahlenmatrizen arbeiten.Bereitgestellt von
from sklearn.decomposition import PCA
pc = PCA(4)#4 gibt die gewünschte Anzahl der Komponenten anBereitgestellt von
Lineare Dimensionsreduktion mittels Singular Value Decomposition projiziert die Daten in einen Raum geringerer Dimension. PCA ist eine der bekanntesten Methoden zur Dimensionsreduktion und hilft, ML-Algorithmen zu beschleunigen. Du solltest PCA nur auf den Trainingsdaten fitten. Die Hauptkomponentenanalyse (PCA)
PCA ersetzt die ursprünglichen Variablen durch neue Variablen, die Hauptkomponenten, die paarweise unkorreliert sind und abnehmende Varianzen aufweisen. Entsprechend ist die Kovarianzmatrix zwischen den aus den Daten extrahierten Hauptkomponenten diagonal.
Wir haben hier etwas Spannendes namens RandomizedPCA
Hinweis: Verwende RandomizedPCA niemals für Sparse-Daten. RandomizedPCA auf Sparse-Daten ist falsch, weil wir die Daten zum Zentrieren nicht ohne Verlust der Sparsity verschieben können, was bei realistisch großen Sparse-Daten den Speicher sprengen kann. Zentrierung ist für PCA jedoch erforderlich.
principalComponents = pc.fit_transform(X)#Wir wenden PCA auf die Daten an/fitten die Daten auf PCABereitgestellt von
from sklearn.model_selection import KFold
kf = KFold(20)#Erstellt Train/Test-Indizes zum Splitten in Trainings- und Test-Sets. Teilt den Datensatz in k aufeinanderfolgende Folds (standardmäßig ohne Shuffling).#Jeder Fold dient einmal als Validierung, während die übrigen k - 1 Folds das Trainingsset bilden.Bereitgestellt von
for a,b in kf.split(principalDf):
X_train, X_test = Xs[a],Xs[b]
y_train, y_test = Y[a],Y[b]Bereitgestellt von
Mit Regression prüfst du zwei Dinge: (1) Sagt ein Set an Prädiktorvariablen die Zielvariable gut vorher? (2) Welche Variablen sind signifikante Prädiktoren und wie beeinflussen sie das Ergebnis — erkennbar an Betrag und Vorzeichen der Koeffizienten? Diese Schätzungen erklären die Beziehung zwischen einer abhängigen und einer oder mehreren unabhängigen Variablen. Die einfachste Regressionsformel mit einer abhängigen und einer unabhängigen Variable lautet y = c + b*x, wobei y die geschätzte Zielgröße ist, c die Konstante, b der Regressionskoeffizient und x der Wert der unabhängigen Variable.
Ein Entscheidungsbaum wird top-down aus einem Wurzelknoten aufgebaut und partitioniert die Daten in Teilmengen mit ähnlichen Werten. Entscheidungsbäume modellieren als Baumstruktur, zerlegen den Datensatz iterativ in kleinere Teilmengen und entwickeln dabei schrittweise den Baum mit Entscheidungs- und Blattknoten. Ein Entscheidungsknoten (z. B. Outlook) hat zwei oder mehr Äste (z. B. Sunny, Overcast, Rainy), die Werte des getesteten Attributs repräsentieren. Ein Blattknoten (z. B. Hours Played) repräsentiert eine Entscheidung über das numerische Ziel. Der oberste Knoten, der beste Prädiktor, heißt Wurzelknoten. Entscheidungsbäume können kategoriale und numerische Daten verarbeiten. Wenn die Zielvariable stetige Werte annimmt, spricht man von Regressionsbäumen. Ist die maximale Tiefe zu hoch, lernen Bäume zu viele Details und auch Rauschen — Overfitting.
Ein Random Forest ist ein Schätzer, der viele Entscheidungsbäume auf unterschiedlichen Teilstichproben des Datensatzes fitted und ihre Vorhersagen mittelt, um Genauigkeit zu verbessern und Overfitting zu kontrollieren. Die Teilstichprobe hat standardmäßig die gleiche Größe wie die Eingangsstichprobe, die Ziehung erfolgt mit Zurücklegen, wenn bootstrap=True. Die Idee ist, die Bäume zu dekorrelieren. Es werden verschiedene Bootstrapping-Stichproben aus den Trainingsdaten erzeugt und die Varianz durch Mittelung reduziert. Random-Forest-Modelle sind sehr gut für tabellarische Daten mit numerischen Features oder kategorialen Features mit weniger als einigen Hundert Kategorien geeignet. Sie können nichtlineare Wechselwirkungen zwischen Features und Ziel erfassen.
Hinweis: Baumbasierte Modelle sind nicht für sehr spärliche Features ausgelegt. Bei Sparse-Inputdaten sollten wir entweder numerische Statistiken aus den sparsamen Features extrahieren oder auf ein lineares Modell wechseln, das sich dafür besser eignet.
from sklearn.ensemble import GradientBoostingRegressor
Bereitgestellt von
Gradient Boosting ist eine ML-Technik für Regressions- und Klassifikationsprobleme und erzeugt ein Vorhersagemodell als Ensemble schwacher Lerner, meist Entscheidungsbäume. Das Modell wird stufenweise aufgebaut, ähnlich wie andere Boosting-Methoden, und verallgemeinert diese, indem eine beliebige differenzierbare Verlustfunktion optimiert wird. Boosting lässt sich als Optimierungsalgorithmus auf einer geeigneten Kostenfunktion interpretieren: Iteratives funktionales Gradientenabstieg, bei dem in jedem Schritt ein schwacher Lerner in Richtung des negativen Gradienten gewählt wird. In der Least-Squares-Regression lässt sich das besonders einfach erklären: Ein Modell F wird so „trainiert“, dass es Werte der Form ŷ = F(x) vorhersagt, indem der mittlere quadratische Fehler minimiert wird.
lr = LinearRegression()
dtr = DecisionTreeRegressor()
rfr = RandomForestRegressor()
gbr = GradientBoostingRegressor()Bereitgestellt von
fit1 = lr.fit(X_train,y_train)#Training des Linearen Regressors
fit2 = dtr.fit(X_train,y_train)#Training des DecisionTreeRegressors
fit3 = rfr.fit(X_train,y_train)#Training des RandomForestRegressors
fit4 = gbr.fit(X_train,y_train)#Training des GradientBoostingRegressorsBereitgestellt von
Bisher hast du fit und fit_transform gesehen, aber nicht verstanden, was sie tun? Lass es uns klären.
fit(): Ermittelt die Modellparameter aus den Trainingsdaten.
transform(): Wendet die durch fit() gewonnenen Parameter an, um den Datensatz zu transformieren.
fit_transform(): Kombination aus fit() und transform() auf demselben Datensatz.
print("Accuracy Score of Linear regression on train set",fit1.score(X_train,y_train)*100)print("Accuracy Score of Decision Tree on train set",fit2.score(X_train,y_train)*100)print("Accuracy Score of Random Forests on train set",fit3.score(X_train,y_train)*100)print("Accuracy Score of Gradient Boosting on train set",fit4.score(X_train,y_train)*100)Bereitgestellt von
Accuracy Score of Linear regression on train set11.829233894211866
Accuracy Score of Decision Tree on train set100.0
Accuracy Score of Random Forests on train set94.207451077798
Accuracy Score of Gradient Boosting on train set65.49517152859553Bereitgestellt von
print("Accuracy Score of Linear regression on test set",fit1.score(X_test,y_test)*100)print("Accuracy Score of Decision Tree on test set",fit2.score(X_test,y_test)*100)print("Accuracy Score of Random Forests on test set",fit3.score(X_test,y_test)*100)print("Accuracy Score of Gradient Boosting on testset",fit4.score(X_test,y_test)*100)Bereitgestellt von
Accuracy Score of Linear regression on test set36.8210287243639
Accuracy Score of Decision Tree on test set57.61911563230391
Accuracy Score of Random Forests on test set74.71675935214292
Accuracy Score of Gradient Boosting on testset 72.43849411693184Bereitgestellt von
Fazit
Dieses Tutorial zeigt dir kurz und bündig, wie du Nullwerte füllst. Ich habe darüber geschrieben, weil echte Daten meist unordentlicher sind: Nullwerte, falsche Einträge und jede Menge Reste, die bereinigt werden müssen. Glückwunsch! Du hast das Tutorial abgeschlossen. Wenn du Fragen oder Anmerkungen hast, schreib sie gern unten in die Kommentare.
Keine Hacks, keine Tricks. Schüler/innen und Lehrer/innen, lest weiter, um zu erfahren, wie ihr die Datenerziehung, die euch zusteht, kostenlos bekommen könnt.
Mach dich mit Python-Datenstrukturen vertraut: Lerne mehr über Datentypen und primitive sowie nicht-primitive Datenstrukturen wie Strings, Listen, Stapel usw.
Schau dir 4 Möglichkeiten an, wie du NaN-Werte in Python mit NumPy und Pandas erkennen kannst. Lerne die wichtigsten Unterschiede zwischen NaN und None kennen, um Daten effizient zu bereinigen und zu analysieren.
Erforsche Pythons match-case: eine Anleitung zu seiner Syntax, Anwendungen in Data Science und ML sowie eine vergleichende Analyse mit dem traditionellen switch-case.
Zuerst importieren wir die benötigte Basisbibliothek, um mit dem Datensatz zu arbeiten.
Als Nächstes lesen wir den Datensatz ein und schauen ihn uns an.
Die Ausgabe zeigt einen Ausschnitt des Datensatzes mit 10 Zeilen und allen Spalten. Wenn du bfriday.head(x,y) versuchst, erhältst du einen Fehler, weil die Gesamtzahl der Spalten bereits fest ist. bfriday.head() gibt ebenfalls eine Ausgabe zurück, ohne Fehler, und wählt Zeilen und Spalten standardmäßig.
Jetzt haben wir fehlende Werte mit dem häufigsten Wert aufgefüllt. Alternativ kannst du das auch explizit schreiben: bfriday.Product_Category_2.fillna(bfriday.Product_Category_2.value_counts().idxmax(), inplace=True). Genauso lässt sich die Spalte Product_Category_3 bereinigen.
Wir haben die Spalte Purchase aus dem Datensatz entfernt und ein Array X erstellt, das alle Spalten außer Purchase enthält.
Nun wandeln wir die Daten mit pandas in numerische Formen um, da der Umgang mit numerischen Daten einfacher ist als mit kategorialen Daten.
Standardisiere Features, indem der Mittelwert entfernt und auf Einheitsvarianz skaliert wird. Zentrierung und Skalierung passieren für jedes Feature unabhängig, basierend auf den Statistiken des Trainingsdatensatzes. Mittelwert und Standardabweichung werden gespeichert und mit der transform-Methode auf spätere Daten angewendet.
Lineare Dimensionsreduktion mittels Singular Value Decomposition projiziert die Daten in einen Raum geringerer Dimension. PCA ist eine der bekanntesten Methoden zur Dimensionsreduktion und hilft, ML-Algorithmen zu beschleunigen. Du solltest PCA nur auf den Trainingsdaten fitten. Die Hauptkomponentenanalyse (PCA)
PCA ersetzt die ursprünglichen Variablen durch neue Variablen, die Hauptkomponenten, die paarweise unkorreliert sind und abnehmende Varianzen aufweisen. Entsprechend ist die Kovarianzmatrix zwischen den aus den Daten extrahierten Hauptkomponenten diagonal.
Wir haben hier etwas Spannendes namens RandomizedPCA
Hinweis: Verwende RandomizedPCA niemals für Sparse-Daten. RandomizedPCA auf Sparse-Daten ist falsch, weil wir die Daten zum Zentrieren nicht ohne Verlust der Sparsity verschieben können, was bei realistisch großen Sparse-Daten den Speicher sprengen kann. Zentrierung ist für PCA jedoch erforderlich.
Mit Regression prüfst du zwei Dinge: (1) Sagt ein Set an Prädiktorvariablen die Zielvariable gut vorher? (2) Welche Variablen sind signifikante Prädiktoren und wie beeinflussen sie das Ergebnis — erkennbar an Betrag und Vorzeichen der Koeffizienten? Diese Schätzungen erklären die Beziehung zwischen einer abhängigen und einer oder mehreren unabhängigen Variablen. Die einfachste Regressionsformel mit einer abhängigen und einer unabhängigen Variable lautet y = c + b*x, wobei y die geschätzte Zielgröße ist, c die Konstante, b der Regressionskoeffizient und x der Wert der unabhängigen Variable.
Ein Entscheidungsbaum wird top-down aus einem Wurzelknoten aufgebaut und partitioniert die Daten in Teilmengen mit ähnlichen Werten. Entscheidungsbäume modellieren als Baumstruktur, zerlegen den Datensatz iterativ in kleinere Teilmengen und entwickeln dabei schrittweise den Baum mit Entscheidungs- und Blattknoten. Ein Entscheidungsknoten (z. B. Outlook) hat zwei oder mehr Äste (z. B. Sunny, Overcast, Rainy), die Werte des getesteten Attributs repräsentieren. Ein Blattknoten (z. B. Hours Played) repräsentiert eine Entscheidung über das numerische Ziel. Der oberste Knoten, der beste Prädiktor, heißt Wurzelknoten. Entscheidungsbäume können kategoriale und numerische Daten verarbeiten. Wenn die Zielvariable stetige Werte annimmt, spricht man von Regressionsbäumen. Ist die maximale Tiefe zu hoch, lernen Bäume zu viele Details und auch Rauschen — Overfitting.
Ein Random Forest ist ein Schätzer, der viele Entscheidungsbäume auf unterschiedlichen Teilstichproben des Datensatzes fitted und ihre Vorhersagen mittelt, um Genauigkeit zu verbessern und Overfitting zu kontrollieren. Die Teilstichprobe hat standardmäßig die gleiche Größe wie die Eingangsstichprobe, die Ziehung erfolgt mit Zurücklegen, wenn bootstrap=True. Die Idee ist, die Bäume zu dekorrelieren. Es werden verschiedene Bootstrapping-Stichproben aus den Trainingsdaten erzeugt und die Varianz durch Mittelung reduziert. Random-Forest-Modelle sind sehr gut für tabellarische Daten mit numerischen Features oder kategorialen Features mit weniger als einigen Hundert Kategorien geeignet. Sie können nichtlineare Wechselwirkungen zwischen Features und Ziel erfassen.
Hinweis: Baumbasierte Modelle sind nicht für sehr spärliche Features ausgelegt. Bei Sparse-Inputdaten sollten wir entweder numerische Statistiken aus den sparsamen Features extrahieren oder auf ein lineares Modell wechseln, das sich dafür besser eignet.
Gradient Boosting ist eine ML-Technik für Regressions- und Klassifikationsprobleme und erzeugt ein Vorhersagemodell als Ensemble schwacher Lerner, meist Entscheidungsbäume. Das Modell wird stufenweise aufgebaut, ähnlich wie andere Boosting-Methoden, und verallgemeinert diese, indem eine beliebige differenzierbare Verlustfunktion optimiert wird. Boosting lässt sich als Optimierungsalgorithmus auf einer geeigneten Kostenfunktion interpretieren: Iteratives funktionales Gradientenabstieg, bei dem in jedem Schritt ein schwacher Lerner in Richtung des negativen Gradienten gewählt wird. In der Least-Squares-Regression lässt sich das besonders einfach erklären: Ein Modell F wird so „trainiert“, dass es Werte der Form ŷ = F(x) vorhersagt, indem der mittlere quadratische Fehler minimiert wird.
Bisher hast du fit und fit_transform gesehen, aber nicht verstanden, was sie tun? Lass es uns klären.
fit(): Ermittelt die Modellparameter aus den Trainingsdaten.
transform(): Wendet die durch fit() gewonnenen Parameter an, um den Datensatz zu transformieren.
fit_transform(): Kombination aus fit() und transform() auf demselben Datensatz.
Fazit
Dieses Tutorial zeigt dir kurz und bündig, wie du Nullwerte füllst. Ich habe darüber geschrieben, weil echte Daten meist unordentlicher sind: Nullwerte, falsche Einträge und jede Menge Reste, die bereinigt werden müssen. Glückwunsch! Du hast das Tutorial abgeschlossen. Wenn du Fragen oder Anmerkungen hast, schreib sie gern unten in die Kommentare.
Wenn du mehr über Machine Learning in Python lernen möchtest, schau dir DataCamps Tutorial Introduction to Machine Learning in Python und den Kurs Preprocessing for Machine Learning in Python an.