** Peut également être utilisé pour la régression, mais ici nous allons faire un cas de classification. ** **
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
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 |
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)
X_train, X_test, y_train, y_test = train_test_split(
iris.data,
iris.target,
stratify = iris.target, #Échantillonnage stratifié
random_state = 0)
stratify = iris.target
spécifie ** l'échantillonnage stratifié ** par type (iris.target). La valeur par défaut est l'échantillonnage aléatoire, nous allons donc le diviser ici pour qu'il conserve trois types de ratios de composition pour l'entraînement et les tests.print("forme:", y_train.shape)
#Obtenez le nombre d'éléments uniques
np.unique(y_train, return_counts=True)
#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)
#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()
#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)
Z
pour dessiner les limites de chaque groupe sur un plan bidimensionnel#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
xx
et yy
à une dimension avec la fonctionravel ()
, et transmettez-la au modèle pour prédire ce qui est combiné avec la fonctionc_ ()
de numpy.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()
pcolormesh ()
de matplotlib produit un tracé de couleur basé sur une grille rectangulaire irrégulière.