[Python] Sortieren Sie Äpfel und Birnen anhand einer Support Vector Machine (SVM) nach Pixelwerten.

1. Übersicht

Dieses Mal klassifizierten wir Äpfel und Birnen mithilfe einer Art maschinellen Lernens, Support Vector Machine (SVM). Wir haben untersucht, ob es möglich ist, Äpfel und Birnen zu klassifizieren, indem zwei Komponenten auf SVM angewendet werden, wobei die Pixelwerte (Durchschnittswerte) von jeweils 10 Bildern verwendet werden. SVM ist übrigens eine Methode zum Bestimmen der Grenze, indem einige Datenpunkte in der Nähe der Grenze anstelle aller Datenpunkte erfasst werden. Und die Datenpunkte nahe der Grenze werden Unterstützungsvektoren genannt.

2. Zu vorbereitende Daten

Ermitteln Sie den Durchschnittswert der RGB-Pixelwerte von Äpfeln und Birnen im Voraus. Als Referenz habe ich apple.csv unten für die CSV-Datei des Durchschnittswerts der Pixelwerte von Äpfeln verwendet. Da opencv verwendet wird, lautet die Reihenfolge BGR. Es gibt nur Äpfel und der Pixelwert von Rot ist hoch. Erstellen Sie zusätzlich zu dieser CSV-Datei im Voraus eine Birnen-CSV-Datei.

apple.csv


,blue,green,red
0,39.88469583593901,28.743374377331637,137.23369201906283
1,83.72563703792319,79.59471228615863,164.77884914463453
2,66.8231805177587,74.52501570023027,141.8854929872305
3,55.2837418388098,45.28968211495237,148.4160869099861
4,37.59397951454073,49.82323881039423,137.30237460066527
5,53.68868757437335,50.963264366051206,142.6121454070861
6,51.277953772145956,64.07145371348116,152.98116860260473
7,50.47702848900108,48.37151099891814,124.46714749368914
8,40.35442093843233,52.0682126390019,137.8299091402224
9,48.18758094199441,55.87655919841865,145.6361529548088

3. Umwelt

Diesmal in der Bibliothek ・ Matplotlib ・ Numpy ・ Scikit-lernen ・ Mglearn Sie müssen diese Bibliotheken installieren, da Sie sie verwenden werden. Wenn Sie die Bibliothek noch nicht haben, installieren Sie sie bitte mit dem folgenden Befehl.

pip install matplotlib
pip install numpy
pip install mglearn
pip install scikit-learn

4. Code

Dieses Mal wurde SVM in 2 Dimensionen angewendet, so dass wir mit 3 Mustern von BGR BG, GR, BR beobachten werden. Ich habe dem Code einen Kommentar hinzugefügt. Bitte beziehen Sie sich darauf. Übrigens werden japanische Birnen auf Englisch "japanische Birne" genannt. "Birne" scheint eine Birne zu sein. (Im Code ist "Japanische Birne" lang und schwer zu lesen, deshalb habe ich "Birne" gewählt.)

SVM_bgr_2D.py


import os
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np
from sklearn.svm import LinearSVC
import mglearn

def main():
    path = 'output'
    os.makedirs(path, exist_ok=True)

    apple = np.loadtxt('input/apple.csv', delimiter=',', skiprows=1,usecols=[1,2,3])   #Holen Sie sich Pixelwertdaten aus der Apple CSV-Datei
    pear = np.loadtxt('input/pear.csv', delimiter=',', skiprows=1,usecols=[1,2,3])
    #Holen Sie sich Pixelwertdaten aus der Birnen-CSV-Datei

    SVM2D(np.delete(apple,2,1), np.delete(pear,2,1),'blue','green',path)    #Wenden Sie bg von bgr auf SVM an
    SVM2D(np.delete(apple,0,1), np.delete(pear,0,1), 'green', 'red',path)    #Multipliziere bgr's gr mit SVM
    SVM2D(np.delete(apple,1,1), np.delete(pear,1,1), 'blue', 'red',path)    #Wende bgr's br auf SVM an

def SVM2D(ap_pv, pe_pv, xlabel, ylabel, path):

    yap=[0]*ap_pv.shape[0]  #Erstellen Sie ein Array mit Nullen für die Anzahl der Apfeldaten
    ype=[1]*pe_pv.shape[0]  #Erstellen Sie ein Array von Nullen für die Anzahl der Birnen-Daten
    y = np.array(yap+ype)   #Anordnung der Trainingsdaten Klassifizierung von Äpfeln und Birnen
    X = np.concatenate([ap_pv,pe_pv],0)    #Anordnung von Apfel- und Birnen-Daten (RGB-Pixelwerte)

    #SVM-Grenzdiagramm erstellen
    linear_svm = LinearSVC().fit(X, y)
    fig=plt.figure(figsize = (10, 6))
    ax = fig.add_subplot(1,1,1)
    ax.axis('normal')
    mglearn.plots.plot_2d_separator(linear_svm, ap_pv)
    mglearn.discrete_scatter(X[:, 0], X[:, 1], y)

    ax.legend(['apple', 'pear'])
    ax.xaxis.set_major_locator(ticker.MultipleLocator(20))
    ax.yaxis.set_major_locator(ticker.MultipleLocator(20))
    ax.tick_params('x', labelsize =15)
    ax.tick_params('y', labelsize =15)
    ax.set_xlabel(xlabel, fontsize= 20)
    ax.set_ylabel(ylabel, fontsize= 20)
    plt.savefig(path+'/SVM_'+xlabel+'_'+ylabel+'.png')

    #Geben Sie die richtige Antwortrate der Trainingsdaten aus
    print('score on training set: {:.2f}'.format(linear_svm.score(X,y)))

if __name__=='__main__':
    main()


5. Ergebnisse und Überlegungen

Als Ergebnis der SVM-Ausführung für drei Muster "Blau-Grün", "Grün-Rot" und "Blau-Rot" sind die jeweiligen Grenzen in der folgenden Abbildung dargestellt. SVM_blue_green.png SVM_blue_green.png SVM_blue_red.png

Blau-Rot kann nicht klassifiziert werden, da die Datenpunkte gemischt sind. Im Vergleich dazu konnten wir bei den Zahlen für Blau-Grün und Grün-Rot Äpfel und Birnen klar voneinander trennen. Daraus wurde herausgefunden, dass grüne Informationen wichtig sind, um zwischen Birnen und Äpfeln zu unterscheiden, nicht zwischen roten oder blauen. Im RGB-Bild basiert der Apfel auf Rot, aber die Birne ist gelblichgrün, also basiert sie auf Grün und Rot. Es gab also einen deutlichen Unterschied im Grün zwischen Äpfeln und Birnen.

6. Referenzen

★ Website ・ [[Für Anfänger des maschinellen Lernens in Python] Einfache Implementierung von SVM mit Scikit-Learn] [0] [0]:https://qiita.com/kazuki_hayakawa/items/18b7017da9a6f73eba77

・ [Englisch für "Birne" | Korrekte Aussprache und verwandtes Englisch für Birne und "Japanische Birne"] [1] [1]:https://mysuki.jp/english-pear-7661

★ Bücher ・ [Maschinelles Lernen beginnend mit Python (veröffentlicht von O'Reilly Japan)] [2] [2]:https://www.amazon.co.jp/-/en/Andreas-C-Muller/dp/4873117984/ref=sr_1_2?adgrpid=60120324664&dchild=1&gclid=CjwKCAiAnIT9BRAmEiwANaoE1YIps5s80JJSRehiS7IYnFoTKYgr9WYubUIg1BNKCBYEdREPVB_weRoCFSsQAvD_BwE&hvadid=338518119513&hvdev=c&hvlocphy=1009247&hvnetw=g&hvqmt=e&hvrand=14766900827825353786&hvtargid=kwd-314655987025&hydadcr=27268_11561171&jp-ad-ap=0&keywords=python%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92&qid=1604415106&sr=8-2&tag=googhydr-22

"Maschinelles Lernen ab Python" ist ein sehr hilfreiches Buch für diejenigen, die maschinelles Lernen studieren. Es ist sehr nützlich für mich, weil es Beispielcode für das eigentliche maschinelle Lernen enthält. Der Inhalt ist leichter zu lesen, aber ich denke, er ist für diejenigen gedacht, die Python und die Grundlagen des maschinellen Lernens und des tiefen Lernens kennen. Bitte nehmen Sie es in die Hand und lesen Sie es!

Recommended Posts

[Python] Sortieren Sie Äpfel und Birnen anhand einer Support Vector Machine (SVM) nach Pixelwerten.
Ich habe FizzBuzz in Python mit der Support Vector Machine (Bibliothek LIVSVM) geschrieben.
Berechnung der Support Vector Machine (SVM) (mit cvxopt)
[Python] Ich habe die Theorie und Implementierung der Support Vector Machine (SVM) ausführlich erklärt.
Python: Erstellen Sie ein Wörterbuch aus einer Liste von Schlüsseln und Werten
Nehmen Sie Zeitraffer von einer PC-Kamera mit Python, OpenCV auf
Maschinelles Lernen ① SVM-Zusammenfassung (Support Vector Machine)
Von Python bis zur Verwendung von MeCab (und CaboCha)
[Python] Ein Programm, das die minimalen und maximalen Werte ohne Verwendung von Methoden findet
Erstellen Sie eine Webmap mit Python und GDAL
Führen Sie Python-Dateien mit Django aus HTML aus
Führen Sie Python-Skripte in Excel aus (mit xlwings).
Versuchen Sie, eine komprimierte Datei mit Python und zlib zu erstellen
[Maschinelles Lernen] SVM sowohl aus Scikit-Lernen als auch aus Mathematik verstehen
Implementieren eines Generators mit Python> Link> Yield und next ()> Yield
Holen Sie sich Dateien von Linux mit paramiko und scp [Python]
Konstruktionsnotiz für eine maschinelle Lernumgebung von Python
[Python] Starten Sie eine Batchdatei aus Python und übergeben Sie Variablen.
(Hinweis) Eine Geschichte zum Erstellen eines Frage- und Antwortsystems mit Spring Boot und maschinellem Lernen (SVM).