web-dev-qa-db-fra.com

Prétraitement dans scikit learn - échantillon unique - avertissement de déprécation

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.

37
Chris Arthur

É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)
31
Mike

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)
32
Ami Tavory

Cela pourrait aider

temp = ([[1,2,3,4,5,6,.....,7]])
6
Bharath M

.values.reshape(-1,1) sera accepté sans alertes/avertissements

.reshape(-1,1) sera accepté, mais avec guerre de dépréciation

1
Analytics

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)

0

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.

0
shan89