Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen. (7) Erstellen Sie Ihre eigene Methode für den steilsten Abstieg

Letztes Mal Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (6) https://github.com/legacyworld/sklearn-basic

Herausforderung 4.3 Die Methode mit dem steilsten Abstieg und die Methode mit dem stochastischen steilsten Abstieg

Kommentar ist 5. (1) pro 21 Minuten Als ich die Aufgabe las, dachte ich, es sei ein einfacher Gewinn, aber als ich mir die Erklärung ansah, war es mit Scikit-Learn unmöglich, wie es (wahrscheinlich) war. Der Grund dafür ist, dass ich keine Möglichkeit gefunden habe, ein Diagramm zu zeichnen, in dem Verlust jedes Mal angezeigt wird, wenn ich mich schrittweise bewege. Da es eine große Sache ist, habe ich Folgendes implementiert, um verschiedene Dinge zu studieren.

Wenn Sie googeln, gibt es viele Methoden, die plötzlich auftreten, aber ich kann nicht viele finden, die eine Gratregression beinhalten. Dies ist die mathematische Erklärung. https://www.kaggle.com/residentmario/ridge-regression-cost-function

\lambda =Regularisierungsparameter,
\beta = \begin{pmatrix} \beta_0 \\ \beta_1\\ \vdots \\ \beta_m \end{pmatrix},
y = \begin{pmatrix} y_1 \\ y_2 \\ \vdots \\ y_N \end{pmatrix},
X = \begin{pmatrix}
1&x_{11}&x_{12}&\cdots&x_{1m}\\
1&x_{21}&x_{22}&\cdots&x_{2m}\\
\vdots\\
1&x_{N1}&x_{N2}&\cdots&x_{Nm}
\end{pmatrix}\\ \\
\beta^{t+1} = \beta^{t}(1-2\lambda\eta) - \eta\frac{1}{N}X^T(X\beta^t-y) (※2020/5/31 Korrektur)

Mit diesen Weindaten ist $ m = 11, N = 1599 $ Bei Anwendung auf das Programm

\lambda : l \beta : beta \eta : eta X: X_fit (X in MyEstimator) y : y

Informationen zum Programm finden Sie im Folgenden. Maschinelles Lernen von Anfang an: Multiples Regressionsmodell nach der Methode des steilsten Abstiegs - Von Grund auf mit Python und R-

python:Homework_4.3GD.py


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import preprocessing
from sklearn.base import BaseEstimator
from sklearn.model_selection import cross_validate
import statsmodels.api as sm

class MyEstimator(BaseEstimator):
    def __init__(self,ep,eta,l):
        self.ep = ep
        self.eta = eta
        self.l = l
        self.loss = []
    # fit()Implementiert
    def fit(self, X, y):
        self.coef_ = self.grad_desc(X,y)
        #fit kehrt selbst zurück
        return self

    # predict()Implementiert
    def predict(self, X):
        return np.dot(X, self.coef_)

    def grad_desc(self,X,y):
        m = len(y)
        loss = []
        diff = 10**(10)
        ep = self.ep
        #Arten von Funktionen
        dim = X.shape[1]
        #Anfangswert von Beta
        beta = np.ones(dim).reshape(-1,1)
        eta = self.eta
        l = self.l
        while abs(diff) > ep:
            loss.append((1/(2*m))*np.sum(np.square(np.dot(X,beta)-y)))
            beta = beta*(1-2*l*eta) - eta*(1/m)*np.dot(X.T,(np.dot(X,beta)-y))
            if len(loss) > 1:
                diff = loss[len(loss)-1] - loss[len(loss)-2]
        self.loss = loss
        return beta

#scikit-Importieren Sie Weindaten aus Lean
df= pd.read_csv('winequality-red.csv',sep=';')
#Da die Zielwertqualität enthalten ist, erstellen Sie einen abgelegten Datenrahmen
df1 = df.drop(columns='quality')
y = df['quality'].values.reshape(-1,1)
X = df1.values
scaler = preprocessing.StandardScaler()
X_fit = scaler.fit_transform(X)
X_fit = sm.add_constant(X_fit) #Fügen Sie 1 zur ersten Spalte hinzu
epsilon = 10 ** (-7)
eta_list = [0.3,0.1,0.03]
loss = []
coef = []
for eta in eta_list:
    l = 10**(-5)
    test_min = 10**(9)
    while l <= 1/(2*eta):
        myest = MyEstimator(epsilon,eta,l)
        myest.fit(X_fit,y)
        scores = cross_validate(myest,X_fit,y,scoring="neg_mean_squared_error",cv=10)
        if abs(scores['test_score'].mean()) < test_min:
            test_min = abs(scores['test_score'].mean())
            loss = myest.loss
            l_min = l
            coef = myest.coef_
        l = l * 10**(0.5)
    plt.plot(loss)
    print(f"eta = {eta} : iter = {len(loss)}, loss = {loss[-1]}, lambda = {l_min}")
    #Ausgabe des Koeffizienten: Da der Abschnitt ganz am Anfang enthalten ist, nehmen Sie ihn aus dem zweiten heraus und geben Sie den Abschnitt am Ende aus.
    i = 1
    for column in df1.columns:
        print(column,coef[i][0])
        i+=1
    print('intercept',coef[0][0])
plt.savefig("gd.png ")

Ich habe auch die Kreuzungsverifizierung eingeschlossen, also habe ich meinen eigenen Schätzer erstellt. Estimator ist im Grunde so etwas wie "linear_model.Ridge", und wenn Sie es in das Argument "cross_validation" einfügen, können Sie K-fach usw. ausführen. Sie müssen nur mindestens zwei Methoden ("anpassen, vorhersagen") in Ihrer Klasse implementieren (beliebiger Name). Es ist sehr leicht. Die Berechnung ist auch einfach: Berechnen Sie die Kosten, während Sie $ \ beta $ ändern. Wenn die Kosten kleiner als $ \ epsilon $ (epsilon) werden, endet sie. In dem Teil von loss.append in der Mitte dieser Berechnung wird in der Liste gespeichert, wie sich der Schritt ändert, wenn er geändert wird.

Dieses Mal konnte ich den Quellcode im Erklärungsvideo überhaupt nicht sehen, daher wusste ich nicht, auf was der Regularisierungsparameter eingestellt war. Ich denke, dass dies der Standardwert (= 0,0001) in SGDregressor von sklearn ist, aber ich habe auch nach dem Ort gesucht, an dem der Testfehler der Gegenüberstellung minimiert wird. Die Schleife wird also verdoppelt. Während $ \ eta $ um 0,3,0,1,0,03 geändert wird, wird $ \ lambda $ von $ 10 ^ {-5} $ in $ \ frac {1} {2 \ eta} $ geändert. Ich habe es so gemacht, dass $ 1-2 \ lambda \ eta $ nicht negativ wird. $ \ Epsilon $, das das Ende der Berechnung bestimmt, war $ 10 ^ {-7} $, wenn die Anzahl der Berechnungen der Erklärung entsprach.

Klicken Sie hier für Berechnungsergebnisse gd.png

Die Formen sind fast gleich, also ist es okay. Die tatsächlich erhaltenen Koeffizienten und Abschnitte sind ebenfalls nahezu korrekt. Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (1) Es unterscheidet sich nicht so sehr von dem, was Sie unter dem obigen Link angefordert haben.

eta = 0.3 : iter = 211, loss = 0.20839282208794876, lambda = 0.000316227766016838
fixed acidity 0.049506870332573755
volatile acidity -0.19376515874038097
citric acid -0.03590899184362026
residual sugar 0.02477115609195419
chlorides -0.08766609020245213
free sulfur dioxide 0.04504300145052993
total sulfur dioxide -0.1066524471717945
density -0.039236958974544434
pH -0.060484490718680374
sulphates 0.1558562351611723
alcohol 0.29101267115037016
intercept 5.632460233437699
eta = 0.1 : iter = 539, loss = 0.20839849335391505, lambda = 0.000316227766016838
fixed acidity 0.05411085995631372
volatile acidity -0.19374570028895227
citric acid -0.03641567617051897
residual sugar 0.026096674744724647
chlorides -0.08728538562384357
free sulfur dioxide 0.044674324756584935
total sulfur dioxide -0.10616011146688299
density -0.04332301301614413
pH -0.05803157075853309
sulphates 0.15635770126837817
alcohol 0.28874633335328637
intercept 5.632460233437699
eta = 0.03 : iter = 1457, loss = 0.2084181454096448, lambda = 0.000316227766016838
fixed acidity 0.06298223685986547
volatile acidity -0.19369711526783526
citric acid -0.03737402225868385
residual sugar 0.028655773905239445
chlorides -0.08655776298773829
free sulfur dioxide 0.04397075187169952
total sulfur dioxide -0.10522175105302445
density -0.051210328173935296
pH -0.05330134909461606
sulphates 0.15732818468260018
alcohol 0.28436648926510527
intercept 5.632460233437668

Frühere Beiträge

Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (1) Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (2) Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (3) Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (4) Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (5) https://github.com/legacyworld/sklearn-basic

Recommended Posts

Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen. (7) Erstellen Sie Ihre eigene Methode für den steilsten Abstieg
Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen. (8) Erstellen Sie Ihre eigene stochastischste Methode für den steilsten Abstieg
Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen (17).
Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen (5).
Kurs für maschinelles Lernen an der Tsukuba University: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen (10).
Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen (2).
Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen (13).
Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen (9).
Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen (4).
Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript in die Aufgabe aufnehmen (12).
Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen (1)
Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen (11).
Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen (3).
Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen (14).
Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen (6).
Kurs für maschinelles Lernen an der Tsukuba-Universität: Lernen Sie sklearn, während Sie das Python-Skript zu einem Teil der Aufgabe machen (15).
Python & Machine Learning Study Memo ⑤: Klassifikation von Ayame
Python & Machine Learning Study Memo Introduction: Einführung in die Bibliothek