[PYTHON] Kaggle Zusammenfassung: Planet, den Amazonas aus dem Weltraum verstehen

1. Zuallererst

Wir werden die Informationen von Kaggle aktualisieren, der in der Vergangenheit teilgenommen hat. Hier werden wir die Daten von Planet: Amazonas aus dem Weltraum verstehen vorstellen und im Forum prominent diskutieren. Ich werde es abholen. Ich werde den Ansatz des Gewinners in einem anderen Artikel vorstellen.

2. Hintergrund

Screen Shot 2017-07-17 at 21.44.54.png

Im Amazonasbecken gehen täglich große Mengen Wald verloren. Dies hat zu einer globalen Zerstörung des Ökosystems, zum Verlust von Siedlungen, zu Wetteränderungen und zu vielen anderen katastrophalen Folgen geführt. Durch die Digitalisierung der Zerstörung der Natur und der Invasion von Menschen in Wäldern können die Regierung und die lokalen Interessengruppen schnell und kostspielig auf solche Probleme reagieren. In diesem Wettbewerb wird es unter Verwendung von Satellitenfotos mit Auflösungen von 3 bis 5 US möglich sein, die Zerstörung kleiner Wälder und menschliche / zufällige Urteile zu beurteilen. Daher werden wir in diesem Wettbewerb die Bodenoberfläche anhand von Satellitenfotos kennzeichnen.

Die charakteristischen Punkte dieser Zeit sind wie folgt.

3. Bewertungsindex

Der Bewertungsindex lautet diesmal F2-Punktzahl. F-Punktzahl wird im Allgemeinen für die Bewertung verwendet, aber die F2-Punktzahl ist ein Index mit einem größeren Rückrufgewicht als Precision. ist. Screen Shot 2017-07-17 at 21.54.54.png

4. Einführung von Daten

Diese Daten stammen von Amazon (Brasilien, Peru, Uruguay, Kolumbien, Venezuela, Gaiana, Bolivien, Es ist eine Satellitenaufnahme von (Ecuador). Jedes Foto hat eine oder mehrere Beschriftungen für drei Gruppen (1. Wetterbedingungen, 2. allgemeine Oberfläche, 3. seltene Oberfläche).

chips.jpg

Im Folgenden werden wir jedes Etikett vorstellen.

4.1. Bewölktes Etikett

Wolken sind die Haupthindernis in der Satellitenfotografie. Hier gibt es drei Arten von trüben Etiketten.

4.1.1 Bewölkte Szenen

cloudy_1.jpg

4.1.2 Teilweise bewölkte Szenen

pc1.jpg

4.1.3 Trübe Szenen (leicht bewölkt)

haze1.jpg

4.2 Allgemeine geografische Bezeichnungen

Hier sind sieben gebräuchliche Bezeichnungen.

4.2.1 Tropischer Regenwald

Dies ist das Etikett mit den meisten Daten. primary.jpg

4.2.2 Wasser (Fluss, See)

Etiketten mit Flüssen, Stauseen und sichelförmigen Seen, die die wichtigsten Merkmale des Amazonasbeckens sind.

river.jpg

4.2.3 Wohnsitz

Ein Etikett, das den Wohnort oder das Gebäude angibt. Umfasst von dicht besiedelten Gebieten bis hin zu ländlichen Dörfern. Die Kennzeichnung wird in kleineren Wohngebieten, in denen allein vor Ort gelebt wird, schwieriger.

habitation1.jpg

4.2.4 Ackerland

Die Kennzeichnung von Kulturland für Nutzpflanzen ist eine wichtige Technik im Amazonasgebiet.

agg1.jpg

4.2.5 Straße

road.jpg

4.2.6 Ackerland

Mobiler Anbau ist ein Element von Ackerland und wird häufig von Einzelpersonen oder Familien in ländlichen Gebieten betrieben. cultivation.jpg

4.2.7 Nackter Boden

Bare Ground gilt für alle natürlich vorkommenden, baumlosen Gebiete, nicht für menschliche Einflüsse. Solche Gebiete kommen im Amazonasgebiet auf natürliche Weise vor und umfassen relativ kleine Gebiete wie das Pantanal Marsh und die Senard Arid Zone.

bare.jpg

4.3. Ungewöhnliche geografische Bezeichnung

4.3.1. Yakihata

Es ist in einem Teil des mobilen Ackerlandes enthalten. Es zeigt eine dunkelbraune oder schwarze Farbe.

slashburn1.jpg

4.3.2 Fällen

Ein Etikett, das Bereiche kennzeichnet, in denen teure Bäume gefällt wurden, z. B. Teakholz und Mahagoni. Erscheint als kurvenreiche, schlammige Straße neben einem kahlen braunen Fleck.

logging1.jpg

4.3.3 Hanasaki

Ein natürliches Phänomen, das häufig im Amazonasgebiet auftritt.

bloom.jpg

4.3.4 Traditioneller Bergbau

Es gibt große traditionelle Minen im Amazonas.

mine1.jpg

4.3.5 "Technischer" Bergbau

Dies ist beim Kleinbergbau der Fall. Es kommt häufig in Gebieten vor, in denen Gold abgelagert wird, beispielsweise in den Andenhügeln. Dieser technische Bergbau ist häufig mit illegalen Aktivitäten verbunden und führt zur Erosion des umgebenden Bodens.

artmine1.jpg

4.3.6 Abblasen

Ein natürliches Phänomen in der Andenregion, auch bekannt als Windslow. Lokale und plötzlich trockene kalte Winde wehen aus den Anden (starke und schnelle Winde über 100 MPH) und schlagen Bäume in großen tropischen Regenwäldern um.

blowdown.jpg

5. Analysieren Sie die Daten vorerst (EDA)

Ich werde zwei Notizbücher vorstellen. 5.1. Ist Anokas EDA 5.2. Ist Philipp Schmidts EDA

5.1. Erstellen eines Etiketts Humangram

Klicken Sie hier für das Original-Notizbuch Die Bildanalyse mit Satellitenbildern wurde seit einiger Zeit in vielen Wettbewerben beobachtet. Anscheinend ist es ein neuer Trend. Bei diesem Wettbewerb handelt es sich um ein Klassifizierungsproblem, bei dem für alle etwas ungewöhnlichen Bilder Mehrfachbeschriftungen erstellt werden. Daher werden wir hier kurz das Erscheinungsbild des Gesamtetiketts analysieren.

https://gist.github.com/TomHortons/d766738d4ce4bd564a96bbdd5529bfaa

Satellitenfotonummern und -etiketten werden in separaten Dateien bereitgestellt. Laden Sie sie und erstellen Sie ein Histogramm.

スクリーンショット 2017-07-18 16.10.04 1.png

Wie in der ersten Dateneinführung erwähnt, sind das tropische Regenwaldetikett (primär) und das Wetterzustandsetikett (bewölkt, klar) am häufigsten. Da der Bewertungsindex diesmal F2 ist, betonen wir Rückruf. Die Herausforderung besteht darin, wie seltene geografische Bezeichnungen geschätzt werden können, während gängige geografische Bezeichnungen unterdrückt werden.

https://gist.github.com/TomHortons/68023b27e469bdb25e0249477ba9f123

Überprüfen Sie als Nächstes die Häufigkeit der Etikettenkombinationen. Im tropischen Hauptregenwald sollten beispielsweise Beschriftungen wie Mine, verbranntes Feld und Abblasen vorhanden sein. Auf diese Weise kann "Koexistenz" eine Information an sich sein.

スクリーンショット 2017-07-18 16.21.48.png

Sie sehen, dass es eine Tendenz zu Kombinationen wie "Ackerland und Ackerland, Straßen", "Straßen und Wohngebiete, traditioneller Bergbau" gibt.

5.2. Visualisierung der Vegetationsverteilung für Bildclustering

Dies ist das Original-Notizbuch. Jedes Element wird zerhackt und in gist hochgeladen. Wenn es also nicht funktioniert, kopieren Sie bitte den Code aus diesem Notizbuch.

5.2.1 Etiketten und Bilder prüfen

from glob import glob
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
from subprocess import check_output
import matplotlib.pyplot as plt
from scipy.stats import bernoulli
import seaborn as sns
print(check_output(["ls", "../input"]).decode("utf8"))
%matplotlib inline


df = pd.read_csv('../input/train_v2.csv')
image_paths = sorted(glob('../input/train-jpg/*.jpg'))[0:1000]
image_names = list(map(lambda row: row.split("/")[-1][:-4], image_paths))
image_names[0:10]

plt.figure(figsize=(12,8))
for i in range(6):
    plt.subplot(2,3,i+1)
    plt.imshow(plt.imread(image_paths[i]))
    plt.title(str(df[df.image_name == image_names[i]].tags.values))
スクリーンショット 2017-07-18 18.26.11.png

Anscheinend ist die Größe der Bilder alle gleich groß. Sie können sehen, dass jedes Bild mehrere Tags hat.

5.2.2 Versuchen Sie, einen einfachen Klassifikator zu erstellen

https://gist.github.com/TomHortons/d7e9dc9382f6fcd4763163e1a7db9f99

Der obige Code ist ein Beispielcode einer Person, die durch logistische Regression von Scikit Learn klassifiziert wurde. Bei der Datenvorverarbeitung ist das Schreiben etwas kompliziert. df sind die im vorherigen Beispiel gelesenen Bilddaten.

df['split_tags'] = df['tags'].map(lambda row: row.split(" "))
lb = MultiLabelBinarizer()
y = lb.fit_transform(df['split_tags'])
y = y[:n_samples]
X = np.squeeze(np.array([cv2.resize(plt.imread('../input/train-jpg/{}.jpg'.format(name)), (rescaled_dim, rescaled_dim), cv2.INTER_LINEAR).reshape(1, -1) for name in df.head(n_samples)['image_name'].values]))
X = MinMaxScaler().fit_transform(X)

Nachdem Sie die Trainingsdaten-Tags mit df ['tags']. Map (Lambda-Zeile: row.split ("")) zerlegt haben, vektorisieren Sie sie mit MultiLabel Binarizer. Ändern Sie die Größe des Bildes mit cv2.resize, passen Sie die Vektorgröße mit np.squeeze an und standardisieren Sie die Daten schließlich mit MinMaxScaler.

Das Ergebnis der Ausführung ist wie folgt.

Average F2 test score 0.6798866894323994
F2 test scores per tag:
[('primary', 0.96369809349699664),
 ('clear', 0.87778940027894004),
 ('cloudy', 0.60324825986078878),
 ('agriculture', 0.38493549729504789),
 ('road', 0.26332094175960347),
 ('partly_cloudy', 0.22288261515601782),
 ('water', 0.1915041782729805),
 ('habitation', 0.17467248908296948),
 ('cultivation', 0.054811205846528627),
 ('bare_ground', 0.032894736842105261),
 ('haze', 0.0090090090090090089),
 ('slash_burn', 0.0),
 ('conventional_mine', 0.0),
 ('selective_logging', 0.0),
 ('blow_down', 0.0),
 ('blooming', 0.0),
 ('artisinal_mine', 0.0)]

Seltene geografische Informationen werden fast gelöscht. Obwohl der F2-Wert 0,67 beträgt, sind die Trainingsdaten in Training und Test unterteilt, sodass die Verwendung der tatsächlichen Testdaten zu einem viel niedrigeren Wert führen sollte.

5.2.3 Clustering von Bilddaten

Bilddaten werden so wie sie sind gruppiert. https://gist.github.com/TomHortons/7786a01020de08ee4d14cfaee0ebe142 Entdecken Sie hierarchische Cluster, t-SNEs und Ausreißer.

Als Verfahren,

  1. Formen Sie das Bild in np.array um
  2. Berechnen Sie den Abstand zwischen den Bildern durch paarweisen Abstand
  3. Hierarchisches Clustering mit seegeborener Clusterkarte

Hier ist das Ergebnis der Clusterbildung.

ダウンロード (1).png

Eine andere Sache ist das Clustering mit t-SNE. Legen Sie die Entfernungsdaten des zuvor erstellten Bildes mit t-SNE in 3D ab und zeichnen Sie sie.

https://gist.github.com/TomHortons/da0094c11bf77108c41529cf515f78df

Wenn es ausgeführt wird, sieht es so aus.

[t-SNE] Computing pairwise distances...
[t-SNE] Computing 91 nearest neighbors...
[t-SNE] Computed conditional probabilities for sample 600 / 600
[t-SNE] Mean sigma: 2.026685
[t-SNE] Iteration 25: error = 0.9391028, gradient norm = 0.0111124
[t-SNE] Iteration 50: error = 0.8462010, gradient norm = 0.0094869
[t-SNE] Iteration 75: error = 0.6071504, gradient norm = 0.0019813
[t-SNE] Iteration 100: error = 0.5155882, gradient norm = 0.0052735
[t-SNE] KL divergence after 100 iterations with early exaggeration: 0.515588
[t-SNE] Iteration 125: error = 0.4028054, gradient norm = 0.0006756
[t-SNE] Iteration 125: gradient norm 0.000676. Finished.
[t-SNE] Error after 125 iterations: 0.515588
スクリーンショット 2017-07-19 13.12.26.png

Wir werden nach Ausreißern aus den erstellten Entfernungsinformationen suchen. https://gist.github.com/TomHortons/3aec684789d64cc0631ad5834fa67222

maximally_dissimilar_image_idx = np.nanargmax(np.nanmean(sq_dists, axis=1))

Berechnen Sie einfach den durchschnittlichen Abstand zu den zuvor erstellten sq_dists und ermitteln Sie den Maximalwert (Minimalwert). Die linke Seite der Abbildung unten ist der maximale Abstand und die rechte Seite ist der minimale Abstand. ダウンロード (1).png

Der minimale Abstand bedeutet hier den kleinsten paarweisen Abstand aller Bilder, dh das durchschnittlichste Bild. Im Gegenteil, die maximale Entfernung ist ein seltenes Bild. Da die Entfernung jedoch einfach paarweise des Bildes berechnet wird, unterscheidet sie sich von "Seltenheit" in dem Sinne, dass es ungewöhnliche Strukturen und seltsam geformte Straßen gibt.

Schließlich wird das Ergebnis der Abbildung mit t-SNE im Bild dargestellt. https://gist.github.com/TomHortons/8afcf86ee53e073ad21b7d3d0eb4a9fa

ダウンロード (1).png

5.2.4. NDVI (Normalized Difference Vegetation Index)

Wir verwenden häufig Satellitenfotos oder Luftbilder, die mit Drohnen aufgenommen wurden, um die Pflanzenaktivität zu quantifizieren. NDVI wird als allgemeiner Indikator verwendet und aus dem Verhältnis von R und GB in RGB berechnet. スクリーンショット 2017-07-19 14.46.06.png

Der NDVI wird anhand dieser Daten berechnet.

https://gist.github.com/TomHortons/8d3de37dee1dc7962abe1380f0ff0395

Die Berechnung des NDVI selbst ist sehr einfach und wird in einer Zeile abgeschlossen.

ndvis = [(img[:,:,3] - img[:,:,0])/((img[:,:,3] + img[:,:,0])) for img in imgs]

Danach können Sie ein Gefühl für die Atmosphäre bekommen, indem Sie NDVI-Bilder, standardisierte TIFF-Bilder und JPG-Bilder so anordnen, wie sie sind.

ダウンロード (2).png

In NDVI ist nur der grüne Teil aktiviert.

Wenn Sie außerdem den NDVI für alle Bilder berechnen und den Durchschnittswert im Histogramm überprüfen, können Sie die Aktivitätsverteilung der Pflanze irgendwie erfassen.

import seaborn as sns
mndvis = np.nan_to_num([ndvi.mean() for ndvi in ndvis])
plt.figure(figsize=(12,8))
sns.distplot(mndvis)
plt.title('distribution of mean NDVIs')

ダウンロード (3).png

Lassen Sie uns zum Schluss nach NDVI rangieren.

sorted_idcs = np.argsort(mndvis)
print(len(sorted_idcs))
plt.figure(figsize=(12,8))
plt.subplot(221)
plt.imshow(imgs[sorted_idcs[0]])
plt.subplot(222)
plt.imshow(imgs[sorted_idcs[50]])
plt.subplot(223)
plt.imshow(imgs[sorted_idcs[-30]])
plt.subplot(224)
plt.imshow(imgs[sorted_idcs[-11]])

ダウンロード (4).png

Das weißliche Bild oben links ist ein trübes Bild mit einem negativen durchschnittlichen NDVI. Das standardisierte, rötlich aussehende Bild unten rechts ist das Bild des Waldes mit dem höchsten durchschnittlichen NDVI.

Recommended Posts

Kaggle Zusammenfassung: Planet, den Amazonas aus dem Weltraum verstehen
Kaggle Zusammenfassung: Outbrain # 2
Kaggle Zusammenfassung: Outbrain # 1
Kaggle verwandte Zusammenfassung
Kaggle-Wettbewerbsprozess unter dem Gesichtspunkt des Punkteübergangs
Mathematisches Verständnis der Hauptkomponentenanalyse von Anfang an