La Perceptronclase de scikit-learn (equivalente a SGDClassifier(loss="perceptron", penalty=None, learning_rate="constant", eta0=1)) usa la siguiente función objetivo:
1N∑i=1Nmax(0,−yiwTxi).
En este caso, . Si tiene el signo correcto, no incurre en ninguna pérdida; de lo contrario, da pérdida lineal. El perceptrón en particular usa una tasa de aprendizaje fija que también puede generar cierta rareza de optimización.
yi∈{−1,1}wTxi
La regresión de mínimos cuadrados, por el contrario, usa
Aquí puede ser real; puede darle objetivos de clasificación en si lo desea, pero no le dará un muy buen modelo. Puede optimizar esto si lo desea.
1N∑i=1N(yi−wTxi)2.
yi{−1,1}SGDRegressor(loss="squared_loss", penalty=None)
Los dos definen modelos fundamentalmente diferentes: el perceptrón predice una etiqueta de clase binaria con , mientras que la regresión lineal predice un valor real con . Esta respuesta habla sobre por qué tratar de resolver un problema de clasificación con un algoritmo de regresión puede ser problemático.sign(wTxi)wTxi
Perceptronclase a la que se vincula es para un clasificador (salida binaria) en lugar de un regresor (salida continua). ¿Es ese el código real que usaste? Si es así, esa es la diferencia. :)