Cette fois, nous avons classé les pommes et les poires à l'aide d'un type d'apprentissage automatique, Support Vector Machine (SVM). Nous avons examiné s'il était possible de classer les pommes et les poires en appliquant deux composants à SVM en utilisant les valeurs de pixels (valeurs moyennes) de 10 images chacune. À propos, SVM est une méthode pour déterminer la limite en prenant certains points de données près de la limite au lieu de tous les points de données. Et les points de données proches de la frontière sont appelés vecteurs de support.
Obtenez à l'avance la valeur moyenne des valeurs de pixel RVB des pommes et des poires. Pour référence, j'ai utilisé apple.csv ci-dessous pour le fichier csv de la valeur moyenne des valeurs de pixels des pommes. Puisque opencv est utilisé, l'ordre est BGR. Il n'y a que des pommes et la valeur en pixels du rouge est élevée. En plus de ce fichier csv, créez un fichier csv poire à l'avance.
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
Cette fois dans la bibliothèque ・ Matplotlib ・ Numpy ・ Scikit-learn ・ Mglearn Vous devez installer ces bibliothèques car vous allez utiliser. Si vous n'avez pas encore la bibliothèque, veuillez l'installer avec la commande ci-dessous.
pip install matplotlib
pip install numpy
pip install mglearn
pip install scikit-learn
Cette fois, SVM a été appliqué en 2 dimensions, nous allons donc observer avec 3 modèles de BGR BG, GR, BR. J'ai ajouté un commentaire au code, veuillez vous y référer. À propos, on dit que les poires japonaises sont appelées «poire japonaise» en anglais. "Pear" semble être une poire. (Dans le code, "poire japonaise" est longue et difficile à lire, j'ai donc choisi "poire".)
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]) #Obtenir des données de valeur de pixel à partir d'un fichier csv Apple
pear = np.loadtxt('input/pear.csv', delimiter=',', skiprows=1,usecols=[1,2,3])
#Obtenir les données de valeur de pixel du fichier csv de poire
SVM2D(np.delete(apple,2,1), np.delete(pear,2,1),'blue','green',path) #Appliquer bg de bgr à SVM
SVM2D(np.delete(apple,0,1), np.delete(pear,0,1), 'green', 'red',path) #Multiplier le gr de bgr en SVM
SVM2D(np.delete(apple,1,1), np.delete(pear,1,1), 'blue', 'red',path) #Appliquer le br de bgr à SVM
def SVM2D(ap_pv, pe_pv, xlabel, ylabel, path):
yap=[0]*ap_pv.shape[0] #Créez un tableau de 0 pour le nombre de données Apple
ype=[1]*pe_pv.shape[0] #Créer un tableau de 0 pour le nombre de données de poire
y = np.array(yap+ype) #Organisation de la classification des données de formation des pommes et des poires
X = np.concatenate([ap_pv,pe_pv],0) #Disposition des données pomme et poire (valeurs de pixel RVB)
#Créer un diagramme des limites SVM
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')
#Sortie du taux de réponse correct des données d'entraînement
print('score on training set: {:.2f}'.format(linear_svm.score(X,y)))
if __name__=='__main__':
main()
À la suite de l'exécution de SVM pour 3 motifs «bleu-vert», «vert-rouge» et «bleu-rouge», les limites de chacun sont indiquées dans la figure ci-dessous.
Le bleu-rouge ne peut pas être classé car les points de données sont mélangés. En comparaison, en regardant les chiffres pour le bleu-vert et le vert-rouge, nous avons pu séparer clairement les pommes et les poires. À partir de là, il a été constaté que les informations vertes sont importantes pour faire la distinction entre les poires et les pommes, et non le rouge ou le bleu. Dans l'image RVB, la pomme est basée sur le rouge, mais la poire est vert jaunâtre, elle est donc basée sur le vert et le rouge. Il y avait donc une nette différence de vert entre les pommes et les poires.
★ Site ・ [[Pour les débutants de l'apprentissage automatique python] Implémentation facile de SVM avec scikit-learn] [0] [0]:https://qiita.com/kazuki_hayakawa/items/18b7017da9a6f73eba77
・ [Anglais pour «poire» | Prononciation correcte et anglais associé pour poire et «poire japonaise»] [1] [1]:https://mysuki.jp/english-pear-7661
★ Livres ・ [Apprentissage automatique à partir de Python (publié par O'Reilly Japon)] [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
«L'apprentissage automatique à partir de Python» est un livre très utile pour ceux qui étudient l'apprentissage automatique. Il est très utile pour moi car il contient un exemple de code pour l'apprentissage automatique réel. Le contenu est plus facile à lire, mais je pense que c'est pour ceux qui connaissent Python et les bases de l'apprentissage automatique et de l'apprentissage en profondeur. Veuillez le prendre en main et le lire!
Recommended Posts