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.
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
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
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()
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.
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.
★ 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