Ich bin naiv in Machine Learning, nach Lehrbuch (Python Machine Learning) und Online-Kurs auf Kurs. Ich versuche nur zwei Klassen (‚sentosa‘ und ‚versicolor‘), aber Fehlerfunktion konvergiert nicht .Hier mit einzelnem Perzeptron-Algorithmus auf Standard-Iris-Datensatz zu implementieren ist mein Code: -Kostenfunktion konvergiert nicht
import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
class perceptron(object):
def __init__(self,a,iter):
self.a=a
self.iter=iter
def fit(self,x,y):
self.w_=np.zeros(1+x.shape[1])
self.errors_=[]
for i in range(self.iter):
errors = 0
for xi ,target in zip(x,y):
update=self.a*(target-self.predict(xi))
self.w_[1:]=xi*update
self.w_[0]=update
errors+=int(update != 0.0)
self.errors_.append(errors)
print(self.errors_)
return self
def net_input(self,x):
return np.dot(x,self.w_[1:])
def predict(self,x):
return np.where(self.net_input(x)>=0.0,1,-1)
iris=datasets.load_iris()
x=iris.data[:100,:2]
y=iris.target
y=np.where(y==0,-1,1)
ppn=perceptron(a=0.01,iter=10)
ppn.fit(x,y)
plt.plot(range(1, len(ppn.errors_) + 1),ppn.errors_,marker='_')
plt.xlabel('epochs')
plt.ylabel('number of classification')
plt.show()
Anzahl der Fehlklassifikation (Fehler) bleibt dieselbe in jeder Iteration
Es hat sehr gut funktioniert, vielen Dank – navlearner