Старый вопрос, но я хочу оставить свои мысли (кто-нибудь поправит меня, если я ошибаюсь).
Я думаю, что вы смешали понятия linear model
и loss
или error
функции.
Перцептрон по определению является линейной моделью, поэтому он определяет линию / плоскость / гиперплоскость, которую вы можете использовать для разделения ваших классов.
Стандартный алгоритм Perceptron извлекает сигнал вашего выхода, давая -1 или 1:
yhat = signal(w * X + w0)
Это нормально и в конечном итоге сойдет, если ваши данные linearly separable
.
Чтобы улучшить это, вы можете использовать sigmoid
, чтобы сгладить функцию потерь в диапазоне [-1, 1]:
yhat = -1 + 2*sigmoid(w * X + w0)
mean_squared_error = (Y - yhat)^2
Затем используйте числовой оптимизатор, такой как Gradient Descent, чтобы минимизировать ошибку во всем наборе данных. Здесь w0, w1, w2, ..., wn - ваши переменные.
Теперь, если ваши исходные данные не linearly separable
, вы можете преобразовать их таким способом, который делает их линейно разделимыми, а затем применить любую линейную модель. Это правда, потому что модель linear on the weights
.
Это в основном то, что модели типа SVM делают под капотами для классификации ваших нелинейных данных.
PS: I'm learning this stuff too, so experts don't be mad at me if i said some crap.