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.
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
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
Danke. Ich werde das versuchen und sehen, ob es die Wertung meines Klassifikators verbessert. – Moondra