Error del Regresor Forestal Aleatorio de Python Scikit

Estoy tratando de cargar el entrenamiento y los datos de prueba de un csv, ejecutar el regresor de bosque aleatorio en scikit / sklearn, y luego predecir la salida del archivo de prueba.

El archivo TrainLoanData.csv contiene 5 columnas; la primera columna es la salida y las siguientes 4 columnas son las características. El TestLoanData.csv contiene 4 columnas: las características.

Cuando ejecuto el código, me sale un error:

predicted_probs = ["%f" % x[1] for x in predicted_probs] IndexError: invalid index to scalar variable. 

¿Qué significa esto?

Aquí está mi código:

 import numpy, scipy, sklearn, csv_io //csv_io from https://raw.github.com/benhamner/BioResponse/master/Benchmarks/csv_io.py from sklearn import datasets from sklearn.ensemble import RandomForestRegressor def main(): #read in the training file train = csv_io.read_data("TrainLoanData.csv") #set the training responses target = [x[0] for x in train] #set the training features train = [x[1:] for x in train] #read in the test file realtest = csv_io.read_data("TestLoanData.csv") # random forest code rf = RandomForestRegressor(n_estimators=10, min_samples_split=2, n_jobs=-1) # fit the training data print('fitting the model') rf.fit(train, target) # run model against test data predicted_probs = rf.predict(realtest) print predicted_probs predicted_probs = ["%f" % x[1] for x in predicted_probs] csv_io.write_delimited_file("random_forest_solution.csv", predicted_probs) main() 

El valor de retorno de un RandomForestRegressor es una matriz de flotantes:

 In [3]: rf = RandomForestRegressor(n_estimators=10, min_samples_split=2, n_jobs=-1) In [4]: rf.fit([[1,2,3],[4,5,6]],[-1,1]) Out[4]: RandomForestRegressor(bootstrap=True, compute_importances=False, criterion='mse', max_depth=None, max_features='auto', min_density=0.1, min_samples_leaf=1, min_samples_split=2, n_estimators=10, n_jobs=-1, oob_score=False, random_state=, verbose=0) In [5]: rf.predict([1,2,3]) Out[5]: array([-0.6]) In [6]: rf.predict([[1,2,3],[4,5,6]]) Out[6]: array([-0.6, 0.4]) 

Así que estás tratando de indexar un flotante como (-0.6)[1] , lo que no es posible.

Como nota al margen, el modelo no devuelve probabilidades.

Primero, siempre es útil tener también los datos de muestra para reproducir y depurar su problema. Si son demasiado grandes o secretos, podrías extraer la parte interesante de ellos.

El contenido de la variable predicted_probs no parece ser el esperado. Parece ser una lista (o matriz) de enteros, y esto es también lo que esperaría.

En sklearn, el método X.train() siempre toma los datos de entrenamiento y sus clases correspondientes (generalmente enteros o cadenas). El método X.predict() solo toma datos de validación y devuelve los resultados de predicción, es decir, para cada conjunto en los datos de validación una clase (de nuevo entero o cadena).

Si desea saber qué tan buena es la precisión del clasificador entrenado, no solo debe entrenar y predecir, sino que debe hacer una validación cruzada, es decir, entrenar y validar repetidamente y verificar cada vez cuántas predicciones fueron correctas. Sklean tiene una excelente documentación, estoy seguro de que encontrará la sección correspondiente. Si no, pregúntame.

Intente usar “genfromtxt” de numpy en lugar de “csv_io.read_data” para la carga de datos: transformará automáticamente sus datos en csv a una matriz numpy. Y leer el artículo de Getting Started With Python For Data Science te será útil …