web-dev-qa-db-fra.com

Enregistrement des résultats de prédiction au format CSV

Je stocke les résultats d'un modèle de régression sklearn à la prédiction varibla.

prediction = regressor.predict(data[['X']])
print(prediction)

Les valeurs de la sortie de prédiction ressemblent à ceci

[ 266.77832991  201.06347505  446.00066136  499.76736079  295.15519906
  214.50514991  422.1043505   531.13126879  287.68760191  201.06347505
  402.68859792  478.85808879  286.19408248  192.10235848]

J'essaie ensuite d'utiliser la fonction to_csv pour enregistrer les résultats dans un fichier CSV local:

prediction.to_csv('C:/localpath/test.csv')

Mais l'erreur que je récupère est:

AttributeError: 'numpy.ndarray' object has no attribute 'to_csv'

J'utilise Pandas/Numpy/SKlearn. Une idée sur la solution de base?

11
ZJAY

Vous pouvez utiliser des pandas. Comme il est dit, les tableaux numpy n'ont pas de fonction to_csv.

import numpy as np
import pandas as pd
prediction = pd.DataFrame(predictions, columns=['predictions']).to_csv('prediction.csv')

ajoutez ".T" si vous voulez que vos valeurs soient en ligne ou en colonne.

21
DavidK

Vous pouvez utiliser le numpy.savetxt une fonction:

numpy.savetxt('C:/localpath/test.csv',prediction, ,delimiter=',')

et pour charger un fichier CSV, vous pouvez utiliser numpy.genfromtxt une fonction:

numpy.genfromtxt('C:/localpath/test.csv', delimiter=',')
10
Ali

Il s'agit d'une solution très détaillée comme celles-ci, mais vous pouvez l'utiliser même en production.

Enregistrez d'abord le modèle

joblib.dump(regressor, "regressor.sav")

Enregistrer les colonnes dans l'ordre

pd.DataFrame(X_train.columns).to_csv("feature_list.csv", index = None)

Enregistrer les types de données du train

pd.DataFrame(X_train.dtypes).reset_index().to_csv("data_types.csv", index = None)

En l'utilisant à nouveau:

feature_list = pd.read_csv("feature_list.csv")
feature_list = pd.Index(list(feature_list["0"]))

add_cols = list(feature_list.difference(X_test.columns))

drop_cols = list(X_test.columns.difference(feature_list))

for col in add_cols:
    X_test[col] = np.nan

for col in drop_cols:
    X_test = X_test.drop(col, axis = 1)

# reorder columns
X_test = X_test[feature_list]

types = pd.read_csv("data_types.csv")
for i in range(len(types)):
    X_test[types.iloc[i,0]] = X_test[types.iloc[i,0]].astype(types.iloc[i,1])

Faire des prédictions

regressor = joblib.load("regressor.sav")
predictions = regressor.predict(X_test)

Enregistrer les résultats de prédiction

res = pd.DataFrame(predictions)
res.index = X_test.index # its important for comparison
res.columns = ["prediction"]
res.to_csv("prediction_results.csv")

Profitez d'un code économiseur de modèle/prédiction de bout en bout!

0
ilker