¿Cómo inicializar coef_init e intercept_init para un nuevo modelo de entrenamiento?

Como se especifica aquí, https://stackoverflow.com/a/35662770/5757129 , almacené el Coef y la intersección de mi primer modelo. Más adelante, los pasaré como inicializadores a mi segundo ajuste () como se muestra a continuación para aprender datos nuevos sobre el modelo anterior.

from sklearn import neighbors, linear_model import numpy as np import pickle import os def train_data(): x1 = [[8, 9], [20, 22], [16, 18], [8,4]] y1 = [0, 1, 2, 3] #classes = np.arange(10) #sgd_clf = linear_model.SGDClassifier(learning_rate = 'constant', eta0 = 0.1, shuffle = False, n_iter = 1,warm_start=True) sgd_clf = linear_model.SGDClassifier(loss="hinge",max_iter=10000) sgd_clf.fit(x1,y1) coef = sgd_clf.coef_ intercept = sgd_clf.intercept_ return coef, intercept def train_new_data(coefs,intercepts): x2 = [[18, 19],[234,897],[20, 122], [16, 118]] y2 = [4,5,6,7] sgd_clf1 = linear_model.SGDClassifier(loss="hinge",max_iter=10000) new_model = sgd_clf1.fit(x2,y2,coef_init=coefs,intercept_init=intercepts) return new_model if __name__ == "__main__": coefs,intercepts= train_data() new_model = train_new_data(coefs,intercepts) print(new_model.predict([[16, 118]])) print(new_model.predict([[18, 19]])) print(new_model.predict([[8,9]])) print(new_model.predict([[20,22]])) 

Cuando ejecuto esto, obtengo las tags que están entrenadas solo de new_model. Por ejemplo, print(new_model.predict([[8,9]])) tiene que imprimir la etiqueta como 0 e print(new_model.predict([[20,22]])) tiene que imprimir la etiqueta como 1. Pero imprime Lables coinciden de 4 a 7.

¿Estoy pasando el Coef e intercepta del viejo modelo al nuevo de manera incorrecta?

EDITAR: Replanteado la pregunta según la respuesta de @vital_dml

No estoy seguro de por qué necesita pasar coeficientes e interceptar desde el primer modelo al segundo, sin embargo, está recibiendo ese error porque su primer modelo está entrenado en 4 clases y1 = [0, 1, 2, 3] , mientras que el segundo uno tiene 2 clases y2 = [4,5] , lo cual es controversial.

De acuerdo con la documentación de scikit-learn , tu linear_model.SGDClassifier() devuelve:

coef_: array, shape (1, n_features) if n_classes == 2 else (n_classes, n_features) – Pesos asignados a las funciones.

intercept_: array, shape (1,) if n_classes == 2 else (n_classes,) – Constantes en la función de decisión.

Entonces, dentro de su pregunta, el número de clases y características en ambos modelos debe ser el mismo.

De todos modos, te animo a pensar, ¿realmente necesitas hacer eso? Tal vez usted podría simplemente concatenar esos vectores.