Dernière fois Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (8) Créez votre propre méthode de descente stochastique la plus raide https://github.com/legacyworld/sklearn-basic
Nous classons les deux morceaux, mais le problème est divisé en ceux avec et sans écarts qui s'écartent considérablement des morceaux.
Le commentaire Youtube est d'environ 54 minutes du 6ème (1) La perte de charnière de celui sans valeur de déviation est en fait la même que l'exemple de scicit-learn. Il était plus difficile d'utiliser matplotlib que la partie SVM. L'histoire originale est celle-ci https://scikit-learn.org/stable/auto_examples/svm/plot_separating_hyperplane.html#sphx-glr-auto-examples-svm-plot-separating-hyperplane-py J'ai ajouté un commentaire pour mon propre apprentissage.
python:Homework_5.3_hinge_no_outlier.py
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs
#Créer 40 jeux de données de classification aléatoires Spécifier le nombre de blocs dans les centres
X, y = make_blobs(n_samples=40, centers=2, random_state=6)
# kernel='linear'Plus la perte de charnière C est importante, moins la régularisation est efficace
clf = svm.SVC(kernel='linear', C=1000)
clf.fit(X, y)
#Dessinez des données de classification. La couleur est décidée par la partie cmap.
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
#Tracer la frontière de décision
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
#Faire une grille 30x30
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
#Classification dans chaque réseau
Z = clf.decision_function(xy).reshape(XX.shape)
#Tracer des limites de décision à l'aide du niveau des lignes de contour=0 lui correspond
ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,
linestyles=['--', '-', '--'])
#Dessinez le vecteur de support avec la plus petite marge
ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100,
linewidth=1, facecolors='none', edgecolors='k')
plt.savefig("5.3.png ")
Seules deux lignes sont réellement calculées. Le résultat ressemble à ceci.
Je pouvais comprendre cela parce qu'il y avait un code source dans la vidéo de commentaire, mais c'était impossible sans lui.
python:Homework_5.3_square_no_outlier.py
import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model
from sklearn.datasets import make_blobs
#Créer 40 jeux de données de classification aléatoires Spécifier le nombre de blocs dans les centres
X, y = make_blobs(n_samples=40, centers=2, random_state=6)
#La valeur de y-1,Définir sur 1
y = y*2-1
#Perte carrée
clf = linear_model.LinearRegression(fit_intercept=True,normalize=True,copy_X=True)
clf.fit(X, y)
#Dessinez des données de classification. La couleur est décidée par la partie cmap.
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
#Tracer la frontière de décision
x_plot = np.linspace(4,10,100)
w = [clf.intercept_,clf.coef_[0],clf.coef_[1]]
y_plot = -(w[1]/w[2]) * x_plot - w[0]/w[2]
plt.plot(x_plot,y_plot)
plt.savefig("5.3.png ")
L'idée est d'effectuer une régression multiple linéaire avec $ X $ créé avec make_blobs
comme quantité de caractéristiques (2 types) et $ y $ comme quantité cible.
Dans cet exemple, le nombre d'échantillons de caractéristiques est de 40.
Dans le graphique ci-dessus, l'axe horizontal est $ x_1 $ et l'axe vertical est $ x_2 $.
y = w_0 + w_1\times x_1 + w_2\times x_2
Peut être exprimé comme.
Dans make_blobs
, $ y = 0,1 $, mais cela est changé en $ y = -1,1 $ par y = y * 2-1
.
La frontière de décision peut être dessinée en définissant $ y = 0 $.
0 = w_0 + w_1\times x_1 + w_2\times x_2 \\
x_2 = -\frac{w_0}{w_2} - \frac{w_1}{w_2}x_1
Ceci est la dernière partie du code source. C'est ce que j'ai dessiné.
S'il n'y a pas d'écart important, des résultats similaires peuvent être obtenus avec à la fois une perte de charnière et une perte de carré. Cependant, lorsqu'il existe une valeur aberrante importante, la perte carrée surestime la perte de la valeur aberrante, ce qui rend impossible l'obtention du résultat correct. Cela sera expliqué la prochaine fois.
Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (1) Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (2) Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (3) Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (4) Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (5) Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (6) Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (7) Créez votre propre méthode de descente la plus raide https://github.com/legacyworld/sklearn-basic https://ocw.tsukuba.ac.jp/course/systeminformation/machine_learning/
Recommended Posts