Odpowiednia technika zależy od celu
Jeśli tworzysz model do wnioskowania, powinieneś skupić się na właściwościach dystrybucji celu w zależności od współzmiennych, $ p (y | x) $.
Na przykład wartość 0,5 USD (y + 1) $ może zostać podzielona jako $ Beta (\ alpha (x), \ beta (x)) $. W takim przypadku można dokonać estymacji maksymalnej wiarygodności parametrów funkcji $ \ alpha (x) $ i $ \ beta (x) $ i znaleźć dla nich najlepszą postać (np. Liniową lub log-liniową). Aby uzyskać więcej informacji, kliknij „regresję beta” Google.
Zamiast $ Beta $ możesz dopasować GLM do dowolnej funkcji linku (w rzeczywistości powszechnie używany jest link logit). Możesz również zmapować $ y $ na $ (- \ infty, \ infty) $ z dowolną funkcją i użyć nieograniczonej regresji. Jednak ostatnie podejście może się nie powieść, jeśli dane zawierają dokładnie $ \ pm 1 $ s.
Kolejną sztuczką jest przekształcenie regresji w klasyfikację ważoną. Z każdej obserwacji szkoleniowej $ (x, y) $ można wygenerować dwie obserwacje $ (x, 1) $ i $ (x, 0) $ z odpowiednimi wagami $ \ frac {1 + y} {2} $ i $ \ frac {1-y} {2} $, dopasuj klasyfikator probabilistyczny (np. Regresja logistyczna lub probitowa), a następnie przekształć przewidywane prawdopodobieństwo 1 $ z powrotem do $ y $.
Jeśli budujesz model a do przewidywania, właściwości probabilistyczne mogą być ignorowane, po prostu skup się na przewidywaniu $ y $ tak blisko, jak to możliwe, cokolwiek to znaczy. W tym przypadku możesz dopasować dowolną funkcję $ y = f (x) $ i po prostu skrócić poza $ [- 1, 1] $. Takie podejście pozwala wypróbować wiele różnych algorytmów regresji bez zbytniego przejmowania się granicami na $ y $.
Ponadto kilka modeli uczenia maszynowego (np. drzewa decyzyjne i ich zbiory losowe lasy, k-najbliższego sąsiada lub jakakolwiek inna metoda, której prognoza a jest średnią ważoną próbek szkoleniowych) z założenia nie jest w stanie przewidzieć wyższego niż najwyższy trening wartość lub niższa od najniższej. Jeśli ich użyjesz, możesz nigdy nie martwić się o przedział $ y $.
Jakie podejście jest standardowe, zależy od domeny i celu. Ale dopasowanie funkcji logistycznej do danych ciągłych wydaje się być w porządku:
- zawsze przewiduje w $ (- 1, 1) $
- działa nawet z dokładnym $ \ pm 1 $
- uogólniona forma liniowa daje podstawę do wnioskowania i wyboru cech
- w większości przypadków miał przyzwoitą dokładność przewidywania.
Teraz nadszedł czas na implementation. Istnieje przykład kodu R
, który ocenia taki model.
set.seed (1)
data = data.frame (x = 1: 100)
dane $ y = 1 / (1 + exp (5-0,1 * (dane $ x) + rnorm (100)))
model = glm (y ~ x, rodzina = 'dwumian', dane = dane)
podsumowanie (model)
działka (x, y)
linie (x, prognoza (model, dane, typ = 'odpowiedź'))
Wyświetla następującą tabelę oszacowanych współczynników (zbliżonych do „prawdziwych” współczynników, których użyłem)
Współczynniki:
Oszacuj Std. Wartość błędu z Pr (> | z |)
(Przechwycenie) -4,48814 0,88243 -5,086 3,65e-07 ***
x 0,08713 0,01615 5,394 6,89e-08 ***
i zdjęcie z danymi treningowymi i dopasowaną funkcją
Niestety Python
sklearn
nie pozwala na uruchomienie regresji logistycznej w trybie regresji, ale jest to możliwe w przypadku statsmodels
- ma klasa Logit
, która zezwala na ciągłe cele. Interfejs i wyjście są bardzo podobne do tych z R
:
importuj pandy jako pd
importuj numpy jako np
import matplotlib.pyplot jako plt
import statsmodels.formula.api jako smf
np.random.seed (1)
df = pd.DataFrame ({'x': range (100)})
df ['y'] = 1 / (1 + np.exp (5-0,1 * (df.x) + np.random.normal (size = 100)))
model = smf.logit ('y ~ x', dane = df) .fit ()
drukuj (model.params)
plt.scatter (df.x, df.y)
plt.plot (df.x, model.predict (df), kolor = 'k')
plt.show ()
Jeszcze jedną kwestią wartą rozważenia jest metryka oceny dla twojego modelu.Wraz ze standardowymi RMSE i MAE, w takich problemowych metrykach opartych na rangach, takich jak korelacja Spearmana, mogą być przydatne.Jeśli zamiast regresji wykonujesz klasyfikację ważoną, możesz również obliczyć ważone metryki klasyfikacji, takie jak ROC AUC.
Uzasadnieniem dla takich wskaźników jest to, że na końcu możesz nie chcieć przewidywać $ y $ tak dokładnie, jak to możliwe, ale oddzielić dolny $ y $ od wysokiego $ y $ tak dokładnie, jak to możliwe, ale nie znaszpróg z góry lub jest zmienny.Wskaźniki oparte na rangach lepiej odzwierciedlają ten proces niż wskaźniki oparte na różnicach.