Tout le monde, bonsoir. J'écrirai la phrase du 19/12. J'avais quelque chose à faire aujourd'hui et il était tard. .. ..
Aujourd'hui, je voudrais résumer la classification du modèle SVC linéaire que j'ai étudié hier.
Voir l'image ci-dessus. La classification consiste à trouver automatiquement la ligne qui sépare ce point bleu de la croix orange. Le bidimensionnel est très facile pour les humains, n'est-ce pas? Le modèle SVC est étonnant car il semble que vous puissiez demander une expression à diviser même dans le cas de grandes dimensions. Alors, à quoi cela sert-il? Beaucoup de gens auraient pensé. Que diriez-vous de l'image ci-dessous?
Avez-vous vu la différence? Oui, G-mail lit naturellement le courrier indésirable, mais c'est la puissance de l'IA. (L'algorithme est plus compliqué.) Cependant, ce qu'ils font est la même chose, tracer une ligne droite (visage) et analyser s'il s'agit de spam ou de courrier valide. C'est beau et incroyable, n'est-ce pas?
Eh bien, je vais vous montrer l'image de l'objectif final d'aujourd'hui. Ce sera comme suit.
⚠︎ Il y a quelque chose dont je veux faire attention. Autrement dit, dans le cas de cet exemple, une ligne infinie peut être dessinée. Par conséquent, une fois que la largeur de cette ligne en pointillé (fusion) est la plus large, une ligne pleine (limite de décision) est dessinée au milieu.
Regardons maintenant le code pour trouver cette limite de décision.
import numpy as np
from sklearn.svm import SVC
import matplotlib.pyplot as plt
xmin = 0
xmax = 2
ymin = 0
ymax = 2
# 0 ~Contient des valeurs selon une distribution normale jusqu'à 1 (100 lignes et 2 colonnes (X & Y))) Créer une matrice
X0 = np.random.uniform(size=(100, 2))
y0 = np.repeat(0, 100)
X1 = np.random.uniform(low=1.0, high=2.0, size=(100, 2))
y1 = np.repeat(1, 100)
svc = SVC(kernel='linear', C=1e8)
#Apprentissage
# svc.fit(train_features, train_labels)
svc.fit(np.vstack((X0, X1)), np.hstack((y0, y1)))
fig, ax = plt.subplots()
# ax.scatter(x, y)Nuage de points
ax.scatter(X0[:, 0], X0[:, 1], marker='o', label='class 0')
ax.scatter(X1[:, 0], X1[:, 1], marker='x', label='class 1')
#Préparer les points de grille
xx, yy = np.meshgrid(np.linspace(xmin, xmax, 100), np.linspace(ymin, ymax, 100))
# decision_Dans une matrice pour la fonction.
xy = np.vstack([xx.ravel(), yy.ravel()]).T
# 100 *Une matrice de 100.
# z = x*2 + y*La partie de la hauteur de z de la pièce à 2.
#Z est obtenu à partir d'un point de grille appelé xy en utilisant la fonction de décision svc.
z = svc.decision_function(xy).reshape((100, 100))
#Tracer les limites et les marges de décision
ax.contour(xx, yy, z, colors='k', levels=[-1, 0, 1], alpha=0.3, linestyles=['--', '-', '--'])
plt.show()
En tant que flux,
Les fonctions importantes sont fit et decision_funkction. Je comprends comment utiliser fit, mais decision_function ne peut comprendre que comment trouver Z en utilisant un classificateur. Je vais l'étudier un peu plus et écrire un article.
Il est tard dans la nuit aujourd'hui, alors c'est à peu près tout. bonne nuit.