Dlaczego warto korzystać z skalowanie Platta?

17

Aby skalibrować poziom ufności do prawdopodobieństwa w nadzorowanym uczeniu się (powiedzmy, aby odwzorować pewność z SVM lub drzewa decyzyjnego przy użyciu danych z nadpróbkowanych danych) jedną z metod jest zastosowanie skalowania Platta (np. Uzyskiwanie skalibrowanych prawdopodobieństw z wzmocnienia ).

Zasadniczo używa się regresji logistycznej do mapowania na . Zmienna zależna jest prawdziwą etykietą, a predyktorem jest pewność z nieskalibrowanego modelu. Nie rozumiem zastosowania zmiennej docelowej innej niż 1 lub 0. Metoda wymaga utworzenia nowej „etykiety”:[;][0;1]

Aby uniknąć nadmiernego dopasowania do zestawu pociągów sigmoidalnych, stosuje się model poza próbą. Jeśli w zestawie pociągów znajdują się przykłady dodatnie i przykłady ujemne , dla każdego przykładu treningowego Kalibracja Platt wykorzystuje wartości docelowe i (odpowiednio odpowiednio 1 i 0), gdzie N+Ny+y

y+=N++1N++2;y=1N+2

Co ja nie rozumiem, jak ten nowy cel jest przydatna. Regresja logistyczna jest po prostu nie zamierza traktować jako zmienną zależną binarnej etykiety (niezależnie od tego, co podano etykiety)?

AKTUALIZACJA:

Przekonałem się, że w SAS zmiana zależności z na coś innego wróciła do tego samego modelu (za pomocą ). Być może mój błąd lub może brak wszechstronności SAS. Byłem w stanie zmienić model w R. Jako przykład:1/0PROC GENMOD

data(ToothGrowth) 
attach(ToothGrowth) 

  # 1/0 coding 
dep          <- ifelse(supp == "VC", 1, 0) 
OneZeroModel <- glm(dep~len, family=binomial) 
OneZeroModel 
predict(OneZeroModel) 

  # Platt coding 
dep2           <- ifelse(supp == "VC", 31/32, 1/32) 
plattCodeModel <- glm(dep2~len, family=binomial) 
plattCodeModel 
predict(plattCodeModel) 

compare        <- cbind(predict(OneZeroModel), predict(plattCodeModel)) 

plot(predict(OneZeroModel), predict(plattCodeModel))
B_Miner
źródło

Odpowiedzi:

13

Proponuję zajrzeć na stronę wikipedii dotyczącą regresji logistycznej . Stwierdzono, że w przypadku binarnej zależnej regresji logistycznej regresja mapuje predyktory na prawdopodobieństwo wystąpienia zmiennej zależnej. Bez jakiejkolwiek transformacji prawdopodobieństwo zastosowane do treningu modelu wynosi 1 (jeśli y jest dodatnie w zestawie treningowym) lub 0 (jeśli y jest ujemne).

pi=1(1+exp(Afi+B))fiy+y

Steffen
źródło
Dzięki za odpowiedzi! Najpierw używałem SAS i nie mogłem uzyskać innej zmiennej odpowiedzi. Jako przykład dopasowuję poniższe w R i widzę, że pojawia się ostrzeżenie o tym, że nie jest zmienną odpowiedzi całkowitej, ale wynik pasował do innego modelu.
B_Miner
data (ToothGrowth) attach (ToothGrowth) # 1/0 kodowanie dep <-ifelse (supp == "VC", 1,0) OneZeroModel <-glm (dep ~ len, family = dwumianowy) Prognozowanie OneZeroModel (OneZeroModel) #Platt dep2 <-ifelse (supp == "VC", 31/32, 1/32) plattCodeModel <-glm (dep2 ~ len, rodzina = dwumianowa) plattCodeModel przewiduj (plattCodeModel) porównaj <-bind (przewiduj (OneZeroModel), przewiduj ( plattCodeModel)) wykres (przewidywanie (OneZeroModel), przewidywanie (plattCodeModel))
B_Miner
@ user2040: 1. Tak ... jest pytanie czy to tylko uwaga :)? 2. dlaczego nie dodajesz kodu do pytania? Żadne formatowanie nie jest straszne.
steffen
2

Inną metodą unikania nadmiernego dopasowania, którą uznałem za przydatną, jest dopasowanie modelu jednoczynnikowej regresji logistycznej do pominiętego wyjścia SVM, które można efektywnie aproksymować przy użyciu zakresu Span .

Jeśli jednak chcesz, aby klasyfikator generował oszacowania prawdopodobieństwa członkostwa w klasie, lepiej byłoby użyć regresji logistycznej jądra, która ma to zrobić bezpośrednio. Wyjście SVM jest przeznaczone do dyskretnej klasyfikacji i niekoniecznie zawiera informacje wymagane do dokładnego oszacowania prawdopodobieństw od konturu p = 0,5.

Klasyfikatory procesu Gaussa są kolejną dobrą opcją, jeśli chcesz oparty na jądrze klasyfikator probabilistyczny.

Dikran Torbacz
źródło