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?
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.
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=',')
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!