Dernière fois Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (14) https://github.com/legacyworld/sklearn-basic
Le commentaire sur Youtube est le 8e (1) toutes les 20 minutes La tâche en elle-même était si simple que je programme un peu plus moi-même pour comprendre la régression logistique. Le problème de trouver $ E (w) $ pour chaque échantillon d'apprentissage ($ x_ {1i}, x_ {2i}, i = (1,2, \ cdots, 10) $). $ E (w) $ est exprimé comme suit.
E(w) = -\sum_{n=1}^{N}{t_n\,ln\hat t_n + (1-t_n)\,ln(1-\hat t_n)}
Dans cet exemple
Après avoir trouvé $ E (w) $, nous utilisons également la régression logistique pour trouver $ w $. Cliquez ici pour le code source
python:Homework_6.6.py
import numpy as np
from sklearn.linear_model import LogisticRegression
#Fonction Sigmaid
def sigmoid(w,x):
return 1/(1+np.exp(-np.dot(w,x)))
#Perte d'entropie croisée
def cross_entropy_loss(w,x,y):
y_sig = sigmoid(w,x)
return -np.sum(y*np.log(y_sig)+(1-y)*np.log(1-y_sig),axis=1)
X = np.array([[1.5,-0.5],[-0.5,-1.0],[1.0,-2.5],[1.5,-1.0],[0.5,0.0],[1.5,-2.0],[-0.5,-0.5],[1.0,-1.0],[0.0,-1.0],[0.0,0.5]])
X = np.concatenate([X,np.ones(10).reshape(-1,1)],1)
y = np.array([1,0,0,1,1,1,0,1,0,0])
w = np.array([[6,3,-2],[4.6,1,-2.2],[1,-1,-2]])
print(f"E(w1) = {cross_entropy_loss(w,X.T,y)[0]:.3f} E(w2) = {cross_entropy_loss(w,X.T,y)[1]:.3f} E(w3) = {cross_entropy_loss(w,X.T,y)[2]:.3f}")
for c_value in [10**(a-2) for a in range(5)]:
clf = LogisticRegression(C=c_value).fit(X,y)
w = np.array([[clf.coef_[0][0],clf.coef_[0][1],clf.intercept_[0]]])
print(f"C = {c_value} w = {w} E(w) = {cross_entropy_loss(w,X.T,y)}")
Résultat d'exécution
E(w1) = 1.474 E(w2) = 1.832 E(w3) = 6.185
C = 0.01 w = [[ 0.02956523 0.00018875 -0.01756914]] E(w) = [6.84341713]
C = 0.1 w = [[ 0.26242317 0.01451582 -0.1445077 ]] E(w) = [6.19257501]
C = 1 w = [[ 1.38391039 0.32530732 -0.55198479]] E(w) = [3.91381807]
C = 10 w = [[ 3.9100986 1.36910424 -1.28870173]] E(w) = [1.77721899]
C = 100 w = [[ 9.40098848 3.40849535 -3.23672119]] E(w) = [0.57516562]
Dans la régression logistique, le paramètre de régularisation L2 est déplacé de 0,01 à 100, et la perte d'entropie croisée est également affichée pour chaque $ w $ calculé. On voit que la valeur absolue de $ w $ augmente naturellement là où la régularisation n'est pas très efficace (C est grand).
D'ailleurs, s'il n'est pas régularisé, ce sera comme suit
Homework_6.6.py:13: RuntimeWarning: divide by zero encountered in log
return -np.sum(y*np.log(y_sig)+(1-y)*np.log(1-y_sig),axis=1)
Homework_6.6.py:13: RuntimeWarning: invalid value encountered in multiply
return -np.sum(y*np.log(y_sig)+(1-y)*np.log(1-y_sig),axis=1)
No regularization w = [[57.89037518 20.53048228 -9.91476711]] E(w) = [nan]
La valeur absolue de $ w $ devient trop grande et 1 est renvoyé dans le calcul de la fonction sigmoïde, rendant impossible le calcul du journal et une erreur se produit.
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 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 Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (9) Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (10) Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (11) Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (12) Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (13) https://github.com/legacyworld/sklearn-basic https://ocw.tsukuba.ac.jp/course/systeminformation/machine_learning/
Recommended Posts