Coursera-Herausforderungen beim maschinellen Lernen in Python: ex2 (Logistic Return)

Eine Serie, die Coursera Machine Learning-Programmieraufgaben in Python implementiert. (23.10.2015) ex2_reg hinzugefügt und hinzugefügt. (25.12.2015) Es wurde eine Version hinzugefügt, die mithilfe von Polynom-Funktionen mit ex2_reg einfach geschrieben werden kann

ex2 (Logistische Regression ohne Regularisierung)

Einführung

In diesem Beispiel werden die Ergebnisse der beiden Tests als Eingabedaten angegeben, und die Testergebnisse (bestanden oder nicht bestanden) werden als Ausgabedaten angegeben, und ein Klassifizierer durch logistische Regression wird erstellt.

Python-Code

ex2.py


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import linear_model

data = pd.read_csv("ex2data1.txt", header=None)
# read 1st, 2nd column as feature matrix (100x2)
X = np.array([data[0],data[1]]).T
# read 3rd column as label vector (100)
y = np.array(data[2])

# plot
pos = (y==1) # numpy bool index
neg = (y==0) # numpy bool index
plt.scatter(X[pos,0], X[pos,1], marker='+', c='b')
plt.scatter(X[neg,0], X[neg,1], marker='o', c='y')
plt.legend(['Admitted', 'Not admitted'], scatterpoints=1)
plt.xlabel("Exam 1 Score")
plt.ylabel("Exam 2 Score")

# Logistic regression model with no regularization
model = linear_model.LogisticRegression(C=1000000.0)
model.fit(X, y)

# Extract model parameter (theta0, theta1, theta2)
[theta0] = model.intercept_
[[theta1, theta2]] = model.coef_
# Plot decision boundary
plot_x = np.array([min(X[:,0])-2, max(X[:,0])+2])   # lowest and highest x1
plot_y = - (theta0 + theta1*plot_x) / theta2   # calculate x2
plt.plot(plot_x, plot_y, 'b')

plt.show()

Das resultierende Diagramm sieht folgendermaßen aus. ex2.png

Maschinelles Lernen

Verwenden Sie für die logistische Regression die Klasse "sklearn.linear_model.LogisticRegression ()" und lernen Sie mit dem bekannten "model.fit (X, y)".

In der Klasse "LogisticRegression" wird die Stärke der Regularisierung durch den Parameter "C" angegeben. In der Klasse wurde dies durch den Parameter $ \ lambda $ angegeben, aber C ist die Umkehrung von $ \ lambda $ (wird in einer späteren SVM-Sitzung angezeigt). Je kleiner das "C" ist, desto stärker ist die Regularisierung, und je größer das "C" ist, desto schwächer ist die Regularisierung. In diesem Beispiel möchten wir keine Regularisierung haben, also setzen wir einen großen Wert (1.000.000) in "C".

Zeichnen Sie nach dem Training des Modells eine Entscheidungsgrenze. Die Entscheidungsgrenze der logistischen Regression ist eine gerade Linie, die durch $ \ theta ^ {T} X = 0 $ definiert ist. Im Fall des Beispiels, wenn Sie es in Komponenten aufschreiben, $ \ theta_0 + \ theta_1 x_1 + \ theta_2 x_2 = 0 $, und lösen Sie dies mit der Formel $ x_2 = - \ frac {\ theta_0 + \ theta_1 x_1} {\ theta_2} $ Berechnen Sie die Koordinaten der Punkte an der Entscheidungsgrenze mit und übergeben Sie sie an die Plotfunktion.

Python-ähnlicher Punkt

ex2_reg (Logistische Regression mit Regularisierung)

Einführung

In diesem Beispiel werden die beiden Testergebnisse des Mikrochips als Eingabedaten angegeben, und das Bestanden- oder Nichtbestanden-Flag wird als Ergebnisdaten angegeben. Erstellen Sie einen Klassifizierer, der Bestehen und Nichtbestehen mithilfe eines logistischen Regressionsmodells klassifiziert. Da eine lineare Trennung mit einer geraden Linie nicht möglich ist, wird eine polymorphe Anpassung verwendet. Erstellen Sie außerdem ein Modell mit verschiedenen Regularisierungsparametern $ \ lambda $ und sehen Sie die Auswirkungen der Regularisierung.

Code

ex2_reg.py


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import linear_model

# mapFeature(x1, x2)
#Führen Sie eine Feature-Zuordnung durch
#Argument: Merkmalsvektor x1,x2 (muss die gleiche Abmessung haben n)
#Rückgabewert: Feature-Matrix X.(nx28 Matrix)
#Bis zur 6. Ordnung 1, x1, x2, x1^2, x1*x2, x2, x1^3, .... x1*x2^5, x2^28 Zeilen wie 6
def mapFeature(x1, x2):
    degree = 6
    out = np.ones(x1.shape) #Die erste Spalte ist 1
    for i in range(1, degree+1):  #Schleife von 1 bis Grad
        for j in range(0, i+1):   #Schleife von 0 bis i
            out = np.c_[out, (x1**(i-j) * x2**j)] #Erhöhen Sie die Anzahl der Spalten
    return out

#Text von hier
data = pd.read_csv("ex2data2.txt", header=None)

x1 = np.array(data[0])
x2 = np.array(data[1])
y = np.array(data[2])

#Zeichnen Sie Beispieldaten
pos = (y==1) # numpy bool index
neg = (y==0) # numpy bool index
plt.scatter(x1[pos], x2[pos], marker='+', c='b') #Das richtige Beispiel ist'+'
plt.scatter(x1[neg], x2[neg], marker='o', c='y') #Negatives Beispiel'o'
plt.legend(['y = 0', 'y = 1'], scatterpoints=1)
plt.xlabel("Microchip Test 1")
plt.ylabel("Microchip Test 2")

#X ist eine nx28-Matrix für die Feature-Zuordnung
X = mapFeature(x1, x2)

#Logistisches Regressionsmodell mit Regularisierung
model = linear_model.LogisticRegression(penalty='l2', C=1.0)
model.fit(X, y)

# Decision Boundary(Entscheidungsgrenze)Plotten
px = np.arange(-1.0, 1.5, 0.1)
py = np.arange(-1.0, 1.5, 0.1)
PX, PY = np.meshgrid(px, py) # PX,Jeder PY ist eine 25x25-Matrix
XX = mapFeature(PX.ravel(), PY.ravel()) #Feature-Mapping. Argument ist Ravel()In einen 625-dimensionalen Vektor konvertieren und übergeben. XX ist eine 625x28-Matrix
Z = model.predict_proba(XX)[:,1] #Vorausgesagt mit einem logistischen Regressionsmodell. y=Die Wahrscheinlichkeit von 1 befindet sich in der zweiten Spalte des Ergebnisses. Z ist ein 625-dimensionaler Vektor
Z = Z.reshape(PX.shape) #Konvertieren Sie Z in eine 25x25-Matrix
plt.contour(PX, PY, Z, levels=[0.5], linewidths=3) # Z=0.Die Konturlinie von 5 wird zur Entscheidungsgrenze
plt.show()

Maschinelles Lernen

Der Teil, der die Klasse "LogisticRegression" verwendet, ist derselbe wie im vorherigen Beispiel. Da es sich bei der in Coursera angezeigten Regularisierung um die L2-Regularisierung (Ridge-Regression) handelt, fügen Sie die Option'penalty = 'l2' hinzu. Ich werde eine Entscheidungsgrenze mit einem Modell ziehen, das durch Ändern der Stärke der Regularisierung trainiert wurde, aber in Coursera gab es 3 Arten von $ \ lambda = 0, 1, 100 $, aber im Python-Beispiel "C = 1000000.0" , "C = 1,0", "C = 0,01".

Im Fall von "C = 1000000.0" (keine Regularisierung, Überanpassung) ex2reg1.png

Wenn "C = 1,0" ex2reg2.png

Wenn "C = 0,01" (zu regelmäßig, Unteranpassung) ex2reg3.png

Python-ähnlicher Punkt

Nachtrag: Vereinfacht durch Verwendung einer Bibliothek zum Generieren von Merkmalen von Polynomen

Im obigen Code habe ich meine eigene Funktion namens "mapFeature ()" erstellt, um Merkmale von Polynomen zu generieren, aber "scikit-learn" hat eine Klasse namens "sklearn.preprocessing.PolynomialFeatures", die dasselbe tut. Es gibt, also ersetzen Sie es hier. Klicken Sie hier für den Code.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sklearn

data = pd.read_csv("ex2data2.txt", header=None)

x1 = np.array(data[0])
x2 = np.array(data[1])
y = np.array(data[2])

#Zeichnen Sie Beispieldaten
pos = (y==1) # numpy bool index
neg = (y==0) # numpy bool index
plt.scatter(x1[pos], x2[pos], marker='+', c='b') #Das richtige Beispiel ist'+'
plt.scatter(x1[neg], x2[neg], marker='o', c='y') #Negatives Beispiel'o'
plt.legend(['y = 0', 'y = 1'], scatterpoints=1)
plt.xlabel("Microchip Test 1")
plt.ylabel("Microchip Test 2")

#X ist eine nx28-Matrix für die Feature-Zuordnung
poly = sklearn.preprocessing.PolynomialFeatures(6)
X = poly.fit_transform(np.c_[x1,x2])

#Logistisches Regressionsmodell mit Regularisierung
model = linear_model.LogisticRegression(penalty='l2', C=1.0)
model.fit(X, y)

# Decision Boundary(Entscheidungsgrenze)Plotten
px = np.arange(-1.0, 1.5, 0.1)
py = np.arange(-1.0, 1.5, 0.1)
PX, PY = np.meshgrid(px, py) # PX,Jeder PY ist eine 25x25-Matrix
XX = poly.fit_transform(np.c_[PX.ravel(), PY.ravel()]) #Das Feature-Mapping-Argument ist ravel()Konvertiert in einen 625-dimensionalen Vektor und durchläuft XX eine 625x28-Matrix
Z = model.predict_proba(XX)[:,1] #Vorausgesagt durch das logistische Regressionsmodell y=Da die Wahrscheinlichkeit von 1 in der zweiten Spalte des Ergebnisses liegt, ist das zu extrahierende Z ein 625-dimensionaler Vektor.
Z = Z.reshape(PX.shape) #Konvertieren Sie Z in eine 25x25-Matrix
plt.contour(PX, PY, Z, levels=[0.5], linewidths=3) # Z=0.Die Konturlinie von 5 wird zur Entscheidungsgrenze
plt.show()

abschließend

Ich studiere sowohl Python als auch maschinelles Lernen, daher wäre ich dankbar, wenn Sie auf merkwürdige Punkte hinweisen könnten (^^)

Recommended Posts

Coursera-Herausforderungen beim maschinellen Lernen in Python: ex2 (Logistic Return)
Coursera Machine Learning Challenge in Python: ex1 (lineare Regression)
Coursera-Herausforderungen für maschinelles Lernen in Python: ex7-2 (Primäranalyse)
Coursera Machine Learning Challenge in Python: ex6 (Anpassen von SVM-Parametern)
Coursera Machine Learning Challenge in Python: ex7-1 (Bildkomprimierung mit K-bedeutet Clustering)
Logistische Regression beim maschinellen Lernen
Algorithmus für maschinelles Lernen (logistische Regression)
Klassifikation und Regression beim maschinellen Lernen
Python: Vorverarbeitung beim maschinellen Lernen: Übersicht
<Subjekt> Maschinelles Lernen Kapitel 3: Logistisches Regressionsmodell
Maschinelles Lernen mit Python (2) Einfache Regressionsanalyse
[Python] Techniken, die häufig beim maschinellen Lernen verwendet werden
Python: Vorverarbeitung beim maschinellen Lernen: Datenerfassung
Ich habe versucht, Couseras logistische Regression in Python zu implementieren
[Python] Speichern von Lernergebnissen (Modellen) beim maschinellen Lernen
Python: Vorverarbeitung beim maschinellen Lernen: Datenkonvertierung
EV3 x Python Maschinelles Lernen Teil 2 Lineare Regression
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
Logistische Verteilung in Python
Lineare Regression des maschinellen Lernens
Python: Überwachtes Lernen (Rückkehr)
Regressionsanalyse mit Python
Tool MALSS (Anwendung), das maschinelles Lernen in Python unterstützt
Tool MALSS (Basic), das maschinelles Lernen in Python unterstützt
Python Scikit-learn Lineare Regressionsanalyse Nichtlineare einfache Regressionsanalyse Maschinelles Lernen
Versuchen Sie, das Modell des maschinellen Lernens in das Python-Paket aufzunehmen
Cross-Entropie zur Überprüfung in Coursera Machine Learning Woche 2 Aufgaben
MALSS (Einführung), ein Tool, das maschinelles Lernen in Python unterstützt
Mehrfacher Regressionsausdruck in Python
Maschinelles Lernen in Delemas (Praxis)
Maschinelles Lernen mit Python! Vorbereitung
Verstehe maschinelles Lernen ~ Ridge Regression ~.
Python Machine Learning Programming> Schlüsselwörter
Wird in EDA für maschinelles Lernen verwendet
Einfache Regressionsanalyse mit Python
Überwachtes maschinelles Lernen (Klassifikation / Regression)
Beginnend mit maschinellem Python-Lernen
Online lineare Regression in Python
Stapelvorlage für maschinelles Lernen (Rückgabe)
Das Ergebnis des maschinellen Lernens von Java-Ingenieuren mit Python www
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 7 Regressionsanalyse
2. Multivariate Analyse in Python 5-3. Logistische Regressionsanalyse (Statistikmodelle)
[Maschinelles Lernen] Verständnis der logistischen Regression sowohl durch Scikit-Lernen als auch durch Mathematik
Implementieren Sie das Stacking-Lernen in Python [Kaggle]
Erste einfache Regressionsanalyse in Python
Python: Anwendung des überwachten Lernens (Rückkehr)
Wie wäre es mit Anaconda zum Erstellen einer maschinellen Lernumgebung mit Python?
Maschinelles Lernen mit Python (1) Gesamtklassifizierung
Zusammenfassung des maschinellen Lernens von Python-Anfängern
Automatisieren Sie Routineaufgaben beim maschinellen Lernen
Anfänger des maschinellen Lernens versuchen eine lineare Regression
Algorithmus für maschinelles Lernen (multiple Regressionsanalyse)
In Python implementierte Widrow-Hoff-Lernregeln
Algorithmus für maschinelles Lernen (Einzelregressionsanalyse)
<Für Anfänger> Python-Bibliothek <Für maschinelles Lernen>
Maschinelles Lernen in Delemas (Datenerfassung)
Genießen Sie Coursera / Machine Learning-Materialien zweimal
Implementierte Perceptron-Lernregeln in Python
Vorverarbeitung beim maschinellen Lernen 2 Datenerfassung
"Gauß-Prozess und maschinelles Lernen" Gauß-Prozessregression nur mit Python-Numpy implementiert