Sur une nouvelle installation d’Anaconda sous Ubuntu ... je traite mes données de différentes manières avant de commencer une tâche de classification avec Scikit-Learn.
from sklearn import preprocessing
scaler = preprocessing.MinMaxScaler().fit(train)
train = scaler.transform(train)
test = scaler.transform(test)
Tout cela fonctionne bien, mais si j'ai un nouvel échantillon (temp ci-dessous) que je veux classifier (et donc je veux prétraiter de la même manière, alors je reçois
temp = [1,2,3,4,5,5,6,....................,7]
temp = scaler.transform(temp)
Puis je reçois un avertissement de dépréciation ...
DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17
and will raise ValueError in 0.19. Reshape your data either using
X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1)
if it contains a single sample.
La question est donc de savoir comment puis-je redimensionner un seul échantillon comme celui-ci?
Je suppose qu'une alternative (pas très bonne) serait ...
temp = [temp, temp]
temp = scaler.transform(temp)
temp = temp[0]
Mais je suis sûr qu'il existe de meilleurs moyens.
Écoutez ce que l’avertissement vous dit:
Remodelez vos données soit X.reshape (-1, 1) si vos données ont une seule entité/colonne et X.reshape (1, -1) si elles contiennent un seul échantillon.
Pour votre type d'exemple (si vous avez plus d'une entité/colonne):
temp = temp.reshape(1,-1)
Pour une caractéristique/colonne:
temp = temp.reshape(-1,1)
Eh bien, il semblerait que l'avertissement vous dise quoi faire.
Dans le cadre de sklearn.pipeline
interfaces uniformes des étapes , en règle générale:
quand vous voyez X
, cela devrait être un np.array
en deux dimensions
quand vous voyez y
, cela devrait être un np.array
avec une seule dimension.
Ici, donc, vous devriez considérer les points suivants:
temp = [1,2,3,4,5,5,6,....................,7]
# This makes it into a 2d array
temp = np.array(temp).reshape((len(temp), 1))
temp = scaler.transform(temp)
Cela pourrait aider
temp = ([[1,2,3,4,5,6,.....,7]])
.values.reshape(-1,1)
sera accepté sans alertes/avertissements
.reshape(-1,1)
sera accepté, mais avec guerre de dépréciation
Vous pouvez toujours, remodeler comme:
temp = [1,2,3,4,5,5,6,7]
temp = temp.reshape(len(temp), 1)
Parce que, le problème majeur est quand, votre temp.shape est: (8,)
et vous avez besoin (8,1)
J'ai fait face au même problème et j'ai reçu le même avertissement de dépréciation. J'utilisais un tableau numpy de [23, 276] lorsque j'ai reçu le message. J'ai essayé de le remodeler conformément à l'avertissement et je ne finis nulle part. Ensuite, je sélectionne chaque ligne du tableau numpy (car je le parcourais de toute façon) et l’attribue à une variable de liste. Cela a fonctionné alors sans aucun avertissement.
array = []
array.append(temp[0])
Ensuite, vous pouvez utiliser l'objet liste python (ici 'tableau') comme entrée pour les fonctions sk-learn. Ce n'est pas la solution la plus efficace, mais elle a fonctionné pour moi.