Si vous utilisez scikit-learn, ce sera un moment, mais il est également bon de le mettre en œuvre vous-même en tant qu'étude.
Dans l'article d'origine, la classification multi-classes et train_test_split étaient hors de portée, donc
Il est simplifié en un problème à deux classes et évalué à l'aide des mêmes données que les données d'apprentissage.
Veuillez vous référer à l'article suivant pour plus de détails. Apprentissage automatique à partir de zéro 4e "régression logistique"
from sklearn.datasets import load_iris
import numpy as np
iris = load_iris()
X_org = iris.data
y_org = iris.target
#Simplifiez le problème (voir article précédent)
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) #Terme de biais
self.eta = 1e-2 #Taux d'apprentissage
self.n_iter = 1000 #Nombre de mises à jour des paramètres
self.loss = []
def fit(self, x, y): #Apprentissage
for i in range(self.n_iter):
self._update(x, y)
def predict(self, x): #Prévoir
x = np.c_[x,np.ones(len(x))] #Terme de biais
return self._forward(x)
def _forward(self, x): #Méthode interne.
d = np.dot(x, self.w)
return np.exp(d) / (1 + np.exp(d))
def _diff(self, x, y): #Méthode interne. Calculez la différence entre le résultat et la bonne réponse.
diff = self._forward(x) - y
return diff
def _update(self, x, y): #Méthode interne. Mettez à jour les paramètres une fois.
x = np.c_[x,np.ones(len(x))] #Terme de biais
self.w -= self.eta * np.dot(self._diff(x, y), x) #Prenez le produit intérieur et effacez la dimension du nombre d'échantillons
lr = LogisticRegression()
lr.fit(X,y) #Apprentissage
pred = (lr.predict(X) > 0.5).astype(np.int) #Prévisions et évaluation
print (np.mean(pred == y)) #Taux de précision moyen
Ensuite, cet article implémente train_test_split
.
Apprentissage automatique à partir de zéro 5ème "Données d'entraînement et données de test"
Recommended Posts