Giftige Pilze erkennen

Photo by Phoenix Han on Unsplash

 

Giftige Pilze erkennen

Hintergrund und Ziel

Ziel ist es, Pilze in eine der beiden Kategorien, essbar oder giftig, einzuteilen. Es handelt sich um eine binäre Klassifikation, die Art des Lernens ist überwacht, da Labels zum Trainieren des Models vorhanden sind. In diesem Projekt besteht das Model aus einem strukturierten Datensatz, in einem späteren Projekt soll die Vorhersage anhand von Fotos gemacht werden. 

Datensatz

Der Datensatz stammt von der Machine Learning Repository und wurde von kaggle leicht überarbeitet. Der Datensatz besteht aus 8124 Beobachtungen und 22 Attributen. Alle Variablen sind kategorisch. 

Erklärung der Variablen

  • cap-shape: bell=b,conical=c,convex=x,flat=f, knobbed=k,sunken=s
  • cap-surface: fibrous=f,grooves=g,scaly=y,smooth=s
  • cap-color: brown=n,buff=b,cinnamon=c,gray=g,green=r,pink=p,purple=u,red=e,white=w,yellow=y
  • bruises: bruises=t,no=f
  • odor: almond=a,anise=l,creosote=c,fishy=y,foul=f,musty=m,none=n,pungent=p,spicy=s
  • gill-attachment: attached=a,descending=d,free=f,notched=n
  • gill-spacing: close=c,crowded=w,distant=d
  • gill-size: broad=b,narrow=n
  • gill-color: black=k,brown=n,buff=b,chocolate=h,gray=g, green=r,orange=o,pink=p,purple=u,red=e,white=w,yellow=y
  • stalk-shape: enlarging=e,tapering=t
  • stalk-root: bulbous=b,club=c,cup=u,equal=e,rhizomorphs=z,rooted=r,missing=?
  • stalk-surface-above-ring: fibrous=f,scaly=y,silky=k,smooth=s
  • stalk-surface-below-ring: fibrous=f,scaly=y,silky=k,smooth=s
  • stalk-color-above-ring: brown=n,buff=b,cinnamon=c,gray=g,orange=o,pink=p,red=e,white=w,yellow=y
  • stalk-color-below-ring: brown=n,buff=b,cinnamon=c,gray=g,orange=o,pink=p,red=e,white=w,yellow=y
  • veil-type: partial=p,universal=u
  • veil-color: brown=n,orange=o,white=w,yellow=y
  • ring-number: none=n,one=o,two=t
  • ring-type: cobwebby=c,evanescent=e,flaring=f,large=l,none=n,pendant=p,sheathing=s,zone=z
  • spore-print-color: black=k,brown=n,buff=b,chocolate=h,green=r,orange=o,purple=u,white=w,yellow=y
  • population: abundant=a,clustered=c,numerous=n,scattered=s,several=v,solitary=y
  • habitat: grasses=g,leaves=l,meadows=m,paths=p,urban=u,waste=w,woods=d

Methode

  • Daten bereinigen und formatieren, eventuell Fehler beheben
  • Explorative Datenanalyse
  • Feature Engineering und Selection
  • Vergleich mehrerer infrage kommender Algorithmen
  • Den besten Algorithmus optimieren
  • Das Model aufbauen
  • Interpretation der Ergebnisse

Tools

Data Cleaning und Exploration

Visuelle und statistische Erforschung des Datensatzes, um mögliche Fehler zu entdecken und den Datensatz kennen zu lernen. Univariate und bivariate Darstellungen der Variablen in Grafiken. 

Modeling

Metrik

Hier wird der F1 Score als Metrik verwendet. Er ist eine Kombination aus Precision und Recall und ideal für Probleme, bei denen der Datensatz unausgeglichen ist.

F1 = 2 * (precision * recall) / (precision + recall)

Bei der Berechnung des Mittelwertes in der Kreuzvalidierung für die Auswahl des Algorithmus wird als average „micro“ oder „weighted“ verwendet, weil hier die Klassen entsprechend gewichtet werden.

Vergleich und Auswahl von Algorithmen

Im Allgemeinen ist es so, dass kein Algorithmus immer der Beste für eine bestimmte Problemart ist (No Free Lunch Theorem). Daher werden mehrere Algorithmen, die zur Problemstellung passen, getestet. Dann wird derjenige Algorithmus, der am besten performt, ausgewählt, um weiter optimiert zu werden.

Folgende Algorithmen werden getestet:

  • Logistic Regression
  • Random Forest Classifier (Ensemble Methode)
  • Gradient Boosting Classifier (Ensemble Methode)
  • Support Vector Classifier
  • K-nearest Neighbors Classifier

Auswahl

Der Gradient Boosting Classifier schneidet im Performance Test mit diesem Datensatz am besten ab und wird gewählt, um weiter optimiert zu werden.

Der Gradient Boosting Classifier mit Scikit-Learn

Zusammenfassung

In diesem Projekt konnte gezeigt werden, dass diese Art der Problemstellung ideal für Machine Learning ist. Wo ein Mensch Zeit bräuchte, alle Variablen zu verstehen und sich einen Überblick über diese zu verschaffen, kann die Maschine innerhalb von Minuten mit 100% Sicherheit vorhersagen, ob ein Pilz essbar ist oder giftig. 

Folgende Schritte wurden im Projekt unternommen

  1. Bereinigung der Daten und Exploration
  2. Feature Engineering: Train Set mit den 20 besten Features
  3. Vergleich und Auswahl von Algorithmen
  4. Baseline des besten Algorithmus Gradient Boosting
  5. Testen zweier verschiedenen Feature-Sets
  6. Das beste Model auf dem Test-Set evaluieren

Bestes Model

Das beste Modell war die Kombination aus dem Algorithmus Gradient Boosting mit dem kompletten Feature Set. 

Weitere Erkenntnisse

Es war sehr einfach für den Algorithmus, aus den gegebenen Daten zu lernen, welche der gesuchten Eigenschaften ein Pilz hat. Allerdings ist das Zusammenstellen der Daten sehr aufwändig. Daher soll in einem kommenden Projekt diese Erkennung von giftigen und ungiftigen Pilzen aus Bildern modelliert werden. Hierfür wird als Algorithmus ein CNN verwendet werden. 

Comments are closed.