Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (16)

Dernière fois Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python au devoir (15) https://github.com/legacyworld/sklearn-basic

Défi 7.3 Comparaison de la méthode du gradient et de la méthode de Newton en régression logistique

Commentaire sur Youtube: 8e (1) toutes les 27 minutes Je n'ai pas pu obtenir le résultat expliqué dans la conférence, probablement parce que la mise en œuvre de la méthode re-deep était mauvaise. Je l'ai essayé avec une régression de crête, etc., mais le résultat n'a pas beaucoup changé.

Mathématiquement, il implémente ce qui suit:

La méthode de descente la plus raide

E(w) = -\frac{1}{N}\sum_{n=1}^{N}{t_n\,\log\hat t_n + (1-t_n)\,\log(1-\hat t_n)}\\
\frac{\partial E(w)}{\partial w} = X^T(\hat t-t) \\
w \leftarrow w - \eta X^T(\hat t-t)

Dans les données d'iris, $ N = 150 $, $ w $ correspond à 5 dimensions en ajoutant des sections La raison pour laquelle $ E (w) $ est divisé par $ N $ est que le coût initial ne correspond pas à moins que cela ne soit fait. Cependant, même avec cela, seulement 0,1 a divergé, et à part cela, il a convergé correctement. Je pense que quelque chose ne va pas, mais je ne suis pas sûr.

Méthode Newton

\nabla \nabla E(w) = X^TRX\,,R=\hat{t}_n(1-\hat{t}_n)Matrice diagonale de\\
w \leftarrow w-(X^TRX)^{-1}X^T(\hat{t}-t)

La méthode Newton est généralement correcte, mais malheureusement le coût final est assez différent. Il est également difficile de comprendre que seuls trois poids sont affichés dans les résultats de la conférence.

Cliquez ici pour le code source Puisque le code source de l'exercice 4.3 est détourné, il est classé par BaseEstimator, mais il n'y a pas de signification.

python:Homework_7.3.py


#Défi 7.3 Comparaison de la méthode du gradient et de la méthode de Newton en régression logistique
#Commentaire sur Youtube: 8e(1)Par 27 minutes
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import preprocessing,metrics
from sklearn.linear_model import LogisticRegression
from sklearn.base import BaseEstimator
import statsmodels.api as sm
from sklearn.datasets import load_iris  
iris = load_iris()

class MyEstimator(BaseEstimator):
    def __init__(self,ep,eta):
        self.ep = ep
        self.eta = eta
        self.loss = []

    def fit(self, X, y,f):
        m = len(y)
        loss = []
        diff = 10**(10)
        ep = self.ep
        #Types de fonctionnalités
        dim = X.T.shape[1]
        #Valeur initiale de la version bêta
        beta = np.zeros(dim).reshape(-1,1)
        eta = self.eta
        
        while abs(diff) > ep:
            t_hat = self.sigmoid(beta.T,X)
            loss.append(-(1/m)*np.sum(y*np.log(t_hat) + (1-y)*np.log(1-t_hat)))
            #La méthode de descente la plus raide
            if f == "GD":
                beta = beta - eta*np.dot(X,(t_hat-y).reshape(-1,1))
            #Méthode Newton
            else:
                #Matrice diagonale de NxN
                R = np.diag((t_hat*(1-t_hat))[0])
                #Procession de Hesse
                H = np.dot(np.dot(X,R),X.T)
                beta = beta - np.dot(np.linalg.inv(H),np.dot(X,(t_hat-y).reshape(-1,1)))
            if len(loss) > 1:
                diff = loss[len(loss)-1] - loss[len(loss)-2]
                if diff > 0:
                    break
        self.loss = loss
        self.coef_ = beta
        return self

    def sigmoid(self,w,x):
        return 1/(1+np.exp(-np.dot(w,x)))

#Graphique
fig = plt.figure(figsize=(20,10))
ax = [fig.add_subplot(3,3,i+1) for i in range(9)]

#Considérez simplement si virginica ou non
target = 2
X = iris.data
y = iris.target
# y =Pas 2(Pas virginica)Si 0
y[np.where(np.not_equal(y,target))] = 0
y[np.where(np.equal(y,target))] = 1
scaler = preprocessing.StandardScaler()
X_fit = scaler.fit_transform(X)
X_fit = sm.add_constant(X_fit).T #Ajouter 1 à la première colonne
epsilon = 10 ** (-8)
#La méthode de descente la plus raide
eta_list = [0.1,0.01,0.008,0.006,0.004,0.003,0.002,0.001,0.0005]
for index,eta in enumerate(eta_list):
    myest = MyEstimator(epsilon,eta)
    myest.fit(X_fit,y,"GD")
    ax[index].plot(myest.loss)
    ax[index].set_title(f"Optimization with Gradient Descent\nStepsize = {eta}\nIterations:{len(myest.loss)}; Initial Cost is:{myest.loss[0]:.3f}; Final Cost is:{myest.loss[-1]:.6f}")
plt.tight_layout()    
plt.savefig(f"7.3GD.png ")

#Méthode Newton
myest.fit(X_fit,y,"newton")
plt.clf()
plt.plot(myest.loss) 
plt.title(f"Optimization with Newton Method\nInitial Cost is:{myest.loss[0]:.3f}; Final Cost is:{myest.loss[-1]:.6f}")
plt.savefig("7.3Newton.png ")

#Résultats de la régression logistique de sklearn
X_fit = scaler.fit_transform(X)
clf = LogisticRegression(penalty='none')
clf.fit(X_fit,y)
print(f"accuracy_score = {metrics.accuracy_score(clf.predict(X_fit),y)}")
print(f"coef = {clf.coef_} intercept = {clf.intercept_}")

Résultats de la méthode de descente la plus raide

Dans la conférence, le paramètre de pas a divergé jusqu'à 0,003 et est devenu le minimum à 0,002, mais le résultat était complètement différent. 7.3GD.png

Résultats de la méthode Newton

Le coût final est inférieur d'un chiffre, mais le nombre de fois est à peu près le même que celui de la conférence. Cela ne semble pas si mal. 7.3Newton.png

Résultats de la régression logistique de sklearn

accuracy_score = 0.9866666666666667
coef = [[-2.03446841 -2.90222851 16.58947002 13.89172352]] intercept = [-20.10133936]

résultat

Les paramètres obtenus sont les suivants La méthode de plongée est le résultat lorsque le coût final est la plus petite taille de pas = 0,01

La méthode de descente la plus raide:(w_0,w_1,w_2,w_3,w_4) = (-18.73438888,-1.97839772,-2.69938233,15.54339092,12.96694841)\\
Méthode Newton:(w_0,w_1,w_2,w_3,w_4) = (-20.1018028,-2.03454941,-2.90225059,16.59009858,13.89184339)\\
sklearn:(w_0,w_1,w_2,w_3,w_4) = (-20.10133936,-2.03446841,-2.90222851,16.58947002,13.89172352)

La méthode de Newton est certes rapide, mais elle nécessite un calcul de matrice inverse, donc si le nombre de dimensions ou le nombre d'échantillons augmente, finira-t-il par s'installer dans la méthode stochastique re-soudaine?

Messages passés

Cours d'apprentissage automatique à l'Université de Tsukuba: étudier et renforcer sklearn tout en créant la partie script Python de la tâche (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) 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 https://ocw.tsukuba.ac.jp/course/systeminformation/machine_learning/

Recommended Posts

Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (17)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en créant le script Python faisant partie du devoir (5)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (16)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (10)
Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python à la tâche (2)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (13)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (9)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (4)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (12)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (1)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (11)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (3)
Cours d'apprentissage automatique à l'Université de Tsukuba: étudier sklearn tout en intégrant le script Python à la tâche (14)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en créant le script Python faisant partie du devoir (6)
Cours d'apprentissage automatique à l'Université de Tsukuba: Étudiez sklearn tout en intégrant le script Python à la tâche (15)
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
Mémo d'étude Python & Machine Learning ⑤: Classification d'Ayame
Mémo d'étude Python & Machine Learning ②: Introduction de la bibliothèque
Script Python de collection d'images pour créer des ensembles de données pour l'apprentissage automatique
Résumé du flux de base de l'apprentissage automatique avec Python
Le résultat de l'apprentissage automatique des ingénieurs Java avec Python www
[Livre d'images sur l'apprentissage automatique] Mémo lorsque l'exercice Python à la fin du livre a été effectué lors de la vérification des données
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer jusqu'à la fin du chapitre 2
Mémo d'étude Python & Machine Learning: Préparation de l'environnement
Notes d'apprentissage depuis le début de Python 1
J'ai installé Python 3.5.1 pour étudier l'apprentissage automatique
Cours de base Python (à la fin de 15)
Mémo d'étude Python & Machine Learning ③: Réseau neuronal
Mémo d'étude Python & Machine Learning ④: Machine Learning par rétro-propagation
Notes d'apprentissage depuis le début de Python 2
Mémo d'étude Python & Machine Learning ⑥: Reconnaissance des nombres
Alignez le nombre d'échantillons entre les classes de données pour l'apprentissage automatique avec Python
Présentation du livre "Créer une IA rentable avec Python" qui vous permet d'apprendre l'apprentissage automatique dans le cours le plus court
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 1
[Python] Lire le code source de Bottle Part 2
Classification des images de guitare par apprentissage automatique Partie 1
Apprentissage automatique à partir de Python Personal Memorandum Part2
L'histoire selon laquelle le coût d'apprentissage de Python est faible
Mathématiques Todai 2016 résolues avec Python
Apprentissage automatique à partir de Python Personal Memorandum Part1
EV3 x Python Machine Learning Partie 2 Régression linéaire
[Python] Lire le code source de Bottle Part 1
À propos du contenu de développement de l'apprentissage automatique (exemple)
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 2
Classification des images de guitare par apprentissage automatique, partie 2
Touchons une partie de l'apprentissage automatique avec Python
Mémo d'étude Python & Machine Learning ⑦: Prévision du cours de l'action
[Python + OpenCV] Peignez la partie transparente de l'image en blanc
Prédire le temps objectif d'un marathon complet avec l'apprentissage automatique-③: j'ai essayé de visualiser les données avec Python-
La première étape de l'apprentissage automatique ~ Pour ceux qui veulent essayer l'implémentation avec python ~
[CodeIQ] J'ai écrit la distribution de probabilité des dés (du cours de mathématiques CodeIQ pour l'apprentissage automatique [Distribution de probabilités])
[Apprentissage automatique] "Détection d'anomalies et détection de changement" Dessinons la figure du chapitre 1 en Python.