[PYTHON] [Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau

Apprentissage supervisé utilisant l'estimation de la densité du noyau

Cet article est écrit par des débutants en apprentissage automatique. Notez s'il vous plaît.

Un exemple réellement utilisé est ici. Le contexte spécifique de l'idée et le contenu révisé sont ici.

Qu'est-ce que l'estimation de la densité du noyau?

Bukkake [WIkipedia](https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E5%AF%86%E5% BA% A6% E6% 8E% A8% E5% AE% 9A) est plus rapide.

Imaginez un simple histogramme. On peut dire que la partie où l'histogramme est haut est *** relativement facile à réaliser dans l'ensemble, et la partie où l'histogramme est bas *** est relativement peu probable ***. Avez-vous déjà entendu une histoire similaire quelque part?

C'est la même idée que la fonction de densité de probabilité. Un histogramme est, en un sens, une *** vraie fonction de densité de probabilité *** estimée par une mesure réelle ***. *** L'estimation de la densité par noyau *** est une méthode d'estimation plus continue et plus fluide utilisant des fonctions de noyau.

Qu'est-ce que l'apprentissage supervisé

[Wikipédia](https://ja.wikipedia.org/wiki/%E6%95%99%E5%B8%AB%E3%81%82%E3%82%8A%E5%AD%A6%E7%BF % 92) Voir l'enseignant ou lire la Qiita d'une autre personne.

Estimation de la densité du noyau et apprentissage supervisé

Un «enseignant» en apprentissage supervisé est un ensemble de «données» et «d'étiquette correcte».

Considérez un ensemble de données avec l'étiquette correcte "0, 1, 2". Il est divisé en données d'étiquette 0, données d'étiquette 1 et données d'étiquette 2. Si vous estimez la densité du noyau en utilisant les données de l'enseignant avec le libellé de réponse correct de 0, vous pouvez trouver la fonction de densité de probabilité pour l'événement selon lequel "le libellé devient 0".

Trouvez la fonction de densité de probabilité basée sur les données de l'enseignant pour toutes les étiquettes et calculez la densité de probabilité des données de test. Ensuite, classons par la taille de la valeur. Voilà cette tentative.

À proprement parler, il faut vraiment calculer la proportion de chaque label dans la population ... Je voudrais résumer à nouveau l'histoire difficile.

Implémentons-le pour le moment

Ce monde est merveilleux. Ceci est dû au fait que l'estimation de la densité du noyau utilisant le noyau gaussien a déjà été implémentée dans SciPy.

Comment utiliser KDE gaussien

Voici un bref résumé de la façon d'utiliser gaussian_kde de SciPy.

Effectuer une estimation de la densité du noyau

kernel = gaussian_kde(X, bw_method="scotts_factor", weights="None")

--X: ensemble de données pour l'estimation de la densité du noyau. --bw_method: bande passante du noyau. Scotts_factor s'il n'est pas spécifié. --weights: poids pour estimer la densité du noyau. Si non spécifié, tous les poids sont égaux.

Calculez la probabilité

Entrez de nouvelles données dans la fonction de densité de probabilité estimée pour calculer la probabilité.

pd = kernel.evaluate(Z)

--Z: point (s) de données pour lesquels vous souhaitez calculer la probabilité.

Il est renvoyé sous forme de tableau de liste contenant les probabilités Z.

Essayez d'apprendre avec un enseignant

Essayez-le avec le jeu de données iris de Scikit-learn!

Le flux est comme ça jeu de données iris lu → Divisez les données d'entraînement et les données de test avec train_test_split → Standardisation des données d'entraînement et des données de test → Effectuer une estimation de la densité du noyau pour chaque étiquette à l'aide des données d'apprentissage → Calculer la densité de probabilité pour chaque étiquette des données de test → Sortie de l'étiquette avec la plus grande valeur

↓ Script ↓

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from scipy.stats import gaussian_kde

# Chargement du jeu de données iris
iris = datasets.load_iris()
X = iris.data
y = iris.target

# Division des données d'entraînement et des données de test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
random_state=1, stratify=y)

# Standardisation
sc = StandardScaler()
sc = sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)

# Estimation de la densité du noyau
kernel0 = gaussian_kde(X_train_std[y_train==0].T)
kernel1 = gaussian_kde(X_train_std[y_train==1].T)
kernel2 = gaussian_kde(X_train_std[y_train==2].T)

# Calculer la densité de probabilité des données de test
p0s = kernel0.evaluate(X_test_std.T)
p1s = kernel1.evaluate(X_test_std.T)
p2s = kernel2.evaluate(X_test_std.T)

# Sortie d'étiquette de prédiction
y_pred = []
for p0, p1, p2 in zip(p0s, p1s, p2s):
    if max(p0, p1, p2) == p0:
        y_pred.append(0)
    elif max(p0, p1, p2) == p1:
        y_pred.append(1)
    else:
        y_pred.append(2)

Précautions pour la normalisation

Les données de test sont standardisées en utilisant la moyenne et l'écart type des données d'entraînement. En effet, si la normalisation est effectuée séparément, les données peuvent être biaisées ou mal alignées.

Précautions pour estimer la densité du noyau

Si vous laissez gaussian_kde lire le jeu de données tel quel, il semble que le vecteur de colonne *** soit traité comme une seule donnée ***. Cependant, le jeu de données iris transpose les données car *** vecteur de ligne est une donnée ***. Il en va de même pour le calcul de la densité de probabilité des données de test.

Sortie d'étiquette de prédiction

y_pred = []
for p0, p1, p2 in zip(p0s, p1s, p2s):
    if max(p0, p1, p2) == p0:
        y_pred.append(0)
    elif max(p0, p1, p2) == p1:
        y_pred.append(1)
    else:
        y_pred.append(2)

La densité de probabilité des données de test est stockée dans p0s, p1s, p2s pour chaque étiquette. Sortez un chacun

--0 si la valeur de l'étiquette 0 est le maximum --1 si la valeur de l'étiquette 1 est le maximum

Les résultats sont stockés dans la liste y_pred dans l'ordre des données de test.

Annonce des résultats

Vérifiez le taux de précision de l'étiquette de prédiction avec precision_score de scikit-learn. Palpiter.

from sklearn.metrics import accuracy_score
print(accuracy_score(y_test, y_pred))
 1.0

Hourra.

finalement

J'ai essayé d'utiliser le résultat de l'estimation de la densité du noyau comme classificateur pour l'apprentissage supervisé. En réalité, de telles techniques sont rarement utilisées. Je pense que cela a les inconvénients d'augmenter la quantité de calcul et de réduire considérablement la précision en fonction des données. Cependant, comme vous pouvez le voir à partir de cet essai, il semble que certaines données peuvent être classées relativement rapidement et correctement.

Suite sur Partie 2

Recommended Posts

[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 2
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 3
Estimation de la densité du noyau en Python
Apprentissage automatique: forêt supervisée - aléatoire
Machine Learning: Supervisé - Support Vector Machine
Machine learning supervisé (classification / régression)
Machine Learning: Supervisé - Arbre de décision
Apprentissage automatique: analyse discriminante linéaire supervisée
Développement d'applications à l'aide d'Azure Machine Learning
Apprentissage automatique
Prévision du cours des actions à l'aide de l'apprentissage automatique (scikit-learn)
[Apprentissage automatique] Classification des sujets LDA à l'aide de scikit-learn
[Apprentissage automatique] Prédiction FX à l'aide de l'arbre de décision
Prévision du cours des actions à l'aide de l'apprentissage automatique (édition de retour)
[Apprentissage automatique] Analyse de régression à l'aide de scicit learn
Une histoire sur l'apprentissage automatique simple avec TensorFlow
Astuces de fourniture de données utilisant deque dans l'apprentissage automatique
Apprentissage supervisé (classification)
Création d'un modèle d'estimation de position pour la compétition d'intelligence humaine de loup à l'aide de l'apprentissage automatique
Estimation raisonnable du prix de Mercari par apprentissage automatique
[Memo] Apprentissage automatique
Classification de l'apprentissage automatique
Essayez d'utiliser le bloc-notes Jupyter à partir d'Azure Machine Learning
Exemple d'apprentissage automatique
[Apprentissage automatique] Extraire des mots similaires mécaniquement en utilisant WordNet
Raisonnement causal utilisant l'apprentissage automatique (organisation des méthodes de raisonnement causal)
Créez des projets d'apprentissage automatique à une vitesse explosive à l'aide de modèles
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (3)
Python: Diagramme de distribution de données bidimensionnelle (estimation de la densité du noyau)
Apprentissage automatique avec des images de catégorie Caffe -1 à l'aide du modèle de référence
Tech-Circle Commençons le développement d'applications à l'aide de l'apprentissage automatique (auto-apprentissage)
[Apprentissage automatique] Essayez de détecter des objets à l'aide de la recherche sélective
[Apprentissage automatique] Classification de texte à l'aide du modèle Transformer (classificateur basé sur l'attention)
Mémo de construction d'environnement d'apprentissage automatique par Python
Ce que j'ai appris sur l'IA / l'apprentissage automatique avec Python (2)
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
Résumé du didacticiel d'apprentissage automatique
Apprentissage automatique sur le surapprentissage
Apprentissage automatique ⑤ Résumé AdaBoost
Régression logistique d'apprentissage automatique
Machine de vecteur de support d'apprentissage automatique
Étudier l'apprentissage automatique ~ matplotlib ~
Régression linéaire d'apprentissage automatique
Mémo du cours d'apprentissage automatique
Bibliothèque d'apprentissage automatique dlib
Apprentissage automatique (TensorFlow) + Lotto 6
Estimation de la valeur de capacité à l'aide de pyirt
Apprenez en quelque sorte le machine learning
Apprendre avec un enseignant (retour) 1 Bases
Python: apprentissage supervisé (retour)
Bibliothèque d'apprentissage automatique Shogun
Défi de lapin d'apprentissage automatique
Introduction à l'apprentissage automatique
Python: apprentissage supervisé (classification)
Apprentissage automatique: k-voisins les plus proches
Qu'est-ce que l'apprentissage automatique?
Créer un environnement d'apprentissage automatique à l'aide de Python sur MacOSX
Prédiction de survie Titanic à l'aide de l'outil de gestion du flux de travail d'apprentissage automatique Kedro