2016-08-09 43 views
7

Próba lepszego zrozumienia, w jaki sposób train(tuneLength =) działa w . Moje zamieszanie zdarzyło się, gdy próbowałem zrozumieć niektóre różnice między metodami SVM z {kernlab}. Przejrzałem dokumentację (here) i stronę z instrukcją szkolenia (here).Wyjaśnienie {caret} train (tuneLength =) i metody SVM od {kernlab}

Mój przykład zabawki polegał na utworzeniu pięciu modeli przy użyciu zestawu danych iris. Wyniki to here, a odtwarzalny kod to here (są one dość długie, więc nie zostały skopiowane i wklejane do postu).

Z dokumentacji {caret}:

tuneLength
liczbą całkowitą oznaczającą ilość ziarnistości w siatce parametrów strojenia. Domyślnie ten argument jest liczbą poziomów dla każdego parametru strojenia, który powinien być generowany przez pociąg. Jeśli parametr trainControl ma opcję search = "random", jest to maksymalna liczba kombinacji parametrów strojenia, które zostaną wygenerowane podczas wyszukiwania losowego. (UWAGA: Jeśli podany, argument ten musi być nazwane.)

W this example, trainControl(search = "random") i train(tuneLength = 30), ale wydaje się, że 67 wyników, a nie 30 (maksymalna liczba kombinacji parametrów strojenia)? Próbowałem odtwarzać, aby zobaczyć, czy może było 30 unikalnych wartości ROC, czy nawet wartości ydim, ale według mojego rachunku nie są.

Na przykład zabawki, stworzyłem poniższej tabeli:

caret_SVM

Czy istnieje sposób, aby zobaczyć, co się dzieje „pod maską”? Na przykład, M1 (svmRadial) i M3 (svmRadialSigma) przyjmują i są podane te same parametry melodyczne, ale na podstawie wywołania $results wydaje się używać ich inaczej?

Moje rozumienie train(tuneLength = 9) było to, że oba modele będą produkować wyniki sigma i C każdego z 9 values, 9 times od 9 jest liczba poziomów dla każdego parametru tuning (wyjątkiem jest przypadkowy Search)? Podobnie, M4 będzie 9^3 od train(tuneLength = 9) i są tam parametry strojenia 3?

Michael

Odpowiedz

8

muszę zaktualizować dokumentację pakietu więcej, ale szczegóły są pisane na na package web page for random search:

„Całkowita liczba unikalnych kombinacji jest określony przez opcję traintuneLength”.

Jednak jest to szczególnie zabłocone SVM przy użyciu jądra RBF.Oto zaniedbany:

  • svmRadial melodie ponad kosztach i wykorzystuje pojedynczą wartość sigma oparciu o sigest funkcji kern lab „s. W przypadku przeszukiwania siatki, tuneLength jest liczbą wartości kosztów do przetestowania, a dla wyszukiwania losowego jest to całkowita liczba par (koszt, sigma) do oceny.
  • svmRadialCost jest taki sam jak svmRadial, ale sigest jest uruchamiany wewnątrz każdej pętli resamplingowej. W przypadku wyszukiwania losowego nie nastraja ono ponad sigma.
  • svmRadialSigma z wyszukiwaniem w sieci zarówno kosztem, jak i sigma. W chwili suboptymalnej wydajności poznawczej, ustawiłem to, by wypróbować co najwyżej 6 wartości sigma podczas wyszukiwania w sieci, ponieważ czułem, że przestrzeń kosztowa wymaga szerszego zakresu. W przypadku wyszukiwania losowego robi to tak samo, jak svmRadial.
  • svmRadialWeight jest taki sam jak svmRadial, ale jest również uważany za wagę klasy i dotyczy wyłącznie problemów 2-klasowych.

Co do przykładu SOM na stronie, to jest błąd. Próbuję przeskalować przestrzeń parametru SOM, ponieważ musi być filtr dla xdim <= ydim & xdim*ydim < nrow(x). Błąd pochodzi ode mnie, nie zachowując właściwej ilości parametrów.

+0

Witam Max, bardzo dziękuję za szybką i szczegółową odpowiedź. To jest bardzo pomocne. Używanie APM w klasie razem z ESL, PDSwR i Elder's Ensemble Methods - to świetny tekst. Michael –

+0

@topepo robi 'svmRadialWeight' akceptuje argument' wag "za pośrednictwem' train'? – cdeterman