Прогнозирование с использованием ядра chi для многослойных изображений с использованием sklearn

Я пытаюсь получить предсказания для SVM, используя предварительно вычисленное ядро ​​chi-squared. Однако при попытке запустить 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) 

Ошибка, которую я получаю, следующая:

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

Я предполагаю, что эта проблема связана с мультиметкой, поэтому я обучил классификатор только для 1 категории, выполнив следующие действия:

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

Однако при попытке запустить clf.predict (X_test_scaled), я получаю ошибку:

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

Почему тестовые образцы должны быть того же числа, что и образцы обучения?

Вот форма соответствующих матриц (функции имеют размеры 44604 и 20 категорий):

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

На боковой ноте, нормально ли, что рядом с размерами этих матриц существует L?

Вам нужно дать функцию предсказания ядру между тестовыми данными и данными обучения. Самый простой способ – присвоить ядру параметр kernel=chi2_kernel . С помощью

 K_test = chi2_kernel(X_test_scaled) 

не будет работать. Это должно быть

 K_test = chi2_kernel(X_test_scaled, X_train_scaled) 

Вход в clf.predict () также должен быть передан функции chi2_kernel.

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