2016-01-29 7 views
27

Bei einer Neuinstallation von Anaconda unter Ubuntu ... verarbeite ich meine Daten auf verschiedene Arten vor einer Klassifizierungsaufgabe mit Scikit-Learn.Vorverarbeitung in scikit learn - Einzelprobe - Abschreibungswarnung

from sklearn import preprocessing 

scaler = preprocessing.MinMaxScaler().fit(train) 
train = scaler.transform(train)  
test = scaler.transform(test) 

Das alles funktioniert gut, aber wenn ich eine neue Probe (Temp unten), die ich klassifizieren wollen (und damit möchte ich Vorprozess auf die gleiche Art und Weise dann bekomme ich

temp = [1,2,3,4,5,5,6,....................,7] 
temp = scaler.transform(temp) 

ich dann erhalten eine deprecation Warnung ...

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. 

die Frage ist also, wie soll ich eine einzelne Probe wie diese werden neu zu skalieren?

Ich nehme eine Alternative (nicht sehr gut) wäre ...

temp = [temp, temp] 
temp = scaler.transform(temp) 
temp = temp[0] 

Aber ich bin sicher, es gibt bessere Möglichkeiten.

+0

Nun mit deprecation Krieg akzeptiert werden ohne Benachrichtigung/Warnungen akzeptiert werden ... Sie antwortete nur sich selbst. Es ist in der Warnung: 'Umformen Sie Ihre Daten entweder mit X.reshape (-1, 1), wenn Ihre Daten eine einzige Funktion oder X.reshape (1, -1), wenn es ein einziges Beispiel enthält. Wenn Ihre Daten sind Verwenden Sie np.array (data) zuerst. – pzelasko

Antwort

22

hört Genau das, was die Warnung Sie sagt:

Reshape Ihre Daten entweder X.reshape (-1 , 1) wenn Ihre Daten ein einzelnes Merkmal oder X.reshape (1, -1) haben, wenn es ein einzelnes Beispiel enthält.

Für Ihr Beispiel Typ (wenn Sie mehr als ein Merkmal haben):

temp = temp.reshape(1,-1) 

Für ein Merkmal:

temp = temp.reshape(-1,1) 
+0

Ich verstehe nicht, was sie mit einer einzelnen Stichprobe meinen. X.Shape kehrt zurück (891, 158). Jede der 2 Lösungen, die sie vorschlagen, gibt einen Fehler, aber ich bekomme immer noch diese Warnung, wenn ich sie nicht umgestalte. –

+0

X nicht umformen! es ist ungefähr y (Ziel) !! y hat offensichtlich nur eine Spalte. Hatte das gleiche Problem vor einigen Tagen. Kostet mich eine Stunde um X neu zu gestalten ;-) –

+0

Also ... ich frage mich wie viele Projekte den Tag kaputt machen werden das wird schlussendlich zu einem Fehler. – sudo

25

Nun, es sieht tatsächlich so aus, als ob die Warnung Ihnen sagt, was zu tun ist.

Im Rahmen sklearn.pipeline stages' uniform interfaces, als Faustregel:

  • wenn Sie X sehen, sollte es ein np.array mit zwei Dimensionen

  • sein, wenn Sie y sehen, sollte es ein np.array sein mit einer einzigen Dimension.

Hier also sollten Sie sollten Sie Folgendes beachten:

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) 
+0

Was ist 'NP' Objekt? –

+1

@Tajchert Entschuldigung - 'import numpy as np'. –

+0

danke :) Einfach starten Python so dass wan't offensichtlich –

4

Diese

temp = ([[1,2,3,4,5,6,.....,7]]) 
0
helfen könnte

ich konfrontiert das gleiche Problem und bekam die gleiche Verwarnungswarnung. Ich benutzte ein numpliges Array von [23, 276], als ich die Nachricht bekam. Ich habe versucht, es nach der Warnung neu zu gestalten und lande im Nirgendwo. Dann wähle ich jede Zeile aus dem numpy-Array (wie ich es sowieso schon wiederholt habe) und ordne es einer Listenvariablen zu. Es funktionierte dann ohne Vorwarnung.

Dann können Sie das Python-Listen-Objekt (hier 'Array') als Eingabe für sk-lernen-Funktionen verwenden.Nicht die effizienteste Lösung, aber für mich gearbeitet.

0

.values.reshape(-1,1) wird

.reshape(-1,1), aber