Wenn Sie scikit-learn verwenden, wird es ein Moment sein, aber es ist auch gut, es selbst als Studie zu implementieren.
Im ursprünglichen Artikel waren die Klassifizierung mehrerer Klassen und train_test_split daher nicht möglich
Es wird zu einem Zwei-Klassen-Problem vereinfacht und unter Verwendung der gleichen Daten wie die Trainingsdaten bewertet.
Weitere Informationen finden Sie im folgenden Artikel. Maschinelles Lernen ab Null 4. "Logistische Regression"
from sklearn.datasets import load_iris
import numpy as np
iris = load_iris()
X_org = iris.data
y_org = iris.target
#Vereinfachen Sie das Problem (siehe vorherigen Artikel)
idx = [y_org != 2]
X = X_org[idx][:,:2]
y = y_org[idx]
class LogisticRegression:
def __init__(self, n_feature=2):
self.w = np.random.rand(n_feature + 1) #Bias Begriff
self.eta = 1e-2 #Lernrate
self.n_iter = 1000 #Anzahl der Parameteraktualisierungen
self.loss = []
def fit(self, x, y): #Lernen
for i in range(self.n_iter):
self._update(x, y)
def predict(self, x): #Prognose
x = np.c_[x,np.ones(len(x))] #Bias Begriff
return self._forward(x)
def _forward(self, x): #Interne Methode.
d = np.dot(x, self.w)
return np.exp(d) / (1 + np.exp(d))
def _diff(self, x, y): #Interne Methode. Berechnen Sie die Differenz zwischen der Ausgabe und der richtigen Antwort.
diff = self._forward(x) - y
return diff
def _update(self, x, y): #Interne Methode. Aktualisieren Sie die Parameter einmal.
x = np.c_[x,np.ones(len(x))] #Bias Begriff
self.w -= self.eta * np.dot(self._diff(x, y), x) #Nehmen Sie das innere Produkt und löschen Sie die Abmessung der Anzahl der Proben
lr = LogisticRegression()
lr.fit(X,y) #Lernen
pred = (lr.predict(X) > 0.5).astype(np.int) #Prognose und Bewertung
print (np.mean(pred == y)) #Durchschnittliche Genauigkeitsrate
Als nächstes implementiert dieser Artikel train_test_split
.
Maschinelles Lernen ab Null 5. "Trainingsdaten und Testdaten"
Recommended Posts