2. Analyse multivariée expliquée dans Python 8-1. Méthode de voisinage k (scikit-learn)

2_8_1_01.PNG

** Peut également être utilisé pour la régression, mais ici nous allons faire un cas de classification. ** **

⑴ Bibliothèque d'importation

import numpy as np
import pandas as pd

from sklearn import datasets
# sklearn.module de voisins k-Méthode NN
from sklearn.neighbors import KNeighborsClassifier
#utilitaire de fractionnement de données sklearn
from sklearn.model_selection import train_test_split

import matplotlib.pyplot as plt
#Méthode pour générer une carte de couleurs
from matplotlib.colors import ListedColormap

#Module d'affichage japonais de matplotlib
!pip install japanize-matplotlib
import japanize_matplotlib

Préparez les données

Nom de variable sens Remarque Type de données
0 species type Setosa=0, Versicolour=1, Virginica=2 int64
1 sepal length La longueur de la pièce Montant continu(cm) float64
2 sepal width Largeur de la pièce Montant continu(cm) float64
3 petal length Longueur des pétales Montant continu(cm) float64
4 petal width Largeur des pétales Montant continu(cm) float64

⑵ Acquisition de données

iris = datasets.load_iris()
#Variable explicative (montant de la fonction)
print("étiquette:\n", iris.feature_names)
print("forme:\n", iris.data.shape)
print("10 premières lignes:\n", iris.data[0:10, :]) 

#Variable objective (type)
print("étiquette:\n", iris.target_names)
print("forme:\n", iris.target.shape)
print("Affichage complet:\n", iris.target)

2_8_1_02.PNG

⑶ Division des données

X_train, X_test, y_train, y_test = train_test_split(
    iris.data, 
    iris.target,
    stratify = iris.target, #Échantillonnage stratifié
    random_state = 0)
print("forme:", y_train.shape)

#Obtenez le nombre d'éléments uniques
np.unique(y_train, return_counts=True)

2_8_1_03.PNG

Déterminez le nombre de k

⑷ Exécutez k-NN tout en modifiant le paramètre k

#Variable qui stocke le taux de précision
training_accuracy = []
test_accuracy = []

#k en changeant k-Exécutez NN et obtenez le taux de réponse correct
for k in range(3,21):
    #Passez k pour créer une instance, ajuster les données et générer un modèle
    kNN = KNeighborsClassifier(n_neighbors = k)
    kNN.fit(X_train, y_train)
    #Obtenez le taux de réponse correct avec le score et stockez-le séquentiellement
    training_accuracy.append(kNN.score(X_train, y_train))
    test_accuracy.append(kNN.score(X_test, y_test))

#Convertir le taux de précision en tableau numpy
training_accuracy = np.array(training_accuracy)
test_accuracy = np.array(test_accuracy)

⑸ Sélectionnez le paramètre k optimal

#Modifications du taux de précision pour la formation et les tests
plt.figure(figsize=(6, 4))

plt.plot(range(3,21), training_accuracy, label='Entraînement')
plt.plot(range(3,21), test_accuracy, label='tester')

plt.xticks(np.arange(2, 21, 1)) #échelle de l'axe des x
plt.xlabel('nombre k')
plt.ylabel('Taux de réponse correct')
plt.title('Transition du taux de réponse correcte')

plt.grid()
plt.legend()

#Transition de la différence de taux de réponse correcte
plt.figure(figsize=(6, 4))

difference = np.abs(training_accuracy - test_accuracy) #Calculez la différence
plt.plot(range(3,21), difference, label='Différence')

plt.xticks(np.arange(2, 21, 1)) #échelle de l'axe des x
plt.xlabel('nombre k')
plt.ylabel('Différence(train - test)')
plt.title('Transition de la différence de taux de réponse correcte')

plt.grid()
plt.legend()

plt.show()

2_8_1_04.PNG

Exécuter et visualiser k-NN

⑹ Réexécuter k-NN avec le paramètre k optimal

#Spécifiez le nombre de k
k = 15

#Définir la variable explicative X et la variable objective y
X = iris.data[:, :2]
y = iris.target

#Créer une instance, ajuster les données et générer un modèle
model = KNeighborsClassifier(n_neighbors=k)
model.fit(X, y)

⑺ Tracé sur diagramme de contour (diagramme isoligne)

#Spécifier l'espacement du maillage
h = 0.02

#Créer une carte de couleurs
cmap_surface = ListedColormap(['darkseagreen', 'mediumpurple', 'gold']) #Pour le graphique de surface
cmap_dot = ListedColormap(['darkgreen', 'darkslateblue', 'olive']) #Pour le dessin dispersé

# x,Obtenez les valeurs minimale et maximale de l'axe des y
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
#Générer des colonnes de grille à des intervalles de maillage spécifiés
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                     np.arange(y_min, y_max, h))

#Prédire en passant la séquence de grille au modèle
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape) #Conversion de forme

2_8_1_06.PNG

plt.figure(figsize=(6,5))

#Isoler le diagramme
plt.pcolormesh(xx, yy, Z, cmap=cmap_surface)
#Nuage de points
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap_dot, s=30)

plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.xlabel('sepal length')
plt.ylabel('sepal width')

plt.show()

2_8_1_05.PNG

Épilogue

Recommended Posts

2. Analyse multivariée expliquée dans Python 8-1. Méthode de voisinage k (scikit-learn)
2. Analyse multivariée énoncée dans Python 8-3. Méthode de voisinage K [vérification d'intersection]
2. Analyse multivariée expliquée dans Python 8-2. Méthode de voisinage k [méthode de pondération] [modèle de retour]
2. Analyse multivariée définie dans Python 1-1. Analyse de régression simple (scikit-learn)
2. Analyse multivariée décrite dans Python 7-1. Arbre de décision (scikit-learn)
2. Analyse multivariée décrite dans Python 2-1. Analyse de régression multiple (scikit-learn)
2. Analyse multivariée expliquée dans Python 3-1. Analyse en composantes principales (scikit-learn)
2. Analyse multivariée définie dans Python 6-2. Régression Ridge / Régression Lasso (scikit-learn) [Régression Ridge vs régression Lasso]
2. Analyse multivariée décrite dans Python 6-1. Régression de crête / Régression de lasso (scikit-learn) [régression multiple vs régression de crête]
2. Analyse multivariée décrite dans Python 3-2. Analyse en composantes principales (algorithme)
2. Analyse multivariée expliquée dans Python 7-3. Arbre de décision [arbre de retour]
2. Analyse multivariée décrite dans Python 1-2. Analyse de régression simple (algorithme)
2. Analyse multivariée décrite dans Python 6-3. Régression Ridge / Régression Lasso (scikit-learn) [Fonctionnement de la régularisation]
2. Analyse multivariée expliquée dans Python 5-3. Analyse de régression logistique (modèles statistiques)
[Python] [scikit-learn] k-Introduction au mémo de la méthode du voisin le plus proche
2. Analyse multivariée expliquée dans Python 7-2. Arbre de décision [différence de critères de division]
2. Analyse multivariée détaillée dans Python 2-3. Analyse de régression multiple [taux d’infection au COVID-19]
Implémentation de la méthode k-voisinage en python à partir de scikit learn
Méthode Simplex (méthode unique) en Python
Méthode privée en python
Analyse d'association en Python
Analyse de régression avec Python
Une implémentation Python simple de la méthode k-voisinage (k-NN)
Méthode de voisinage K (classification multi-classes)
Analyse des contraintes symétriques axiales avec Python
Analyse de régression simple avec Python
[Apprentissage automatique] Ecrivez vous-même la méthode k-plus proche voisin en python et reconnaissez les nombres manuscrits.
Suppression des substitutions de méthode en Python
[Python] PCA scratch dans l'exemple de "Introduction à la méthode d'analyse multivariée"
Analyse des ondes cérébrales avec Python: tutoriel Python MNE
Première analyse de régression simple en Python
Implémentation de la méthode de propagation d'étiquettes en Python
Simuler la méthode Monte Carlo en Python
Scikit-learn ne peut pas être installé en Python
Méthode Hash (méthode d'adresse ouverte) en Python
Analyse du squelette planaire dans Python (2) Hotfix
Régression linéaire en Python (statmodels, scikit-learn, PyMC3)
Méthode pour créer un environnement Python dans Xcode 6
Simulation au microscope électronique en Python: méthode multi-coupes (1)
Simulation au microscope électronique en Python: méthode multi-coupes (2)
Analyse résiduelle en Python (Supplément: règles Cochrane)
Algorithme d'alignement par méthode d'insertion en Python