Wenn die Skalierung der Daten, warum der Zug dataset verwenden Sie 'passen' und 'transformieren', aber das test-dataset verwenden Sie nur 'verwandeln'?
Wenn die Skalierung der Daten, warum der Zug dataset verwenden Sie 'passen' und 'transformieren', aber das test-dataset verwenden Sie nur 'verwandeln'?
SAMPLE_COUNT = 5000
TEST_COUNT = 20000
seed(0)
sample = list()
test_sample = list()
for index, line in enumerate(open('covtype.data','rb')):
if index < SAMPLE_COUNT:
sample.append(line)
else:
r = randint(0,index)
if r < SAMPLE_COUNT:
sample[r] = line
else:
k = randint(0,index)
if k < TEST_COUNT:
if len(test_sample) < TEST_COUNT:
test_sample.append(line)
else:
test_sample[k] = line
from sklearn.preprocessing import StandardScaler
for n, line in enumerate(sample):
sample[n] = map(float, line.strip().split(','))
y = np.array(sample)[:,-1]
scaling = StandardScaler()
X = scaling.fit_transform(np.array(sample)[:,:-1]) ##here use fit and transform
for n,line in enumerate(test_sample):
test_sample[n] = map(float,line.strip().split(','))
yt = np.array(test_sample)[:,-1]
Xt = scaling.transform(np.array(test_sample)[:,:-1])##why here only use transform
Wie die Anmerkung sagt, warum Xt verwenden Sie nur transformieren, aber keine passt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden wir
fit_transform()
auf der Zug-Daten, so dass wir lernen, die Parameter-Skalierung auf der Zug-Daten und in der gleichen Zeit, skalieren wir die Zug Daten.Wir verwenden nur
transform()
auf den test-Daten ein, denn wir verwenden die Skalierung Parameter lernte auf der Zug-Daten für die Skalierung der Testdaten.Dies ist die standart Prozedur zu skalieren. Man lernt immer Ihre Skalierung Parameter auf den Zug auf und verwenden Sie Sie dann auf den test. Hier ist ein Artikel, der explane es sehr gut : https://sebastianraschka.com/faq/docs/scale-training-test.html
transform
tut, wie du sagst, können die Ergebnisse nicht identisch.Haben wir zwei Datensätze : Der Trainings-und der test-Datensatz. Man Stelle sich vor wir haben nur 2 Funktionen :
'x1' und 'x2'.
Betrachten Sie nun diese (sehr hypothetisches Beispiel):
Einer Probe, die in den Trainingsdaten hat die Werte: 'x1' = 100 und 'x2' = 200
Wenn skaliert, 'x1' wird ein Wert von 0,1 und 'x2' den Wert von 0,1 zu. Die response-variable mit dem Wert 100 für diese. Diese wurden berechnet w.r.t nur die Trainingsdaten der Mittelwert und std.
Einer Probe in den test-Daten hat die Werte : 'x1' = 50 und 'x2' = 100. Bei der Skalierung nach der test-Daten-Werte, 'x1' = 0,1 und 'x2' = 0.1. Dies bedeutet, dass unsere Funktion predict response-variable Wert von 100 für dieses Beispiel zu. Aber das ist falsch. Es sollte nicht sein 100. Es sollte die Vorhersage etwas anderes, weil die nicht-skalierte Werte der Eigenschaften der 2-Proben, die oben erwähnt sind Verschieden, und so zeigen Sie auf verschiedene response-Werte. Wir wissen, was die richtige Vorhersage nur, wenn wir ihn skalieren entsprechend der Trainingsdaten, da nur diese Werte, die unsere lineare regression-Funktion gelernt hat.
Ich habe versucht zu erklären, die intuition, die hinter dieser Logik unter:
Entscheiden wir skalieren die Funktionen im Trainings-dataset vor der Anwendung der linearen regression und der Montage der linearen regressionsfunktion. Wenn wir die Skala der Merkmale des Trainings-dataset, alle 'x1' - Funktionen angepasst, entsprechend der Mittelwerte und der Standardabweichungen der verschiedenen Proben w.r.t zu den 'x1' feature-Werte. Das gleiche passiert für " x2 " - Funktion.
Dies bedeutet im wesentlichen, dass jede Funktion hat sich gewandelt in eine neue Reihe, basierend auf den Trainingsdaten. Es ist wie Jedes feature hat eine relative position. Relativ zum Mittelwert und std nur die Trainingsdaten. Also jedes sample die neue 'x1' und 'x2' - Werte sind abhängig vom Mittelwert und std der Ausbildung nur Daten.
Was passiert nun, wenn wir fit-lineare regression-Funktion ist, dass es lernt, dass die Parameter (ich.e, lernt zur Vorhersage der response-Werte) auf Basis der skalierten Merkmale unserer Trainings-dataset. Das bedeutet, dass Sie lernen, um vorherzusagen, basiert auf diesen bestimmten Mittelwerte und Standardabweichungen von 'x1' und 'x2' von den verschiedenen Proben in der Trainings-dataset. Ja, den Wert der Prognosen hängt von der:
*gelernt Parameter. Die wiederum hängt von der
*Wert der Merkmale der Trainingsdaten (die skaliert wurden).Und wegen der Skalierung der Trainingsdaten Funktionen hängen von der
*Trainingsdaten der Mittelwert und std.
Wenn wir jetzt passen die standardscaler (), um die test-Daten, test-Daten 'x1' und 'x2', haben Ihre eigenen Mittelwert und std. Dies bedeutet, dass die neuen Werte der beiden Funktionen wiederum in das Verhältnis zu der nur die Daten in der test-Daten und somit keine Verbindung jedweder Art zu den Trainingsdaten. Es ist fast, wie Sie wurden abgezogen durch und geteilt durch zufällige Werte und haben neue Werte, die nicht vermitteln, wie Sie sind in Bezug auf die Trainingsdaten.
fit() wird zur Berechnung der parameter benötigt, die für die Umwandlung und Transformation() ist für die Skalierung der Daten zu konvertieren in standard-format für das Modell.
fit_tranform() ist eine Kombination der beiden, das über die Arbeit effizient.
Seit fit_transform() ist bereits computing und die Transformation der Trainingsdaten nur die transformation für die Prüfung der Daten ist Links,da parameter benötigt, die für die Umwandlung ist bereits berechnet und gespeichert, nur die transformation() von Test Daten bleiben HIERFÜR nur die transform() wird verwendet anstelle von fit_transform().
verwenden wir
fit()
oderfit_transform()
um zu lernen (trainieren des Modells) auf die Zug-Daten-set.transform()
kann verwendet werden, auf die das trainierte Modell gegen die test-Daten.h_class = SVC(kernel='rbf',C=1.0,gamma=0.7,random_state=101)
,h_class.fit(X_i, y_i)
,print h_class.support_
, Aber warum nichta = h_class.fit(X_i, y_i)
,print a.support_
fit()
Methode nicht machen (oder zurück) jedes neue Objekt. So ist es kein verwenden, die Zuordnung zua
wie du.könnte es zwei Ansätze:
1. Ansatz-Skala mit Sitz und verwandeln trainieren, Daten, transformieren, nur Testdaten
2. fit und verwandeln die ganze Reihe :train + test
wenn Sie darüber nachdenken: wie wird sich die Modell-Griff skaliert werden, wenn die live geht?: Wenn neue Daten ankommen, werden neue Daten Verhalten sich genauso wie die ungesehenen Testdaten in Ihrem backtest.
In der 1. Fall , werden neue Daten nur Skala transformiert und Ihr Modell bis zum Abwinken skalierte Werte bleiben unverändert.
Aber im 2. Fall, wenn neue Daten kommen, dann müssen Sie passen, transformieren Sie das gesamte dataset , das bedeutet, dass der backtest skalierten Werte werden nicht mehr die selben sein und dann müssen Sie re-train Modell..wenn diese Aufgabe schnell erledigt werden können, dann denke ich ist es ok
aber der 1. Fall erfordert weniger Arbeit...
und wenn es große Unterschiede zwischen der Skalierung in Schulen und zu testen ist dann wohl auch die Daten sind nicht stationär und ML ist wahrscheinlich nicht eine gute Idee