Close
Uczenie maszynowe: matematyczna transformacja danych

Uczenie maszynowe: matematyczna transformacja danych

Czy przed stosowaniem modeli uczenia maszynowego dane powinny zostać odpowiednio przekształcone, przetransformowane zgodnie z tytułem uczenie maszynowe matematyczna transformacja danych. Odpowiedź brzmi, nie jest to konieczne (aczkolwiek przy szeregach czasowych, odpowiedź może skłaniać się bardziej w kierunku konieczne 😉). To po co sobie zawracać tym głowę. A dlatego, że po pierwsze odpowiednie przetransformowanie danych może zwiększyć wydajność naszych modeli, a po drugie stosując modele liniowe, w tym logiczną regresję przyjmuje się, że zmienna ma rozkład normalny. Rozkład ten, zwany często rozkładem Gaussa jest jednym z najważniejszych rozkładów prawdopodobieństwa w statystyce. A wykres funkcji gęstości prawdopodobieństwa tego rozkładu jest dobrze rozpoznawaną krzywą dzwonową z określonymi parametrami. Jak ktoś chciałby sobie przypomnieć co to za parametry i jakimi właściwościami rozkład normalny się charakteryzuje to esencję można znaleźć we wpisie: Why is Gaussian the King of all distributions?

Dla przypomnienia, w tej serii wpisów opublikowano już:

Zatem realizując któryś z wspomnianych wyżej modeli warto sprawdzić właśnie to, czy mamy do czynienia z rozkład normalnym naszych zmiennych. Metod sprawdzenia jest dość sporo poczynając od graficznych przedstawiających histogram zmiennych, wykres kwantyl-kwantyl (ang. Q-Q plot) aż po szeroką gamę testów statystycznych, z których najbardziej znane są testy Kołmogorowa-Smirnova dla prób ilościowo dużych i Shapiro-Wilka dla prób ilościowo małych. I jeżeli w wyniku przeprowadzonych testów okaże się, że rozkład zmiennej odbiega od rozkładu normalnego będąc jego asymetryczną wersją wówczas możliwym staje się zastosowanie pewnych matematycznych przekształceń, które w rezultacie zbliżają rozkład zmiennej do jej rozkładu normalnego.

Matematyczna transformacja danych

Do najczęściej stosowanych metod matematycznych przekształceń zaliczamy (po średniku podano ograniczenie metody):

  • transformację odwrotną ( 1/x ; dla x != 0)  
  • transformację pierwiastkową ( x**(1/2) ; dla x>0 )
  • transformację wykładniczą ( x**lambda)
  • transformację logarytmiczną ( np.log(x) ; dla x > 0)
  • transformację Boxa-Coxa ( ; dla x > 0 )
  • transformację Yeo-Johnsona

W sieci można znaleźć szereg różnych stron poświęconych tym transformacjom także nie będę ich tutaj opisywał. Najbardziej złożonymi transformacjami są oczywiście dwie ostatnie, czyli Box-Cox oraz Yeo-Johnson. Szczegółowe wzory obu podane są także w dokumentacji scikit-learn.

Dane do analizy

Tak jak w poprzednich wpisach pracować będziemy na danych pochodzących ze zbioru opisującego nieruchomości House Prices – Advanced Regression Techniques. Link do zbioru danych [1].

Do transformacji przystąp

Zatem do dzieła. Tradycyjnie skorzystam z metod zawartych w pakiecie scikit-learn pamiętając o tym, że metody w wyniku zwracają transformację w postaci tablicy NumPy. Ponadto w przypadku metod Box-Cox i Yeo-Johnson transformacja uczy się swoich parametrów z danych, zatem nie zapomnijmy wcześniej podzielić zbiór na uczący i testowy przed wykonaniem transformacji.

W module preprocessing pakietu scikit-learn znajdujemy metody:

Z uwagi na to, ze poszczególne matematyczne metody transformacji mają swoje ograniczenia (zawarłem je wyżej przy wymienieniu metod) to z dostępnej puli zmiennych wybierzemy te zmienne, które są numeryczne i dodatnie. Następnie dla nich z grubsza wyświetlimy histogramy celem szacunkowej oceny rozkładu zmiennej.

Matematyczna transformacja danych histogram

Z kolei pełniejsza ocena rozkładu zmiennej przed i po transformacji zostanie dokonana na podstawie histogramu oraz wykresu Q-Q plot.

Ładujemy odpowiednie klasy i przetestujemy transformacje dla wybranej zmiennej

Transformacja odwrotna

W pierwszym wierszu przypominana będzie oryginalna zmienna YearBuilt, w drugim z kolei zmienna przetransformowana.

Transformacja odwrotna Reciprocal transformation

Transformacja pierwiastkowa

Transformacja pierwiastowa Square root transformation

Transformacja wykładnicza

Transformacja wykładnicza Exponential transformation

Transformacja logarytmiczna

Transformacja logarytmiczna Logarithmic transformation

Transformacja Box-Cox

Box-Cox transformation

Transformacja Yeo-Johnson

Yeo-Johnson transformation

Przyglądając się poszczególnym wykresom ciężko uznać by, któraś z zaproponowanych transformacji sprawdziła się przy przekształceniu zmiennej "YearBuilt" w kierunku zmiennej o rozkładzie normalnym. Niestety nie zawsze się to udaje, ale żeby nie było tak źle poniżej zademonstruje transformację Yeo-Johnson dla innej zmiennej "1stFlrSF".

W tym przypadku może nie jest to jeszcze idealna transformacja, ale postęp z pewnością jest już znacząco zauważalny. Wśród zmiennych, dla których wyrysowano na początku histogram są i takie, gdzie transformacja przyniesie bardzo dobre rezultaty. Które to zmienne, to już zostawiam do własnego sprawdzenia 😉 .

Odnośniki

[1].https://www.kaggle.com/competitions/house-prices-advanced-regression-techniques/data

[2]. https://github.com/jurand71/mlDataPreprocessing

dr hab. inż., prof. Politechniki Częstochowskiej; zainteresowania: aspekty środowiskowe, gospodarowanie odpadami (praktyczne), danologia (hobbystycznie)

Leave a Reply

Your email address will not be published. Required fields are marked *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.