⚾ Klasyfikator rzutów — maszyna wektorów nośnych na żywo
Obserwuj, jak prawdziwa jądrowa maszyna wektorów nośnych uczy się na żywo granicy maksymalnego marginesu między symulowanymi typami rzutów, na podstawie prawdziwych cech tempa rotacji i prędkości.
O tej symulacji
Każdy rzut zapisany przez skauta zawiera prędkość wypuszczenia i tempo rotacji prosto z radaru śledzącego. Ten symulator zamienia tę parę liczb w prawdziwy problem klasyfikacji uczenia maszynowego: mając fastball, curveball i — opcjonalnie — slider, czy maszyna wektorów nośnych może narysować granicę, która je rozdziela? Zamiast udawać odpowiedź, strona uruchamia prawdziwy uproszczony solver sekwencyjnej optymalizacji minimalnej (SMO) na dowolnych rzutach aktualnie istniejących w zbiorze treningowym i rozwiązuje go od nowa za każdym razem, gdy dodasz rzut lub zmienisz jądro, siłę regularyzacji C lub szerokość pasma jądra γ.
🔬 Co pokazuje
Wykres powierzchni 3D, gdzie płaszczyzna pozioma to prędkość × tempo rotacji, a wysokość to surowa wartość funkcji decyzyjnej SVM f(x) = Σ αᵢyᵢK(xᵢ,x) + b. Przecięcie powierzchni z płaszczyzną z = 0 to faktyczna granica decyzyjna; płaszczyzny z = ±1 oznaczają prawdziwy margines. Rzuty treningowe to kule pokolorowane według typu rzutu, z wektorami nośnymi obwiedzionymi na biało — zarówno granica, jak i zbiór wektorów nośnych są przeliczane na żywo z bieżących danych, nigdy zakodowane na sztywno.
🎮 Jak korzystać
Wybierz jądro (liniowe, wielomianowe lub gaussowskie RBF), a następnie przeciągnij C, aby wyważyć szerokość marginesu względem dokładności treningowej, oraz γ / stopień, aby zmienić elastyczność jądra. Włącz suwak slidera, aby zamienić to w problem 3-klasowy, jeden-przeciw-reszcie. Naciśnij "Nowy rzut", aby wprowadzić świeżo wylosowany, oznaczony rzut i obserwować natychmiastowe ponowne dopasowanie granicy, lub włącz Auto-strumień, aby stale zasilać danymi. Przeciągnij, aby obrócić widok 3D, przewiń, aby przybliżyć.
💡 Czy wiesz, że?
Ponieważ prędkość i rotacja slidera rzeczywiście nakładają się zarówno na fastballe, jak i curveballe w prawdziwych danych Statcast, żadna prosta linia nie może idealnie rozdzielić wszystkich trzech typów rzutów. Przełączenie z jądra liniowego na jądro RBF z wystarczająco wysokim γ pozwala granicy zakrzywić się wokół nakładającego się skupienia — żywa demonstracja dokładnie tego, dlaczego istnieje sztuczka jądrowa.
Najczęściej zadawane pytania
Czym jest maszyna wektorów nośnych (SVM)?
Maszyna wektorów nośnych to nadzorowany klasyfikator, który znajduje hiperpłaszczyznę rozdzielającą dwie klasy z możliwie największym marginesem — najszerszym pustym korytarzem między najbliższymi punktami każdej klasy. Te najbliższe punkty nazywane są wektorami nośnymi, ponieważ to one same decydują o położeniu granicy; każdy inny punkt treningowy można by usunąć bez zmiany rozwiązania. Maksymalizacja marginesu, a nie tylko znalezienie dowolnej linii rozdzielającej, zwykle lepiej generalizuje do nowych danych, ponieważ pozostawia najwięcej miejsca na szum, zanim punkt przejdzie do złej klasy.
Jak sztuczka jądrowa pozwala SVM rysować zakrzywione granice?
Postać dualna problemu optymalizacji SVM potrzebuje jedynie iloczynów skalarnych między parami punktów treningowych, nigdy samych surowych współrzędnych. Sztuczka jądrowa zastępuje ten iloczyn skalarny x·z funkcją jądra K(x,z), która oblicza iloczyn skalarny tak, jakby punkty zostały najpierw odwzorowane w znacznie wyższej przestrzeni cech — bez jawnego konstruowania tej przestrzeni. Jądro liniowe daje prostą granicę; jądro wielomianowe daje zakrzywione granice wielomianowe; jądro gaussowskie RBF K(x,z) = exp(−γ‖x−z‖²) daje gładkie, elastyczne granice, które mogą owijać się wokół nakładających się skupień.
Co kontroluje parametr regularyzacji C?
C to pokrętło kompromisu w celu SVM z miękkim marginesem: minimalizuj ½‖w‖² + C·Σξᵢ, gdzie ξᵢ to zmienne swobodne pozwalające poszczególnym punktom znajdować się wewnątrz marginesu lub po złej stronie. Małe C toleruje więcej naruszeń marginesu dla szerszego, gładszego marginesu — faworyzując generalizację. Duże C mocno karze naruszenia, wymuszając ciaśniejsze dopasowanie, co niesie ryzyko nadmiernego dopasowania do konkretnych dotychczas widzianych rzutów.
Czym są wektory nośne i dlaczego liczą się tylko niektóre punkty?
Po treningu każdy punkt i ma mnożnik Lagrange'a αᵢ. Punkty wygodnie leżące po właściwej stronie marginesu kończą z αᵢ = 0 i nie wnoszą nic do funkcji decyzyjnej; tylko punkty na marginesie lub wewnątrz niego — wektory nośne — mają αᵢ > 0. Funkcja decyzyjna f(x) = Σ αᵢyᵢK(xᵢ,x) + b sumuje tylko po tych wektorach nośnych, więc wytrenowana SVM może być niezwykle kompaktowa nawet z większego zbioru danych.
Jak faktycznie rozwiązywana jest SVM — czy to prawdziwy optymalizator?
Tak. Ta symulacja implementuje uproszczoną procedurę sekwencyjnej optymalizacji minimalnej (SMO) — ideę dualnego wznoszenia współrzędnych, którą John Platt wprowadził w 1998 roku i która leży u podstaw bibliotek takich jak libsvm. Każde przejście wybiera naruszającą parę mnożników Lagrange'a, rozwiązuje ich dwuzmienny podproblem kwadratowy analitycznie w ramach ograniczenia skrzynkowego 0 ≤ αᵢ ≤ C i Σ αᵢyᵢ = 0, aktualizuje obciążenie na podstawie warunków KKT i powtarza, aż w granicach tolerancji nie pozostaną żadne naruszenia.
Jak działa schemat jeden-przeciw-reszcie dla trzech typów rzutów?
Standardowa SVM jest z natury binarna. Aby obsłużyć razem fastball, curveball i slider, symulacja trenuje trzy oddzielne binarne SVM, z których każda traktuje jeden typ rzutu jako pozytywny, a pozostałe dwa połączone jako negatywny. Dla nowego rzutu wszystkie trzy funkcje decyzyjne są obliczane, a wygrywa klasa z największym pozytywnym wynikiem — jeden z najprostszych sposobów rozszerzenia klasyfikatora binarnego na wiele klas.
Uproszczony solver dualnego wznoszenia współrzędnych SMO dopasowuje jądrową SVM z miękkim marginesem do danych tempa rotacji i prędkości na żywo za każdym razem, gdy napłynie rzut lub zmieni się hiperparametr; powierzchnia 3D, płaszczyzny marginesu i wektory nośne są zawsze przeliczane, nigdy zaskryptowane.
3D · Renderer Three.js / WebGL · cel 60 FPS · działa w całości po stronie klienta, bez instalacji