Chcę przewidzieć pewną wartość i próbuję uzyskać prognozę która optymalizuje między byciem tak niskim, jak to możliwe, ale wciąż większym niż . Innymi słowy:
Myślę, że prosta regresja liniowa powinna dać sobie radę. Wiem więc trochę, jak zaimplementować to ręcznie, ale chyba nie jestem pierwszym, który ma tego rodzaju problemy. Czy są jakieś pakiety / biblioteki (najlepiej Python), które robią to, co chcę? Jakiego słowa kluczowego muszę szukać?
Co, jeśli znałbym funkcję Y_0 (x)> 0, gdzie . Jaki jest najlepszy sposób na wdrożenie tych ograniczeń?
machine-learning
logistic-regression
asPlankBridge
źródło
źródło
Odpowiedzi:
Jeśli dobrze cię rozumiem, chcesz się mylić po stronie przeszacowania. Jeśli tak, potrzebujesz odpowiedniej, asymetrycznej funkcji kosztu. Jednym prostym kandydatem jest poprawienie straty do kwadratu:
gdzie jest parametrem, którego możesz użyć, aby wymienić karę niedoszacowania na przeszacowanie. Dodatnie wartości penalizują przeszacowanie, więc będziesz chciał ustawić ujemny. W Pythonie wygląda to tak−1<α<1 α α
def loss(x, a): return x**2 * (numpy.sign(x) + a)**2
Następnie wygenerujmy trochę danych:
Na koniec dokonamy regresji w
tensorflow
bibliotece uczenia maszynowego od Google, która obsługuje automatyczne różnicowanie (upraszczając optymalizację takich problemów na podstawie gradientu). Wykorzystam ten przykład jako punkt wyjścia.cost
jest regularnym błędem do kwadratu, podczas gdyacost
jest wspomnianą funkcją asymetrycznej straty.Jeśli użyjesz
cost
, otrzymaszJeśli użyjesz
acost
, otrzymaszacost
wyraźnie stara się nie lekceważyć. Nie sprawdziłem zbieżności, ale masz pomysł.źródło
acost
funkcji. Czy to ważne, że obliczaszy_model-Y
dwa razy?Wybierz asymetryczną funkcję straty. Jedną z opcji jest regresja kwantylowa (liniowa, ale o różnych nachyleniach dla błędów dodatnich i ujemnych).
źródło