[Python] Trier les pommes et les poires à partir des valeurs de pixels à l’aide d’une machine à vecteurs de support (SVM)

1. Vue d'ensemble

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.

2. Données à préparer

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

3. Environnement

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

4. Code

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


5. Résultats et considérations

À 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. SVM_blue_green.png SVM_blue_green.png SVM_blue_red.png

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.

6. Références

★ 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

[Python] Trier les pommes et les poires à partir des valeurs de pixels à l’aide d’une machine à vecteurs de support (SVM)
J'ai écrit FizzBuzz en python en utilisant la machine à vecteurs de support (bibliothèque LIVSVM).
Calcul de la machine à vecteurs de support (SVM) (en utilisant cvxopt)
[Python] J'ai expliqué en détail la théorie et l'implémentation de la machine à vecteurs de support (SVM).
Python: créer un dictionnaire à partir d'une liste de clés et de valeurs
Tirez en accéléré à partir d'une caméra PC en utilisant Python, OpenCV
Apprentissage automatique ① Résumé SVM (Support Vector Machine)
De Python à l'utilisation de MeCab (et CaboCha)
[Python] Un programme qui trouve les valeurs minimales et maximales sans utiliser de méthodes
Créer une carte Web en utilisant Python et GDAL
Exécutez des fichiers Python à partir de HTML en utilisant Django
Exécutez des scripts Python à partir d'Excel (en utilisant xlwings)
Essayez de créer un fichier compressé en utilisant Python et zlib
[Apprentissage automatique] Comprendre la SVM à la fois à partir de scikit-learn et des mathématiques
Implémentation d'un générateur en utilisant Python> link> yield et next ()> yield
Récupérer des fichiers depuis Linux en utilisant paramiko et scp [Python]
Mémo de construction d'environnement d'apprentissage automatique par Python
[Python] Démarrez un fichier de commandes à partir de Python et passez des variables.
(Remarque) Une histoire sur la création d'un système de questions et réponses à l'aide de Spring Boot et de l'apprentissage automatique (SVM).