[PYTHON] Algorithme d'apprentissage automatique (de la classification à 2 classes à la classification à plusieurs classes)

introduction

Pas à pas sur la théorie, l'implémentation en python et l'analyse à l'aide de scikit-learn sur l'algorithme précédemment repris dans "Classification of Machine Learning" J'étudierai avec. Je l'écris pour un apprentissage personnel, alors j'aimerais que vous oubliez toute erreur.

Jusqu'à présent, les problèmes de classification à deux classes incluent Simple Perceptron, Logistic Regression, et Nous avons traité des machines vectorielles de support (Basic et Advanced). Cependant, comme il ne s'agissait que d'une classification à deux classes, envisageons de les étendre à une classification multi-classes.

Au début, je pensais écrire ensemble des machines vectorielles de régression logistique et de support multi-classes, mais c'était étonnamment profond et il y a beaucoup de sites qui n'ont pas écrit correctement, donc seul le contexte théorique est dans un article. Il est devenu. Comme d'habitude, les sites suivants ont été utiles. Merci beaucoup.

Classification 2 classes → Extension à la classification multi-classes

NSortie pour chaque type d'entitéyalorscPensez à classer les types. Par exemple(Pomme|Orange|banane)を分類するとか0〜9の数字を分類するとかそういう類のやつalorsすね。アルゴリズム自体が多クラス分類に対応しているものもあるんalorsすが、ロジスティック回帰やサポートベクターマシンなど2クラス分類器をこの分類問題に対応させるためのアプローチとしては、以下の手法が代表的alorsす。

Pensons dans l'ordre.

One-vs-Rest(All) One-vs-Rest (parfois écrit comme One-vs-All), comme son nom l'indique, est une méthode de division en une classe et le reste. À titre d'exemple, afin de classer les trois classes de pomme, d'agrumes et de banane, nous allons créer trois classificateurs (pomme-autre), (mican-autre) et (banane-autre) comme le montre la figure ci-dessous. multicalss_1.png

En fait, il existe une zone où les pommes et les bananes peuvent être prises à la limite de chaque classificateur, mais dans un tel cas, il est nécessaire d'utiliser la puissance de sortie de chaque classificateur pour décider lequel utiliser.

Étant donné que vous devez seulement préparer autant de classificateurs que de classes, la quantité de calcul est inférieure à celle expliquée ci-après.

One-vs-One Contrairement à One-vs-Rest, vous pouvez choisir deux classes quelconques et les classer en deux classes. Quant au nombre de combinaisons, en supposant que le nombre de classes est $ n $, un classificateur de type $ n C_2 $ est requis. Par exemple, lors de la classification de 10 classes, One-vs-Rest nécessite 10 types de classificateurs, mais One-vs-One nécessite $ _ {10} C_2 = 45 $ types de classificateurs. Ce sera. Le classement final est décidé à la majorité de chaque classificateur. Si vous utilisez la méthode du noyau pour le modèle au lieu de la régression linéaire, il semble que vous puissiez l'utiliser.

En fait, en se référant au document scikit-learn, il semble qu'il soit traité comme suit.

Soft Max multi-classes

Le softmax multi-classes est souvent utilisé dans les réseaux de neurones de nos jours. Utilisez la ** fonction Softmax ** pour savoir quelle classe est la plus susceptible de générer le modèle. Avant de discuter de la fonction softmax, parlons d'abord de l'encodage à chaud.

One-Hot Encoding Pour faire simple, One-Hot Encoding fait référence au vecteur **, un seul vaut 1 et l'autre est 0 **. Pour donner un exemple, une certaine quantité de caractéristiques

fruit
Pomme
Orange
Pomme
banane

Supposer que Réécrivez ceci comme suit.

fruit_Pomme fruit_Orange fruit_banane
1 0 0
0 1 0
1 0 1
0 0 1

Ce formulaire présente l'avantage de pouvoir être divisé selon les classifications One-vs-Rest (One) mentionnées précédemment, et d'être facile à utiliser pour le calcul de la fonction Softmax décrite ci-dessous. Vous pouvez également utiliser la fonction get_dummies () de Pandas et la classe [OneHotEncoder] de sikit-learn (https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html).

Fonction Softmax

La fonction softmax est une fonction qui convertit plusieurs sorties en une distribution de probabilité totalisant 1 (100%). La fonction softmax a la forme suivante.

y_i=\frac{e^{x_{i}}}{\sum_{j=1}^{n}e^{x_{j}}} \\
\sum_{i=1}^{n}y_i=1

$ y $ est un vecteur de dimension $ n $, tout comme la sortie. Dans l'exemple précédent, si (pomme, mikan, banane) = [3,8,1] est sorti, le résultat de la fonction softmax est [0.7,99.2,0.1], et la possibilité de mikan est la plus élevée. Sera. À propos, la classification à deux classes est n = 2 dans la formule ci-dessus.

\begin{align}
y_1&=\frac{e^{x_{1}}}{e^{x_1}+e^{x_2}} \\
&=\frac{\frac{e^{x_{1}}}{e^{x_{1}}}}{\frac{e^{x_{1}}}{e^{x_{1}}}+e^{x_2-x_1}} \\
&=\frac{1}{1+e^{x_2-x_1}}
\end{align}

Ce sera. C'est la fonction sigmoïde elle-même.

Différenciation de la fonction softmax

La différenciation de la fonction softmax est

\dfrac{\partial y_i}{\partial x_j}= 
\begin{cases}y_i(1-y_i)&i=j\\-y_iy_j&i\neq j\end{cases}

est.

Classification multi-classes par fonction softmax

Soit le nombre de classes $ c $ et l'entrée $ \ boldsymbol {x} = (x_0, x_1, \ cdots, x_n) $ ($ x_0 $ est un biais). Soit le paramètre $ \ boldsymbol {W} $ de la taille $ (n + 1) $ × $ c $.

\boldsymbol{z}=\boldsymbol{W}^T\boldsymbol{x}

Optimisez $ \ boldsymbol {W} $ avec.

Pour ce faire, recherchez la ** fonction d'erreur d'entropie croisée $ E $ **, similaire à la régression logistique. En supposant que la fonction de vraisemblance est $ l $, $ l $ peut être représenté par une distribution de probabilité pour toutes les classes et tous les échantillons. Soit $ \ varphi_ {ij} ^ {t_ {ij}} $ la sortie de la fonction softmax de la classe $ j $ dans l'exemple $ i $ ème.

l=\prod_{i=1}^{n}\prod_{j=1}^{c}\varphi_{ij}^{t_{ij}}

Sera. Je veux maximiser la probabilité, mais prenez le logarithme de $ l $ et multipliez-le par -1 pour en faire une fonction d'erreur d'entropie croisée.

\begin{align}
E&=-\log(l) \\
&=-\log\left(\prod_{i=1}^{n}\prod_{j=1}^{c}\varphi_{ij}^{t_{ij}}\right) \\
&= -\frac{1}{n}\sum_{i=1}^{n}\sum_{j=1}^{c}t_{ij}\log\varphi_{ij}
\end{align}

Est la fonction de perte. La différenciation de la fonction de perte est

\begin{align}
\frac{\partial E}{\partial w} &= -\frac{1}{n}\sum_{i=0}^n(t_{il}-\varphi_{il})x_{ij} \\
&=-\frac{1}{n}\boldsymbol{x}^T(\boldsymbol{t}-\phi)
\end{align}

Ce sera. (Calcul omis)

Après cela, vous pouvez trouver le paramètre $ \ boldsymbol {W} $ en utilisant la méthode du gradient pour minimiser $ E $.

Résumé

Nous avons résumé comment étendre la classification à deux classes à la classification à plusieurs classes. La première consiste simplement à répéter la classification à deux classes. L'autre était d'utiliser la fonction softmax pour trouver la distribution de probabilité pour chaque classe.

Cela a pris beaucoup de temps car il n'y avait pas beaucoup de pages qui résumaient les méthodes dans ce domaine en détail, probablement parce qu'elles n'étaient pas bien recherchées, et la classification à l'aide de la fonction Softmax était assez compliquée.

À partir de la prochaine fois, j'aimerais le déposer dans le code Python.

Recommended Posts

Algorithme d'apprentissage automatique (de la classification à 2 classes à la classification à plusieurs classes)
Classification de l'apprentissage automatique
Algorithme d'apprentissage automatique (implémentation de la classification multi-classes)
Introduction à l'apprentissage automatique
Introduction à l'apprentissage automatique à partir de Simple Perceptron
Une introduction à l'apprentissage automatique
Machine learning supervisé (classification / régression)
Super introduction à l'apprentissage automatique
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
Introduction à la rédaction de notes d'apprentissage automatique
[Apprentissage automatique] Comprendre la décorrélation des mathématiques
Classification et régression dans l'apprentissage automatique
Présentation de la bibliothèque d'apprentissage automatique SHOGUN
Comment collecter des données d'apprentissage automatique
[Apprentissage automatique] Comprenez à partir des mathématiques pourquoi le coefficient de corrélation varie de -1 à 1.
Méthode Newton pour l'apprentissage automatique (de 1 variable à plusieurs variables)
[Note] Sites Web relatifs à l'IA / à l'apprentissage automatique / à python [mis à jour de temps en temps]
Introduction à l'apprentissage automatique: fonctionnement du modèle
scikit-learn Comment utiliser le résumé (apprentissage automatique)
Apprentissage amélioré pour apprendre de zéro à profond
Enregistrez les étapes pour comprendre l'apprentissage automatique
Viser à devenir un ingénieur en apprentissage automatique en utilisant des MOOC depuis des postes de vente
[Apprentissage automatique] Classification des sujets LDA à l'aide de scikit-learn
Utiliser le groupe d'API d'apprentissage automatique A3RT de Python
J'ai installé Python 3.5.1 pour étudier l'apprentissage automatique
Apprentissage automatique
Alignement d'image: du SIFT au deep learning
Résumé de la classification et de la mise en œuvre des algorithmes d'apprentissage automatique
Comment profiter de Coursera / Machine Learning (semaine 10)
Une introduction à Python pour l'apprentissage automatique
Je souhaite créer un service d'apprentissage automatique sans programmation!
Classification EV3 x Pyrhon Machine Learning Partie 3
Essayez d'écrire du code à partir de 1 en utilisant le chainer du cadre d'apprentissage automatique (édition mnist)
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
[Super introduction à l'apprentissage automatique] Découvrez les didacticiels Pytorch
Une introduction à l'apprentissage automatique pour les développeurs de robots
Classification des images de guitare par apprentissage automatique Partie 1
Essayez de prédire la demande de puissance par l'apprentissage automatique
Deep Learning from scratch ① Chapitre 6 "Techniques liées à l'apprentissage"
Apprentissage automatique à partir de 0 pour les étudiants en physique théorique # 1
Mémo d'étude Python & Machine Learning ⑤: Classification d'Ayame
Apprentissage automatique à partir de zéro (apprentissage automatique appris avec Kaggle)
[Super introduction à l'apprentissage automatique] Découvrez les didacticiels Pytorch
Vue d'ensemble des techniques d'apprentissage automatique apprises grâce à scikit-learn
Apprentissage automatique à partir de 0 pour les étudiants en physique théorique # 2
Classification des images de guitare par apprentissage automatique, partie 2
mémo d'apprentissage progate Python (mis à jour de temps en temps)
[Pour les débutants] Introduction à la vectorisation dans l'apprentissage automatique
Disposition des éléments auto-mentionnés liés à l'apprentissage automatique
[Keras] J'ai essayé de résoudre le problème de classification des zones de type beignet par apprentissage automatique [Étude]
SVM (classification multi-classes)
Somme de 1 à 10
Programmation Python Machine Learning Chapitre 1 donne aux ordinateurs la possibilité d'apprendre à partir du résumé des données
Recueillir les informations erronées de Toshiyuki Sakamoto "Faire et comprendre! Introduction à l'algorithme d'apprentissage d'ensemble"
[Python] Enregistrez le PDF de Google Colaboratory sur Google Drive! -Collectons des données pour l'apprentissage automatique
Apprentissage supervisé (classification)
[Memo] Apprentissage automatique
Exemple d'apprentissage automatique