Читать книгу Praxiseinstieg Machine Learning mit Scikit-Learn, Keras und TensorFlow - Aurélien Géron - Страница 69
Suche nach Korrelationen
ОглавлениеDa Ihr Datensatz nicht besonders groß ist, können Sie mit der Methode corr() den Korrelationskoeffizienten (auch Pearson-Korrelationskoeffizient) für jedes Merkmalspaar leicht berechnen:
corr_matrix = housing.corr()
Schauen wir uns einmal an, wie stark jedes Merkmal mit dem mittleren Immobilienwert korreliert:
>>> corr_matrix["median_house_value"].sort_values(ascending=False)
median_house_value 1.000000
median_income 0.687170
total_rooms 0.135231
housing_median_age 0.114220
households 0.064702
total_bedrooms 0.047865
population -0.026699
longitude -0.047279
latitude -0.142826
Name: median_house_value, dtype: float64
Der Korrelationskoeffizient liegt zwischen –1 und 1. Liegt er nahe bei 1, haben wir eine stark positive Korrelation; zum Beispiel steigt der mittlere Immobilienwert tendenziell mit dem mittleren Einkommen. Ist der Koeffizient nahe bei –1, liegt eine stark negative Korrelation vor; Sie können eine geringe negative Korrelation zwischen der geografischen Breite und dem mittleren Immobilienwert beobachten (d.h., der Preis sinkt tendenziell ein wenig, wenn Sie sich nach Norden bewegen). Schließlich bedeuten Koeffizienten um null, dass es keine lineare Korrelation gibt. Abbildung 2-14 zeigt unterschiedliche Diagramme und den Korrelationskoeffizienten zwischen der horizontalen und vertikalen Achse.
Abbildung 2-14: Korrelationskoeffizienten unterschiedlicher Datensätze (Quelle: Wikipedia; public domain image)
Der Korrelationskoeffizient erfasst ausschließlich lineare Korrelationen (»wenn x steigt, steigt/sinkt y im Allgemeinen«). Damit können Sie nichtlineare Zusammenhänge vollständig übersehen (z.B. »wenn x nahe null ist, steigt y«). Beachten Sie, dass sämtliche Diagramme in der unteren Reihe einen Korrelationskoeffizienten von null haben, obwohl ihre Achsen ganz klar nicht unabhängig voneinander sind: Dies sind Beispiele für nichtlineare Zusammenhänge. Auch die zweite Reihe zeigt Beispiele, bei denen der Korrelationskoeffizient 1 oder –1 beträgt; beachten Sie, dass dies nichts mit der Steigung zu tun hat. Ihre Körpergröße in Zoll hat beispielsweise sowohl einen Korrelationskoeffizienten von 1 mit Ihrer Körpergröße in Fuß als auch in Nanometern. |
Eine andere Möglichkeit, nach Korrelationen zwischen Attributen zu suchen, ist die in pandas eingebaute Funktion scatter_matrix(), die jedes numerische Merkmal gegen jedes andere aufträgt. Weil es elf numerische Merkmale gibt, würden Sie 112 = 121 Diagramme erhalten. Da diese aber nicht auf eine Seite passen, konzentrieren wir uns auf einige vielversprechende Merkmale, die am ehesten mit dem mittleren Immobilienpreis korrelieren (siehe Abbildung 2-15):
from pandas.plotting import scatter_matrix
attributes = ["median_house_value", "median_income", "total_rooms",
"housing_median_age"]
scatter_matrix(housing[attributes], figsize=(12, 8))
Die Hauptdiagonale (von oben links nach unten rechts) würde mit lauter geraden Linien gefüllt sein, wenn pandas jedes Merkmal gegen sich selbst plotten würde. Da dies nicht besonders nützlich wäre, stellt pandas stattdessen ein Histogramm jedes Merkmals dar (es gibt dazu einige Alternativen; Details finden Sie in der Dokumentation von pandas).
Abbildung 2-15: Diese Scatterplot-Matrix zeigt jedes numerische Attribut gegen jedes andere numerische Attribut und dazu ein Histogramm.
Das am meisten Erfolg versprechende Merkmal zur Vorhersage des mittleren Immobilienwerts ist das mittlere Einkommen. Daher zoomen wir in den entsprechenden Scatterplot hinein (siehe Abbildung 2-16):
housing.plot(kind="scatter", x="median_income", y="median_house_value",
alpha=0.1)
Abbildung 2-16: Mittleres Einkommen gegen mittleren Immobilienwert
Dieses Diagramm verdeutlicht einige Dinge. Erstens ist die Korrelation in der Tat recht stark; Sie können den Trend nach oben klar sehen, und die Punkte sind nicht allzu verstreut. Zweitens erkennen wir die weiter oben beobachtete obere Preisbegrenzung deutlich als horizontale Linie bei 500.000 USD. Das Diagramm zeigt aber auch weniger offensichtliche gerade Linien: eine horizontale Linie bei etwa 450.000 USD und eine zweite bei 350.000 USD, eventuell auch eine bei 280.000 USD und darunter noch weitere. Möglicherweise sollten Sie versuchen, die entsprechenden Bezirke aus dem Datensatz zu entfernen, um zu verhindern, dass Ihre Algorithmen diese Artefakte im Datensatz reproduzieren.