Wariancja -krotnie szacunki krzyżowej walidacji jako : jaka jest rola „stabilności”?


37

TL, DR: Wydaje się, że wbrew często powtarzanym zaleceniom, krzyżowa walidacja typu „jeden do jednego” (LOO-CV) - to znaczy,krotnie CV z(liczbą fałdów) równą(liczba obserwacji treningowych) - daje oszacowania błędu uogólnienia, które są najmniej zmienne dla dowolnego, a nie najbardziej zmienne, przy założeniu pewnegowarunku stabilności w modelu / algorytmie, zestawie danych lub w obu (nie jestem pewien, który jest poprawny, ponieważ tak naprawdę nie rozumiem tego warunku stabilności).K N KKKNK

  • Czy ktoś może jasno wyjaśnić, czym dokładnie jest ten warunek stabilności?
  • Czy to prawda, że ​​regresja liniowa jest jednym z takich „stabilnych” algorytmów, co sugeruje, że w tym kontekście LOO-CV jest ściśle najlepszym wyborem CV, jeśli chodzi o stronniczość i wariancję szacunków błędu uogólnienia?

Tradycyjna mądrość mówi, że wybór w krotnym CV wynika z kompromisu wariancji odchylenia, takie niższe wartości (zbliżające się do 2) prowadzą do oszacowań błędu uogólnienia, które mają bardziej pesymistyczne nastawienie, ale mniejszą wariancję, podczas gdy wyższe wartości z (zbliżający się do ) prowadzi do oszacowań, które są mniej stronnicze, ale z większą wariancją. Konwencjonalne wyjaśnienie tego zjawiska wariancji narastającego wraz z jest być może najbardziej widoczne w Elementach uczenia statystycznego (Rozdział 7.10.1):K K K N KKKKKNK

Przy K = N estymator krzyżowej walidacji jest w przybliżeniu bezstronny w odniesieniu do prawdziwego (oczekiwanego) błędu prognozowania, ale może wykazywać dużą wariancję, ponieważ N „zestawów treningowych” jest do siebie bardzo podobnych.

Oznacza to, że błędy walidacji są bardziej skorelowane, dzięki czemu ich suma jest bardziej zmienna. Ten tok rozumowania został powtórzony w wielu odpowiedziach na tej stronie (np. Tutaj , tutaj , tutaj , tutaj , tutaj , tutaj i tutaj ), a także na różnych blogach itp. Ale zamiast tego nigdy nie podano szczegółowej analizy tylko intuicja lub krótki szkic tego, jak może wyglądać analiza.N

Można jednak znaleźć sprzeczne stwierdzenia, zwykle powołując się na pewien warunek „stabilności”, którego tak naprawdę nie rozumiem. Na przykład w tej sprzecznej odpowiedzi przytacza się kilka akapitów z dokumentu z 2015 r., Który mówi między innymi: „W przypadku modeli / procedur modelowania o niskiej niestabilności , LOO często ma najmniejszą zmienność” (podkreślenie dodane). Ten artykuł (sekcja 5.2) wydaje się zgadzać, że LOO reprezentuje najmniej zmienny wybór o ile model / algorytm jest „stabilny”. Jeśli chodzi o jeszcze inne stanowisko w tej sprawie, istnieje również ten artykuł (Wniosek 2), który mówi: „Wariacja walidacji krzyżowej krotności [...] nie zależy odk kKkk, „ponownie powołując się na pewien warunek„ stabilności ”.

Wyjaśnienie, dlaczego LOO może być najbardziej zmiennym CV z foldem, jest dość intuicyjne, ale istnieje kontr-intuicja. Ostateczne oszacowanie CV średniego błędu kwadratu (MSE) jest średnią z oszacowań MSE w każdym krotności. Tak więc, gdy wzrasta do , oszacowanie CV jest średnią rosnącej liczby zmiennych losowych. I wiemy, że wariancja średniej maleje wraz z uśrednianiem liczby zmiennych. Tak więc, aby LOO była najbardziej zmiennym CV z krotnością , musiałoby być prawdą, że wzrost wariancji ze względu na zwiększoną korelację między szacunkami MSE przewyższa spadek wariancji ze względu na większą liczbę fałd uśrednianych w ciąguK N KKKNK. I wcale nie jest oczywiste, że to prawda.

Stając się całkowicie zdezorientowanym myśląc o tym wszystkim, postanowiłem przeprowadzić małą symulację dla przypadku regresji liniowej. I symulowane 10000 zestawów danych o = 50 i 3 nieskorelowanych predykcyjnych, za każdym razem, oszacowanie błędu generalizacji pomocą CV-krotnie z = 2, 5, 10 lub 50 = . Kod R jest tutaj. Oto otrzymane średnie i warianty szacunków CV dla wszystkich 10 000 zestawów danych (w jednostkach MSE):K K NNKKN

         k = 2 k = 5 k = 10 k = n = 50
mean     1.187 1.108  1.094      1.087
variance 0.094 0.058  0.053      0.051

Wyniki te pokazują oczekiwany wzorzec, że wyższe wartości prowadzą do mniej pesymistycznego nastawienia, ale wydają się również potwierdzać, że wariancja oszacowań CV jest najniższa, a nie najwyższa, w przypadku LOO.K

Wydaje się więc, że regresja liniowa jest jednym ze „stabilnych” przypadków wymienionych w powyższych artykułach, w których zwiększenie wiąże się raczej ze zmniejszeniem, a nie ze wzrostem wariancji w oszacowaniach CV. Ale nadal nie rozumiem:K

  • Czym dokładnie jest ten warunek „stabilności”? Czy w pewnym stopniu dotyczy modeli / algorytmów, zestawów danych, czy obu?
  • Czy istnieje intuicyjny sposób myślenia o tej stabilności?
  • Jakie są inne przykłady stabilnych i niestabilnych modeli / algorytmów lub zestawów danych?
  • Czy względnie bezpiecznie jest założyć, że większość modeli / algorytmów lub zestawów danych jest „stabilna”, a zatem, że należy zasadniczo wybierać tak wysoko, jak jest to możliwe obliczeniowo?K

1
+1. Co dokładnie oznacza „znaczy” w wynikach symulacji? Średnie oszacowanie CV błędu generalizacji (średnia dla 10000 zestawów danych)? Ale z czym powinniśmy to porównać? Bardziej sensowne byłoby pokazanie błędu systematycznego, tj. Odchylenia średniej kwadratowej od prawdziwego błędu generalizacji. Co to jest „prawdziwy błąd uogólnienia” w tym przypadku? Prawdziwy błąd uogólnienia oszacowania dla danego zestawu danych N = 100? Lub oczekiwana wartość prawdziwego błędu generalizacji (wartość oczekiwana dla wszystkich N = 100 zestawów danych)? Albo coś innego?
ameba mówi Przywróć Monikę

3
+1. Po krótkim spojrzeniu na en.wikipedia.org/wiki/… wydaje się, że w tym kontekście stabilność oznacza, że ​​algorytm daje podobne wyniki na zestawie szkoleniowym z przykładami i . Tam, gdzie podobne oznaczają różnice, niektóre funkcje strat ograniczone pewną niską wartościąN - 1NN1
Łukasz Grad

1
Poza tym, ostatnio rozmawiałem o tym z @DikranMarsupial (który jest prawdopodobnie jednym z naszych głównych ekspertów w zakresie weryfikacji krzyżowej tutaj w CV) tutaj w komentarzach - zasugerował, aby przeczytać artykuł Kohaviego z 1995 roku . Dikran mówił także o stabilności. Niestety od tego czasu nie podążyłem za nim.
ameba mówi Przywróć Monikę

2
Nie wydaje mi się, @Jake. To, co napisałem, unieważnia twoją „kontr-intuicję”, ale główna „intuicja” (o wysoce zależnych modelach z różnych fałd) nadal może się utrzymywać.
ameba mówi Przywróć Monikę

1
Kolejna symulacja potwierdzająca twoje wnioski, że wariancja maleje wraz z : stats.stackexchange.com/a/357749/28666 . K
ameba mówi Przywróć Monikę

Odpowiedzi:


15

Ta odpowiedź jest kontynuacją mojej odpowiedzi w zakresie błędu systematycznego i wariancji w krzyżowej walidacji typu „zostaw-jeden-out” i „K-fold”, która omawia, dlaczego LOOCV nie zawsze prowadzi do wyższej wariancji. Stosując podobne podejście, postaram się zwrócić uwagę na przypadek, w którym LOOCV prowadzi do większej wariancji w obecności wartości odstających i „niestabilnego modelu”.

Stabilność algorytmiczna (teoria uczenia się)

Temat stabilności algorytmu jest niedawny, a kilka klasycznych, inspirujących wyników zostało udowodnionych w ciągu ostatnich 20 lat. Oto kilka artykułów, które są często cytowane

Najlepszą stroną do zrozumienia jest z pewnością strona wikipedia, która zapewnia doskonałe streszczenie napisane przez przypuszczalnie bardzo znającego się na rzeczy użytkownika.

Intuicyjna definicja stabilności

Intuicyjnie stabilny algorytm to taki, dla którego prognozowanie niewiele się zmienia, gdy dane treningowe są nieznacznie modyfikowane.

Formalnie istnieją pół tuzina wersje stabilności, połączone ze sobą za pomocą warunków technicznych i hierarchii, zobaczyć tę grafikę z tutaj na przykład:

wprowadź opis zdjęcia tutaj

Cel jest jednak prosty, chcemy uzyskać ścisłe ograniczenia dotyczące błędu uogólnienia określonego algorytmu uczenia się, gdy algorytm spełnia kryterium stabilności. Jak można się spodziewać, im bardziej restrykcyjne kryterium stateczności, tym ciaśniejsza będzie odpowiednia granica.

Notacja

Poniższy zapis pochodzi z artykułu w Wikipedii, który sam kopiuje artykuł Bousquet i Elisseef:

  • Zestaw treningowy został narysowany z nieznanego rozkładu DS={z1=(x1,y1),...,zm=(xm,ym)}
  • Funkcja straty hipotezy w odniesieniu do przykładu jest zdefiniowana jakof z V ( f , z )VfzV(f,z)
  • Modyfikujemy zestaw szkoleniowy, usuwając -ty element:S | I = { oo 1 , . . . , Z i - 1 , z i + 1 , . . . , z m }iS|i={z1,...,zi1,zi+1,...,zm}
  • Lub przez zastąpienie elementu:S, i = { oo 1 , . . . , z i - 1 , ziSi={z1,...,zi1,zi,zi+1,...,zm}

Definicje formalne

Być może najsilniejszym pojęciem stabilności, którego można oczekiwać od interesującego algorytmu uczenia się, jest pojęcie jednolitej stabilności :

Jednolita stabilność Algorytm ma jednolitą stabilność względem funkcji straty jeżeli:V.βV

SZm  i{1,...,m},  sup|V(fs,z)V(fS|i,z)|  β

Uważany za funkcję termin można zapisać jako . Mówimy, że algorytm jest stabilny, gdy zmniejsza się jako . Nieco słabszą formą stabilności jest:β β m β m 1mββmβm1m

Stabilność hipotez

i{1,...,m},  E[ |V(fs,z)V(fS|i,z)| ] β

Jeśli jeden punkt zostanie usunięty, różnica w wyniku algorytmu uczenia się jest mierzona przez uśrednioną bezwzględną różnicę strat ( norma ). Intuicyjnie: niewielkie zmiany w próbce mogą spowodować, że algorytm przejdzie do pobliskich hipotez.L1

Zaletą tych form stabilności jest to, że zapewniają one granice błędu i wariancji stabilnych algorytmów. W szczególności Bousquet udowodnił te granice dla stabilności jednolitości i hipotezy w 2002 r. Od tego czasu wiele pracy włożono w próbę złagodzenia warunków stabilności i uogólnienia granic, na przykład w 2011 r. Kale, Kumar, Vassilvitskii twierdzą, że oznacza to kwadratową stabilność zapewnia lepsze wariancje ograniczenia redukcji wariancji ilościowej.

Niektóre przykłady stabilnych algorytmów

Wykazano, że następujące algorytmy są stabilne i mają udowodnione granice uogólnienia:

  • Regularna regresja metodą najmniejszych kwadratów (z odpowiednim wcześniejszym)
  • Klasyfikator KNN z funkcją strat 0-1
  • SVM z ograniczonym jądrem i dużą stałą regularyzacji
  • Miękki margines SVM
  • Algorytm minimalnej entropii względnej dla klasyfikacji
  • Wersja worków regulujących

Eksperymentalna symulacja

Powtarzając eksperyment z poprzedniego wątku ( patrz tutaj ), wprowadzamy teraz pewien zestaw wartości odstających w zbiorze danych. W szczególności:

  • 97% danych ma jednolity szum[.5,.5]
  • 3% danych przy jednolitym hałasie[20,20]

Ponieważ model wielomianowy rzędowy nie jest uregulowany, duży wpływ na niego będzie obecność kilku wartości odstających dla małych zestawów danych. W przypadku większych zestawów danych lub gdy jest więcej wartości odstających, ich efekt jest mniejszy, ponieważ mają tendencję do anulowania. Zobacz poniżej dwa modele dla 60 i 200 punktów danych.3

wprowadź opis zdjęcia tutaj

Wykonanie symulacji jak poprzednio i wykreślenie uzyskanego średniego MSE i wariancji MSE daje wyniki bardzo podobne do eksperymentu 2 artykułu Bengio i Grandvalet 2004 .

Lewa strona : brak wartości odstających. Prawa strona : 3% wartości odstające.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

(wyjaśnienie ostatniego rysunku znajduje się w powiązanym dokumencie)

Objaśnienia

Cytując odpowiedź Yves Grandvalet w innym wątku:

Intuicyjnie [w sytuacji niestabilnych algorytmów] pominięte CV może być ślepe na istniejące niestabilności, ale nie może zostać uruchomione przez zmianę pojedynczego punktu w danych treningowych, co czyni go wysoce zmiennym w zależności od realizacji zestaw treningowy.

W praktyce dość trudno jest zasymulować wzrost wariancji z powodu LOOCV. Wymaga szczególnej kombinacji niestabilności, niektórych wartości odstających, ale niezbyt wielu, i dużej liczby iteracji. Być może jest to oczekiwane, ponieważ regresja liniowa okazała się dość stabilna. Ciekawym eksperymentem byłoby powtórzenie tego dla danych o wyższych wymiarach i bardziej niestabilnego algorytmu (np. Drzewo decyzyjne)


+1, ale mam nadzieję, że ten wątek zostanie ostatecznie zamknięty jako duplikat połączonego wątku (poczekam, aż skończy się okres nagród i dyskusje się zakończą, i zobaczę, jaka odpowiedź zostanie ostatecznie zaakceptowana). Skomentuję później.
ameba mówi Przywróć Monikę

Nie jestem do końca przekonany, czy pytanie jest duplikatem. Moje pytanie wykorzystuje wariancję problemu LOO przede wszystkim jako sposób na sformułowanie głównych pytań, które mają na celu uzyskanie przystępnego wyjaśnienia, co oznacza „stabilność” - patrz pytania punktowane u góry iu dołu PO. Mówiąc o tym, chociaż ta odpowiedź jest przydatna (+1), nie widzę, że próbowałeś odpowiedzieć na pytania dotyczące stabilności ... używasz tego terminu kilka razy, ale wydaje się, że robisz to w sposób, który zakłada, że ​​czytelnik już wie, co to znaczy. Nie jestem pewien, czy mogę zaakceptować odpowiedź w obecnej formie.
Jake Westfall

1
@JakeWestfall Kiedy napisałem, że „mam nadzieję”, że ten wątek może ostatecznie zostać zamknięty jako duplikat, miałem na myśli, że mam nadzieję, że zaakceptowana odpowiedź w tym wątku ostatecznie będzie na tyle duża, że ​​obejmie rzeczy, o które pytałeś :) Spójrz na artykuł Bengio i Grandvalet, eksperyment 2. Pokazują, że stosując regresję liniową i dane gaussowskie uzyskują minimalną wariancję dla LOOCV (to również twój wynik), ale jeśli dane zawierają pewną część wartości odstających, LOOCV ma większą wariancję niż 10- krotnie lub tak. Myślę, że to wskazuje na istotną „stabilność”.
ameba mówi Przywróć Monikę

3
Uwielbiam to @XavierBourretSicotte. Dzięki za świetną pracę nad odpowiedzią.
Jake Westfall

1
Tak, cytując ten artykuł: pdfs.semanticscholar.org/bf83/… : „Stabilny algorytm ma właściwość polegającą na tym, że zastąpienie jednego elementu w zbiorze uczącym nie zmienia zbyt wiele jego wyniku. W rezultacie błąd empiryczny, jeśli jest uważany za zmienna losowa powinna mieć niewielką wariancję, a następnie stabilne algorytmy mogą być dobrymi kandydatami, aby ich błąd empiryczny był zbliżony do błędu generalizacji.
Xavier Bourret Sicotte,

2

Dam odpowiedź w kontekście cytowanego przez ciebie akapitu:

Przy K = N estymator krzyżowej walidacji jest w przybliżeniu bezstronny w odniesieniu do prawdziwego (oczekiwanego) błędu prognozowania, ale może wykazywać dużą wariancję, ponieważ N „zestawów treningowych” jest do siebie bardzo podobnych.

Estymator CV prawdziwego (przewidywanego) błędu prognozowania oparty jest na przykładzie zestawu treningowego, więc tutaj oczekiwanie jest ponad próbkami zestawu treningowego, jeśli dobrze to rozumiem.

Zatem w tym akapicie dotyczącym „dużej wariancji” jest to, że istnieje „duża” różnica między oczekiwanym błędem a błędem oszacowanym przez CV (który jest tutaj, średnią ponad krotności).

Ma to sens, ponieważ model jest dopasowany do określonego zestawu treningowego i ponieważ wszystkie fałdy treningowe są tak podobne w obrębie „odejść”. Jednak podczas gdy fałdy treningowe są bardzo podobne w rundzie CV, szacunki prawdopodobnie różnią się znacznie, jeśli zamienimy próbki treningowe na CV. W CV k-fold, ponieważ „dywersyfikujemy” fałdy treningowe, mamy pewien wpływ na uśrednianie, a dla k-fold, szacunki różnią się mniej.

Innymi słowy, estymator CV z pominięciem jednego z nich jest w zasadzie prawie podobny do metody wstrzymania, jeśli nie obracasz fałdów i nie opierasz swojej oceny błędu na jednym zestawie sprawdzania poprawności. Ponownie, w porównaniu z przykładami treningu, będzie duża wariancja w porównaniu do oszacowań z k-fold, w którym uśredniasz ponad fałdy, już trenując nieco różne modele w rundzie k-fold (innymi słowy, jeśli zamienisz zestawy treningów, oszacowania błąd przez k-fold prawdopodobnie nie będzie się tak bardzo różnić).

EDYTOWAĆ:

Kiedy czytam tutaj kilka odpowiedzi na temat weryfikacji krzyżowej i ogólnie Internetu, wydaje się, że istnieje pewne zamieszanie, do którego estymatora się odnosimy. Myślę, że niektórzy odnoszą się do modelu o dużej wariancji (gdzie ML mówi o stracie mającej dominujący komponent wariancji) w porównaniu do wysokiej wariancji k-krotnego estymatora CV. I inny zestaw odpowiedzi odnosi się do wariancji jako wariancji próbki dotyczącej fałdów, gdy ktoś mówi, że „k-fold ma dużą wariancję”. Proponuję więc być konkretny, ponieważ odpowiedzi są różne w obu przypadkach.


Omawiając wariancję, zakładam, że mówimy o wariancji estymatora CV w zestawie treningowym D, jak zdefiniowano tutaj: stats.stackexchange.com/questions/365224/... i tutaj: stats.stackexchange.com/questions/325123/... . Yves Grandvalet i Bengio twierdzą w swoim artykule z 2004 r., Że CV szacuje oczekiwany błąd prognozy. Możesz zobaczyć jego odpowiedź tutaj: stats.stackexchange.com/a/358138/192854
Xavier Bourret Sicotte

Jeśli chcesz oprzeć swoją odpowiedź na różnych definicjach wariancji, myślę, że warto byłoby dodać formalne definicje i formuły. Być może powinienem to zrobić również w moich odpowiedziach
Xavier Bourret Sicotte

Tak, muszę trochę zapoznać się z literaturą i dodać kilka formuł do odpowiedzi. Cytat z elementów uczenia statystycznego jest dla mnie nadal intuicyjny, że LOOCV ma dużą wariancję, jeśli model ma dużą wariancję, ponieważ jest ona średnią dla fałdów. Jeśli model ma duże odchylenie, zarówno LOOCV, jak i dowolne estymatory k-krotnie powinny mieć niską wariancję (niezależną od odchylenia), ponieważ przewidywania nie będą się tak bardzo różnić. Ale punktem tego akapitu był prob. to LOOCV w porównaniu do k-fold w większości przypadków

Cytat okazał się niepoprawny - przynajmniej jako uogólnienie - patrz wiele artykułów cytowanych w moich odpowiedziach
Xavier Bourret Sicotte

1

Już to przeszliśmy - masz zbyt matematyczne podejście do martwego konia. Zobacz klasyczną pracę Rona Kohaviego (Stanford-Univ) na temat CV i dylemat wariancji odchylenia tutaj . Kiedy skończysz to czytać, nie będziesz chciał wykonywać LOOCV, i prawdopodobnie przyciągnie Cię 10-krotnie CV i / lub CV biustu bootstrap.

Trzeba także pomyśleć o dużych zestawach danych, dla których LOOCV jest zbyt drogie obliczeniowo. Obecnie LOOCV nie jest tak naprawdę opcją w przepływach pracy / potokach większości grup.

Czym dokładnie jest ten warunek „stabilności”? Czy w pewnym stopniu dotyczy modeli / algorytmów, zestawów danych, czy obu?

We wszechświecie wszystkich funkcji kosztów i we wszechświecie wszystkich zestawów funkcji nie założyłbym, że istnieje ogólny wskaźnik „stabilności”, ponieważ nie byłby on niedopuszczalny i byłby zbyt podatny na rozkładanie się przy nieskończenie dużym zestawie warunki. Zasadniczo jest właściwe, gdy parametry df i / lub # są tak duże, że potrzeba więcej danych treningowych. Odchylenie będzie również większe dla , ponieważ wykorzystuje się więcej danych, a wariancja byłaby sztucznie zerowa, ponieważ zestawy danych szkoleniowych są zbyt podobne do siebie. Będziesz także uczył się więcej szumu w danych, gdy . k = n k = nk=nk=nk=n

LREG jako klasyfikator działałby, gdy dane można było liniowo oddzielić, ale średnio jego stronniczość byłaby zbyt wysoka, ponieważ wielu zestawów danych nie można oddzielić liniowo.

Czy istnieje intuicyjny sposób myślenia o tej stabilności?

Moim zdaniem nie - ponieważ nie ma ogólnej zasady stabilności.

Jakie są inne przykłady stabilnych i niestabilnych modeli / algorytmów lub zestawów danych?

Jest to otwarte i zbyt szerokie, ponieważ można uzyskać nieskończenie dużą liczbę odpowiedzi, co nie byłoby pomocne.

Czy względnie bezpiecznie jest założyć, że większość modeli / algorytmów lub zestawów danych jest „stabilna”, a zatem, że należy zasadniczo wybierać tak wysoko, jak jest to możliwe obliczeniowo?K

Nie. Nie. Poleganie tylko na zakłada, że ​​wierzysz w dane. Przykładem są Losowe Lasy, dla których tak naprawdę nie ma . Podczas gdy około 37% danych zostanie wykorzystanych do testowania (średnio 37% obiektów nie zostanie wybranych podczas próbkowania z zamiennikiem), istnieje np. 5000 różnych zestawów danych (bootstrapów), z których każdy jest podzielony na szkolenia / testy w różny sposób. Twój przykład zaczerpnięty z dokumentów zakładał, że każdy użyty zestaw danych był prawdziwą realizacją danych - co jest błędnym założeniem. kkk

Biorąc pod uwagę ładowanie, reguła stabilności otaczająca jest dopuszczalna, ponieważ próbka danych zastosowana do bezpośredniego podejścia CV obejmującego nie jest prawdziwą realizacją wszechświata wszystkich danych, z których uzyskano próbkę. kkk


Dziękuję za komentarze, ale to nie wydaje się odpowiadać na pytanie.
Jake Westfall

Zobacz załączoną odpowiedź na PO.
JoleT,

3
Tylko przejrzałem artykuł, ale wydaje się, że naprawdę twierdzą, że 10-krotność jest najlepsza na bardzo chwiejnym gruncie. Nie mogę uwierzyć, że ma 7 tysięcy cytatów. Biorąc to pod uwagę, wydaje się, że istnieje dobry powód, aby sądzić, że ponad 10-krotna korzyść jest duża. Dam bardziej dokładną lekturę, kiedy będę miał okazję.
Cliff AB,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.