Я делаю однослойный персептрон в Python, и я застрял в том, как определить, по какому индексу эпохи сходится алгоритм.
Это мой код:
# Make a prediction with weights
def predict(row, weights):
activation = weights[0]
try:
for i in range(len(row)-1):
activation += weights[i + 1] * float(row[i])
except:
print(type(row))
return 1 if activation >= 0.0 else -1
# Estimate Perceptron weights using stochastic gradient descent
def train_weights(train, l_rate, n_epoch):
weights = [0.0 for i in range(len(train))]
for epoch in range(n_epoch):
for index, row in train.itertuples():
rows=row.split()
type(rows)
prediction = predict(rows, weights)
error = float(rows[-1]) - prediction
weights[0] = weights[0] + l_rate * error
for i in range(len(rows)-1):
weights[i + 1] = weights[i + 1] + l_rate * error * float(rows[i])
return weights
# Perceptron Algorithm With Stochastic Gradient Descent
def perceptron(train, test, l_rate, n_epoch):
predictions = list()
weights = train_weights(train, l_rate, n_epoch)
for index, row in test.itertuples():
rows=row.split()
prediction = predict(rows, weights)
predictions.append(prediction)
return predictions
Мое предположение: очевидно, что сходимость означает, что ошибка настолько мала, но я не знаю, где разместить условие, например, может ли ошибка стать действительно маленькой, тогда go вверх? главная проблема - нахождение эпохи с наименьшим уровнем ошибок