Python scikit svm “ValueError: X tiene 62 funciones por muestra; esperando 337 “

Al jugar con la Clasificación de vectores de soporte lineal SVM de Scikit de Python, me estoy topando con un error cuando bash hacer predicciones:

ten_percent = len(raw_routes_data) / 10 # Training training_label = all_labels[ten_percent:] training_raw_data = raw_routes_data[ten_percent:] training_data = DictVectorizer().fit_transform(training_raw_data).toarray() learner = svm.LinearSVC() learner.fit(training_data, training_label) # Predicting testing_label = all_labels[:ten_percent] testing_raw_data = raw_routes_data[:ten_percent] testing_data = DictVectorizer().fit_transform(testing_raw_data).toarray() testing_predictions = learner.predict(testing_data) m = metrics.classification_report(testing_label, testing_predictions) 

El raw_data se representa como un diccionario de Python con categorías de tiempos de llegada para varias opciones de viaje y categorías para datos meteorológicos:

 {'72_bus': '6.0 to 11.0', 'uber_eta': '2.0 to 3.5', 'tweet_delay': '0', 'c_train': '1.0 to 4.0', 'weather': 'Overcast', '52_bus': '16.0 to 21.0', 'uber_surging': '1.0 to 1.15', 'd_train': '17.6666666667 to 21.8333333333', 'feels_like': '27.6666666667 to 32.5'} 

Cuando entreno y adapto los datos de entrenamiento, uso un Vector Vectorizador de diccionario en el 90% de los datos y los convierto en una matriz.

Los testing_labels proporcionados se representan como:

 [1,2,3,3,1,2,3, ... ] 

Es cuando bash usar el LinearSVC para predecir que estoy informado:

 ValueError: X has 27 features per sample; expecting 46 

¿Que me estoy perdiendo aqui? Obviamente es la forma en que encajo y transformo los datos.

El problema es que usted crea y ajusta diferentes DictVectorizer para el tren y para la prueba.

Debe crear y ajustar solo un DictVectorizer utilizando datos de trenes y usar el método de transform de este objeto en sus datos de prueba para crear una representación de características de sus datos de prueba.