Predicción con ki cuadrado de chi para multilabel usando sklearn

Estoy tratando de obtener predicciones para un SVM usando un kernel de chi-cuadrado precalculado. Sin embargo, tengo problemas al intentar ejecutar clf.predict ().

min_max_scaler = preprocessing.MinMaxScaler() X_train_scaled = min_max_scaler.fit_transform(features_train) X_test_scaled = min_max_scaler.transform(features_test) K = chi2_kernel(X_train_scaled) svm = SVC(kernel='precomputed', cache_size=1000).fit(K, labels_train) y_pred_chi2 = svm.predict(X_test_scaled) 

El error que estoy recibiendo es el siguiente:

 ValueError: bad input shape (4627L, 20L) 

Supongo que este problema se debe a la etiqueta múltiple, por lo que entrené al clasificador para solo 1 categoría haciendo lo siguiente:

 svm = SVC(kernel='precomputed', cache_size=1000).fit(K, labels_train[:, 0]) 

Sin embargo, cuando bash ejecutar clf.predict (X_test_scaled), aparece el error:

 ValueError: X.shape[1] = 44604 should be equal to 4627, the number of samples at training time 

¿Por qué las muestras de prueba tienen que ser el mismo número que las muestras de entrenamiento?

Aquí está la forma de las matrices relevantes (las características tienen 44604 dimensiones y hay 20 categorías):

 X_train_scaled.shape : (4627L, 44604L) X_test_scaled.shape : (4637L, 44604L) K.shape : (4627L, 4627L) labels_train.shape : (4627L, 20L) 

En una nota al margen, ¿es normal que haya una L junto a los tamaños de forma de estas matrices?

Debe asignar a la función de predicción el núcleo entre los datos de prueba y los datos de entrenamiento. La forma más sencilla de hacerlo es asignarle un parámetro de kernel=chi2_kernel . Utilizando

 K_test = chi2_kernel(X_test_scaled) 

no funcionará.tiene que ser

 K_test = chi2_kernel(X_test_scaled, X_train_scaled) 

La entrada a clf.predict () también se debe pasar a la función chi2_kernel.

 K_test = chi2_kernel(X_test_scaled) y_pred = svm.predict(K_test)