Konsekwencje skalowania cech

11

Obecnie używam SVM i skaluję swoje funkcje treningowe do zakresu [0,1]. Najpierw dopasowuję / przekształcam mój zestaw treningowy, a następnie stosuję tę samą transformację do mojego zestawu testowego. Na przykład:

    ### Configure transformation and apply to training set
    min_max_scaler = MinMaxScaler(feature_range=(0, 1))
    X_train = min_max_scaler.fit_transform(X_train)

    ### Perform transformation on testing set
    X_test = min_max_scaler.transform(X_test)

Załóżmy, że dana cecha w zestawie treningowym ma zakres [0,100], a ta sama cecha w zestawie testowym ma zakres [-10,120]. W zestawie szkoleniowym ta funkcja będzie odpowiednio skalowana do [0,1], podczas gdy w zestawie testowym ta właściwość będzie skalowana do zakresu poza tym pierwszym określonym, coś w rodzaju [-0,1,1.2].

Zastanawiałem się, jakie konsekwencje funkcji zestawu testowego są poza zasięgiem tych, które są używane do szkolenia modelu? Czy to problem?

mike1886
źródło

Odpowiedzi:

6

W ramach każdej klasy będziesz miał rozkłady wartości dla funkcji. To samo w sobie nie jest powodem do niepokoju.

Z nieco teoretycznego punktu widzenia możesz zadać sobie pytanie, dlaczego warto skalować funkcje i dlaczego należy skalować je dokładnie w wybrany sposób.
Jednym z powodów może być to, że Twój algorytm treningowy jest zbieżny szybciej (lepiej) z wartościami około 0 - 1 niż z funkcjami obejmującymi inne rzędy wielkości. W takim razie prawdopodobnie nic ci nie jest. Domyślam się, że twój SVM jest w porządku: chcesz uniknąć zbyt dużych liczb z powodu wewnętrznego produktu, ale maksimum 1,2 vs. maksimum 1,0 nie zrobi dużej różnicy.
(OTOH, gdybyś np. Znał algorytm, aby nie akceptować wartości ujemnych, oczywiście miałbyś kłopoty).

Praktyczne pytanie brzmi, czy Twój model dobrze sobie radzi w przypadkach, które są nieco poza zakresem objętym szkoleniem. Wierzę, że najlepiej i prawdopodobnie można na nie odpowiedzieć tylko poprzez testowanie takich przypadków / sprawdzanie wyników testów pod kątem spadku wydajności w przypadkach spoza dziedziny szkolenia. Jest to ważna kwestia i rozważenie tego byłoby częścią walidacji twojego modelu.

Obserwowanie różnic w opisywanym rozmiarze jest IMHO powodem, dla którego warto przyjrzeć się stabilności modelu.

cbeleites niezadowoleni z SX
źródło
7

To miał być komentarz, ale jest za długi.

Fakt, że zestaw testowy ma inny zakres, może świadczyć o tym, że zestaw treningowy nie jest dobrą reprezentacją zestawu testowego. Jeśli jednak różnica jest naprawdę niewielka, jak w twoim przykładzie, prawdopodobnie nie wpłynie to na twoje przewidywania. Niestety nie sądzę, że mam dobry powód, aby sądzić, że w żadnym wypadku nie wpłynie to na maszynę SVM.

Zauważ, że uzasadnieniem użycia MinMaxScalar jest (zgodnie z dokumentacją):

Motywacja do zastosowania tego skalowania obejmuje odporność na bardzo małe odchylenia standardowe funkcji i zachowanie zerowych wpisów w rzadkich danych.

Dlatego ważne jest, aby upewnić się, że dane pasują do tego przypadku.

Jeśli naprawdę martwi Cię zakres różnic, powinieneś użyć zwykłej standaryzacji (np. preprocessing.scale).

Robert Smith
źródło
Cześć Robert, dzięki za odpowiedź! Dobra uwaga na temat reprezentacji zestawu treningowego / testowego, ale są to dane szeregów czasowych, więc kiedy pojawiają się nowe dane, nie mogę zagwarantować, że wartości będą podobne w zakresie do tego, co były wcześniej. Mam takie samo dokładne przeczucie jak ty, że nie mam dobrego powodu, aby sądzić, że nie wpłynie to na SVM w żadnych okolicznościach.
mike1886,
Czy porównałeś prognozy za pomocą MinMaxScaler i standaryzacji?
Robert Smith
Mam, a wyniki są podobne, ale to tak naprawdę nie mówi mi, czy z MinMaxScalar robi się źle.
mike1886,
Pewnie. W każdym razie lepiej byłoby użyć standaryzacji, jeśli nie otrzymujesz czegoś cennego MinMaxScaler.
Robert Smith