[PYTHON] Apprendre avec l'enseignant 1 Principes de base de l'apprentissage avec l'enseignant (classification)

Aidemy 2020/9/24

introduction

Bonjour, c'est Yope! Je suis une école littéraire croustillante, mais j'étais intéressé par les possibilités de l'IA, alors je suis allé à l'école spécialisée en IA "Aidemy" pour étudier. Je voudrais partager les connaissances acquises ici avec vous, et je les ai résumées dans Qiita. Je suis très heureux que de nombreuses personnes aient lu l'article de synthèse précédent. Je vous remercie! Ceci est le premier article de l'apprentissage supervisé. Ravi de vous rencontrer.

Quoi apprendre cette fois ・ Aperçu de l'apprentissage supervisé ・ Types d'apprentissage supervisé (classification)

À propos de l'apprentissage supervisé (classification)

Qu'est-ce que l'apprentissage supervisé (classification)?

・ En tant que prémisse, l'apprentissage supervisé est une «méthode pour donner des données d'apprentissage et des données de réponse correcte (enseignant) et réfléchir jusqu'à la bonne réponse», et le but est de prédire des données inconnues à travers cela. ・ L'apprentissage supervisé peut être divisé en «problèmes de classification» et «problèmes de retour». Cette fois, nous examinerons le problème de classification. -Le problème de classification est __ "apprendre les données divisées par catégorie et prédire la catégorie (valeur discrète) des données inconnues" __. Par exemple, "reconnaissance de caractères manuscrits de 0 à 9", "identification de ce qui apparaît dans l'image", "prédiction de l'auteur de phrases", "identification d'hommes et de femmes sur des photographies faciales" et autres peuvent être mentionnés.

-Les problèmes de classification sont divisés en __ "classification binaire" et "classification multi-termes" __. ・ La classification binaire, comme la reconnaissance de genre, classe selon qu'elle appartient ou non à un groupe. Dans certains cas, les classes peuvent être identifiées par une ligne droite (classification linéaire). -La classification multi-termes a de nombreuses classes qui peuvent être classées, comme la reconnaissance des nombres.

Flux d'apprentissage automatique

・ Prétraitement des données → Sélection de l'algorithme → Apprentissage du modèle → Prédiction du modèle

-En apprentissage supervisé (classification), sélectionnez "algorithme de classification" dans la sélection de l'algorithme.

Créer des données

-Pour créer des données adaptées à la classification, importez et utilisez la méthode make_classification (). -__ X, y = make_classification (n_samples = nombre de données, n_classes = nombre de classes (valeur par défaut: 2), n_features = quantité de fonctionnalités, n_redundant = quantité de fonctionnalités supplémentaires, random_state = graine aléatoire) __

from sklearn.datasets import make_classification
#Créez des données avec 50 données, 3 classes, 2 fonctionnalités, 1 fonctionnalité supplémentaire et 0 valeur de départ
X,y=make_classification(n_samples=50,n_classes=3,n_features=2,n_redundant=1,random_state=0)

Obtenez des exemples de données

-Vous pouvez appeler le jeu de données d'exemple fourni dans la bibliothèque scikit-learn (sklearn).

#Appelez les données Iris, qui sont un échantillon d'iris.

#Module d'importation (ensemble de données pour obtenir les données Iris),S'entraîner à utiliser la méthode de retenue_test_Importer une partition depuis sklearn)
from sklearn import datasets
from sklearn.model_serection import train_test_split
import numpy as np

#Obtenir les données Iris
iris=datasets.load_iris()

#Diviser en données d'entraînement et données de test (méthode d'exclusion):taux de test 30%)
X=iris.data[:,[0,2]]  #Parmi les caractéristiques d'Iris, les 0ème et 2ème colonnes ("Longueur Gaku" et "Longueur Pétale")
                      #(= Données d'apprentissage)
y=iris.target         #Étiquette de classe Iris (= données de l'enseignant avec les bonnes variétés écrites)

train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=0.3,random_state=0)

Construire un modèle

・ Ce que vous apprenez et prévoyez s'appelle un modèle. Avec scikit-learn, vous pouvez appeler un modèle préparé comme Ruby on Rails et le laisser s'entraîner et faire des prédictions. -Création d'un modèle: __ model () __ ・ Apprentissage: __ nom du modèle.fit (données de formation des trains, données de formation des enseignants) __ ・ Prédiction: __ nom du modèle.prédict (données) __

#Importez un modèle appelé LogisticRegression.
from sklearn.liner_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
#Création de données (50 données, 2 classes, 3 fonctionnalités) et classées en train et test
X,y = make_classification(n_samples=50,n_classes=2,n_features=3,n_redundant=0,random_state=0)
train_X,test_X,train_y,test_y = train_test_split(X,y,random_state=0)
#Modélisation, formation, prédiction
model = LogisticRegression(random_state=0)
model.fit(train_X,train_y)
pred_y = model.predict(test_X)
print(pred_y) #[1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 1 1 1]
print(test_y) #[1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 1 1 0 1 1 1]

Méthode de classification (faire des limites entre les classes)

Six types à gérer cette fois

-__ Régression logistique : La ligne de démarcation est droite → classification linéaire uniquement. Faible capacité de généralisation. - SVM linéaire__: La bordure est droite → classification linéaire uniquement. Grande capacité de généralisation. L'apprentissage / la prédiction est lent. -__ SVM non linéaire : Convertit la classification non linéaire en classification linéaire et la traite comme SVM linéaire. - Déterminer l'arbre__: détermine la classe de chaque élément de données. Il n'est pas facilement affecté par les valeurs aberrantes. Classification linéaire uniquement. Non généralisé. -__ Random Forest__: Détermine la classe à l'aide de l'arbre de détermination des données aléatoires. Une classification non linéaire est également possible. -__ K-NN__: extrait les données de l'enseignant similaires aux données de prédiction et produit la classe la plus courante comme résultat de la prédiction. Le coût d'apprentissage est de 0. Précision de prédiction élevée. Il ralentit à mesure que la quantité de données augmente.

Retour logistique

-La ligne de démarcation étant droite, seule la classification linéaire peut être gérée. La capacité de généralisation est faible car la ligne de démarcation est proche des données. -La création du modèle se fait avec __LogisticRegression () __, l'apprentissage se fait avec fit (), et la prédiction se fait avec predict (). Voir la section précédente pour plus de détails. Si vous voulez connaître le taux de réponse correct, utilisez __model.score (pred_y, test_y) __.

-Ici, le résultat de la prédiction du modèle est affiché dans un graphique (diagramme dispersé) et visualisé par codage couleur. ・ (Review) Création de diagramme de dispersion: plt.scatter (données de l'axe des x, données de l'axe des y, c = [liste], marker = "type de marqueur", cmap = "système de couleurs") -__ Np.meshgrid (x, y) __ qui apparaît ci-dessous est une fonction qui convertit les coordonnées (x, y) en une matrice et la transmet.

#Importez plt pour créer un graphique et np pour obtenir des coordonnées
import matplotlib.pyplot as plt
import numpy as np
#plt.Création d'un diagramme de dispersion avec scatter (la 0ème colonne des données d'entraînement X est l'axe des x et la 1ère colonne est l'axe des y)
plt.scatter(X[:,0],X[:,1],c=y,marker=".",cmap=matplotlib.cm.get_cmap(name="cool"),alpha=1.0)
#Spécifiez la plage de l'axe des x (x1) et de l'axe des y (x2) à spécifier ensuite
x1_min,x1_max = X[:,0].min()-1, X[:,0].max()+1
x2_min,x2_max = X[:,1].min()-1, X[:,1].max()+1
#np.Avec meshgrid, 0 graphique.Stocker la coordonnée x de l'intersection de x1 et x2 aux points séparés par 02 dans xx1 et la coordonnée y dans xx2 (np).arrange(valeur minimum,Valeur maximum,intervalle))
xx1,xx2 = np.meshgrid(np.arange(x1_min,x1_max,0.02),np.arange(x2_min,x2_max,0.02))
#Coordonnées (xx1,Prédire avec modèle pour la séquence de xx2) et plt.Dessinez le résultat avec comtourf
Z=model.predict(np.array([xx1.ravel(),xx2.ravel()]).T).reshape((xx1.shape))
plt.contourf(xx1,xx2,Z,alpha=0.4,cmap=matplotlib.cm.get_cmap(name="Wistia"))
#Sortie avec plage graphique, titre, nom d'étiquette et paramètres de grille
plt.xlim(xx1.min(), xx1.max())
plt.ylim(xx2.min(), xx2.max())
plt.title("classification data using LogisticRegression")
plt.xlabel("Sepal length")
plt.ylabel("Petal length")
plt.grid(True)
plt.show()

SVM linéaire

-La frontière est une classification linéaire → linéaire uniquement Grande capacité de généralisation. L'apprentissage / la prédiction est lent. -SVM est une "machine vectorielle de support". Les vecteurs de support sont des données qui sont proches en distance des autres classes et qui sont facilement généralisables car les limites sont dessinées de sorte que ces distances soient les plus longues.

-Linear SVM peut être implémenté avec __LinearSVC () __. En dehors de cela, il peut être mis en œuvre de la même manière que la régression logistique.

SVM non linéaire

-Convertir la classification non linéaire en classification linéaire et la traiter comme un SVM linéaire. -Utilisez la "fonction noyau" pour convertir en SVM linéaire. -Pour SVM non linéaire, utilisez SVC () __ importé par __ de sklearn.svm import SVC. À part cela, c'est la même chose que la régression logistique.

Arbre de décision

-Déterminer la classe pour chaque élément de données. Il n'est pas facilement affecté par les valeurs aberrantes. Classification linéaire uniquement. Non généralisé. -Utilisez DecisionTreeClassifier () __ importé par __ de sklearn.tree import DecisionTreeClassifier.

Forêt aléatoire

-Créez plusieurs arbres de détermination de données aléatoires et sortez la classe avec le plus grand nombre de résultats de classification en conséquence. C'est aussi un apprentissage d'ensemble. Une classification non linéaire est également possible. -Utilisez __RandomForestClassifier () __ importé avec from sklearn.ensemble import RandomForestClassifier.

k-NN -Extraire les données de l'enseignant k similaires aux données de prédiction et afficher la classe la plus courante comme résultat de la prédiction. Le coût d'apprentissage est de 0. Précision de prédiction élevée. À mesure que la quantité de données augmente, la précision diminue et la vitesse diminue. -__ Depuis sklearn.neighbors import Utilisez KNeighborsClassifier () __ importé avec KNeighborsClassifier.

Résumé

-L'apprentissage enseigné (classification) consiste à former des données et à prédire la classification en fonction des données. -Pour créer des données adaptées à la classification, importez et utilisez la méthode make_classification (). -Vous pouvez appeler et utiliser le jeu de données d'exemple fourni dans la bibliothèque scikit-learn (sklearn) sans créer de données. (Ex) Ayame data Iris) -Les modèles qui entraînent et prédisent les limites comprennent la régression logistique, la SVM linéaire, la SVM non linéaire, l'arbre de décision, la forêt aléatoire et k-NN, chacun ayant ses propres caractéristiques.

Cette fois, c'est fini. Merci d'avoir lu jusqu'ici.

Recommended Posts

Apprendre avec l'enseignant 1 Principes de base de l'apprentissage avec l'enseignant (classification)
Apprentissage supervisé (classification)
Apprendre avec un enseignant (retour) 1 Bases
Python: apprentissage supervisé (classification)
Bases de l'apprentissage avec un enseignant Partie 1-Régression simple- (Remarque)
Bases de l'apprentissage avec un enseignant Partie 3-Régression multiple (mise en œuvre) - (Notes) -
Bases de l'apprentissage automatique (mémoire)
Machine learning supervisé (classification / régression)
Python: Application de l'apprentissage supervisé (retour)
[Mémo d'apprentissage] Bases de la classe par python
Les bases de Python ①
Bases de python ①
Algorithme d'apprentissage automatique (implémentation de la classification multi-classes)
Apprendre sans enseignant 1 Principes de base
Classification de l'apprentissage automatique
Classification des images de guitare par apprentissage automatique Partie 1
Mémo d'étude Python & Machine Learning ⑤: Classification d'Ayame
Classification des images de guitare par apprentissage automatique, partie 2
Python: apprentissage non supervisé: principes de base
Apprentissage automatique: supervisé - AdaBoost
Indice de classification typique
Deep learning 1 Pratique du deep learning
# 4 [python] Bases des fonctions
Bases des programmes réseau?
La fondation de la fondation Perceptron
Bases de l'analyse de régression
Python: apprentissage supervisé (retour)
Bases de python: sortie
Techniques liées à l'apprentissage automatique / à la classification
Machine Learning: Supervision - Régression linéaire
Python: Apprentissage supervisé: Hyper Paramètres Partie 1
Renforcement de l'apprentissage 2 Installation de chainerrl
Deep running 2 Réglage de l'apprentissage profond
Autres applications de l'apprentissage du dictionnaire
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
Apprentissage supervisé 3 hyper paramètres et réglage (2)
Apprentissage automatique: forêt supervisée - aléatoire
Python: apprentissage supervisé: Hyper Paramètre partie 2
Apprendre avec l'enseignant (retour) 2 édition avancée
Importance des ensembles de données d'apprentissage automatique
Machine Learning: Supervisé - Support Vector Machine
Principes de base de XPath (1) - Concept de base de XPath
Premier mois d'apprentissage en programmation
Apprentissage par renforcement profond 2 Mise en œuvre de l'apprentissage par renforcement
Principes de base de Python x SIG (1)
Apprentissage supervisé 2 Hyper paramètres et réglage (1)
Machine Learning: Supervisé - Arbre de décision
Introduction aux bases de Python de l'apprentissage automatique (apprentissage non supervisé / analyse principale)
[Gang of Four] Apprentissage des modèles de conception
Principes de base de Python x SIG (3)
Classification de relation mot à mot supervisée à l'aide de Word2Vec
Paiza Python Primer 5: Principes de base des dictionnaires
Apprentissage automatique par python (1) Classification générale
Premiers pas avec Python Bases de Python
Apprentissage automatique ③ Résumé de l'arbre de décision
Classification et régression dans l'apprentissage automatique
[À voir pour les débutants] Bases de Linux
Extraction de sujets de texte japonais 1 Bases
Revue des bases de Python (FizzBuzz)