2017-03-29 3 views
0

Ich bin ziemlich neu im maschinellen Lernen, so dass ich nicht die richtige Terminologie, aber ich konvertierte zwei kategorische Spalten in Zahlen auf die folgende Weise. Diese Spalten sind Teil meiner Feature-Eingaben, ähnlich der Sex-Spalte in der Titanic-Datenbank. (Sie sind nicht die Zieldaten y, die ich bereits erstellt haben)Vorverarbeitung kategorische Daten bereits in Zahlen umgewandelt

      changed p_changed 
Date          
2010-02-17 0.477182  0   0 
2010-02-18 0.395813  0   0 
2010-02-19 0.252179  1   1 
2010-02-22 0.401321  0   1 
2010-02-23 0.519375  1   1 

nun der Rest meiner Daten X so etwas wie dieses

  Open High Low Close Volume Adj Close log_return \ 
Date                 
2010-02-17 2.07 2.07 1.99 2.03 219700.0  2.03 -0.019513 
2010-02-18 2.03 2.03 1.99 2.03 181700.0  2.03 0.000000 
2010-02-19 2.03 2.03 2.00 2.02 116400.0  2.02 -0.004938 
2010-02-22 2.05 2.05 2.02 2.04 188300.0  2.04 0.009852 
2010-02-23 2.05 2.07 2.01 2.05 255400.0  2.05 0.004890 

      close_open Daily_Change 30_Avg_Vol 20_Avg_Vol 15_Avg_Vol \ 
Date                  
2010-02-17  0.00   -0.04 0.909517 0.779299 0.668242 
2010-02-18  0.00   0.00 0.747470 0.635404 0.543015 
2010-02-19  0.00   -0.01 0.508860 0.417706 0.348761 
2010-02-22  0.03   -0.01 0.817274 0.666903 0.562414 
2010-02-23  0.01   0.00 1.078411 0.879007 0.742730 

sieht, wie Sie den Rest meiner Daten sehen kann, ist kontinuierlich (mit vielen Variablen) im Gegensatz zu den zwei kategorischen Spalten, die nur zwei Werte (0 und 1) haben.

ich diese Daten plante alle Vorprozess in einem Schuss über diese einfache Methode Vorprozess

X_scaled = preprocessing.scale(X) 

ich mich gefragt, ob dieser Fehler ist? Gibt es noch etwas, was ich mit den kategorischen Werten tun muss, bevor ich diese einfache Vorverarbeitung verwende?

EDIT: Ich habe zwei Möglichkeiten versucht; Zuerst habe ich versucht, die vollständigen Daten zu skalieren, einschließlich der kategorischen Daten, die in 1 und 0 umgewandelt wurden.

Dann habe ich versucht, die letzten zwei Spalten fallen zu lassen, Skalierung und dann die fallengelassenen Spalten über diesen Code hinzufügen.

X =OPK_df.iloc[:-5, 0:-7] # Here I'm dropping both -7 while originally the offset was only till -5, which means two extra columns were dropped. 

habe ich einen anderen Datenrahmen, die diese beiden Spalten I

x2 =OPK_df.iloc[:-5, -7:-5] 
x2 = np.array(x2) # convert it to an array 


# preprocessing the data without last two columns 
    from sklearn import preprocessing 
    X_scaled = preprocessing.scale(X) 

# Then concact the X_scaled with x2(originally dropped columns) 

    X =np.concatenate((X_scaled, x2), axis =1) 


    #Creating a classifier 

from sklearn.neighbors import KNeighborsClassifier 
knn = KNeighborsClassifier(n_neighbors=5) 
knn2 = KNeighborsClassifier(n_neighbors=5) 
knn.fit(X_scaled, y) 
knn2.fit(X,y) 


knn.score(Full_X_scaled, y) 

0.71396522714526078 


knn2.score(X, y) 

0.71789119461581608 

So fiel es eine höhere Punktzahl, wenn ich in der Tat während der Standardisierung der beiden Spalten nicht fallen.

Antwort

1

Sie sind ziemlich gut so weit. Do nicht skalieren Sie Ihre Klassifizierungsdaten. Da es sich um binäre Klassifizierungen handelt, denken Sie an "Ja" und "Nein". Was bedeutet es, diese zu skalieren?

Noch schlimmer, bedenken Sie, dass Sie Klassifikationen wie Blumentypen haben könnten: Sie haben Zinnia = 0, Rose = 1, Orchidee = 2, usw. Was bedeutet es, diese zu skalieren? Es macht keinen Sinn zu-Code erneut diese als Zinnia = -0,257, Rose = + 0,448 usw.

Skalierung Ihren Eingang Daten sind der notwendige Teil: es die Werte innerhalb vergleichbaren Bereiche hält (mathematischer Einfluss), so dass Sie leicht eine einzige Behandlung für Ihre Verlustfunktion verwenden können. Andernfalls würde das Merkmal mit der größten Verbreitung von Werten den größten Einfluss auf das Training haben, bis die Gewichte Ihres Modells gelernt haben, die großen Werte richtig zu diskontieren.

Für Ihre ersten Erkundungen machen Sie keine andere Vorverarbeitung: Skalieren Sie einfach die Eingabedaten und starten Sie Ihre Anpassungsübungen.

+0

Hallo. Ich glaube, ich habe in meinen Formulierungen einen Fehler gemacht. Die letzten zwei Spalten "getauscht", die kategorische Daten haben, sind Teil meiner Eingabedaten. Es ist verwandt mit "Sex" in der titanischen Datenbank. Meine Spalte für die Ausgabe (Klassifizierung) ist eine völlig andere Spalte, die ich bereits in "y" umgewandelt habe. Also sollte ich versuchen, diese Drop-Spalten fallen lassen, skalieren Sie den Rest der Daten und fügen Sie die Spalten dann zurück? Vielen Dank. – Moondra

+1

Ah; Aha.Ja, Sie sind genau richtig: Skalieren Sie diese nicht, wenn es leicht zu vermeiden ist. Es wird nicht schaden, aber es wird die Zwischendaten schwerer lesbar machen. – Prune

+0

Danke. Ich werde das versuchen und sehen, ob es die Wertung meines Klassifikators verbessert. – Moondra