PYTANIA: Czy regresja logistyczna jest w rzeczywistości algorytmem regresji?
Zazwyczaj definicja regresji (o ile mi wiadomo) przewiduje ciągłą zmienną wyjściową z danego zestawu zmiennych wejściowych. Regresja logistyczna jest algorytmem klasyfikacji binarnej, więc daje wyniki jakościowe. Czy to naprawdę algorytm regresji? Jeśli tak, to dlaczego?
ODPOWIEDZI:
Tak, regresja logistyczna jest algorytmem regresji i przewiduje ciągły wynik: prawdopodobieństwo zdarzenia. To, że używamy go jako binarnego klasyfikatora, wynika z interpretacji wyniku.
Szczegóły : Regresja logistyczna jest rodzajem uogólnionego modelu regresji liniowej.
W zwykłym modelu regresji liniowej wynik ciągły y modeluje się jako sumę iloczynu predyktorów i ich efektu:
y = b_0 + b_1 * x_1 + b_2 * x_2 + … b_n * x_n + e
gdzie e jest błędem.
Uogólnione modele liniowe nie modelują bezpośrednio. Zamiast tego używają transformacji, aby rozszerzyć domenę y na wszystkie liczby rzeczywiste. Ta transformacja nazywa się funkcją link. W przypadku regresji logistycznej funkcją łącza jest funkcja logit (zazwyczaj patrz uwaga poniżej). Funkcja logowania jest zdefiniowana jako
ln (t / (1 + y))
Formą regresji logistycznej jest zatem:
ln (t / (1 + y)) = b_0 + b_1 * x_1 + b_2 * x_2 + … b_n * x_n + e
gdzie y jest prawdopodobieństwem zdarzenia. Fakt, że używamy go jako binarnego klasyfikatora, wynika z interpretacji wyniku.
Uwaga: probit to kolejna funkcja łącza używana do regresji logistycznej, ale najczęściej używana jest logit.
Czy istnieją jakieś nienadzorowane algorytmy uczenia się danych sekwencyjnych?
Każda obserwacja w moich danych była zbierana z różnicą 0,1 sekundy. Nie nazywam tego szeregiem czasowym, ponieważ nie ma znacznika daty i godziny. W przykładach algorytmów grupowania (znalazłem online) i PCA przykładowe dane mają 1 obserwację na przypadek i nie są mierzone w czasie. Ale moje dane zawierają setki obserwacji zbieranych co 0,1 sekundy na pojazd i jest wiele pojazdów.
To, co masz, to sekwencja wydarzeń według czasu, więc nie wahaj się nazwać to Szeregiem Czasowym!
Grupowanie w szeregi czasowe ma 2 różne znaczenia:
- Segmentacja szeregów czasowych, tzn. Chcesz podzielić poszczególne szeregi czasowe na różne przedziały czasowe zgodnie z wewnętrznymi podobieństwami.
- Grupowanie szeregów czasowych, tzn. Masz kilka szeregów czasowych i chcesz znaleźć różne klastry zgodnie z podobieństwami między nimi.
Zakładam, że masz na myśli drugi, a oto moja propozycja:
Masz wiele pojazdów i wiele obserwacji na pojazd, tj. masz wiele pojazdów.
Masz więc kilka macierzy (każdy pojazd jest macierzą), a każda macierz zawiera N wierszy (Liczba obserwacji) i T kolumn (punkty czasowe). Jedną z sugestii może być zastosowanie PCA do każdej matrycy, aby zmniejszyć wymiarowość i obserwować dane w przestrzeni PC i sprawdzić, czy istnieją znaczące relacje między różnymi obserwacjami w obrębie matrycy (pojazdu). Następnie możesz umieścić każdą obserwację dla wszystkich pojazdów na sobie i zrobić matrycę i zastosować do tego PCA, aby zobaczyć relacje pojedynczej obserwacji między różnymi pojazdami. Jeśli nie masz wartości ujemnych, zdecydowanie zaleca się faktoryzację macierzy i redukcję wymiarów danych matrycowych. Inną sugestią może być umieszczenie wszystkich macierzy jeden na drugim i zbudowanie tensora NxMxT, gdzie N to liczba pojazdów, M to liczba obserwacji, a T to sekwencja czasowa i zastosowanie dekompozycji Tensor, aby zobaczyć relacje globalnie. Bardzo przyjemne podejście do klastrowania szeregów czasowych zostało przedstawione w tym artykule, w którym wdrożenie jest ciche od samego początku.
Mam nadzieję, że to pomogło!
Powodzenia 🙂
Jak wspomniałeś, masz na myśli segmentację szeregów czasowych. Dodaję to do odpowiedzi. Segmentacja szeregów czasowych jest jedynym problemem klastrowym, który ma podstawową prawdę do oceny. Rzeczywiście, rozważasz rozkład generowania poza szeregami czasowymi i analizujesz go. Zdecydowanie polecam to, to, to, to, to i tam, gdzie twój problem jest kompleksowo badany. Szczególnie ostatni i praca doktorska.
Powodzenia!
Z jakich algorytmów lub metod można wykryć wartość odstającą z tego zestawu danych?
Załóżmy, że mam zestaw danych: Kwota pieniędzy (100, 50, 150, 200, 35, 60, 50, 20, 500). Szukałem w Google informacji o technikach, które można wykorzystać do znalezienia możliwej wartości odstającej w tym zbiorze danych, ale skończyło się to zdezorientowane. Moje pytanie brzmi: jakich algorytmów, technik lub metod można użyć do wykrycia możliwej wartości odstającej w tym zbiorze danych?
PS: Weź pod uwagę, że dane nie mają normalnego rozkładu. Dzięki.
Prostym podejściem byłoby użycie tego samego, co robi wykresy pudełkowe: z dala od 1,5 (mediana-q1) lub 1,5 (q3-mediana) = wartość odstająca. Uważam to za przydatne w wielu przypadkach, nawet jeśli nie jest idealne i może zbyt proste. Ma tę zaletę, że nie zakłada normalności.
Jednym ze sposobów myślenia o wykrywaniu wartości odstających jest to, że tworzysz model predykcyjny, a następnie sprawdzasz, czy punkt mieści się w zakresie prognoz. Z teoretycznego punktu widzenia możesz zobaczyć, jak bardzo każda obserwacja zwiększa entropię twojego modelu. Jeśli traktujesz te dane jako zbiór liczb i nie masz proponowanego modelu ich generowania, równie dobrze możesz spojrzeć na średnią. Jeśli masz pewność, że liczby nie są normalnie dystrybuowane, nie możesz składać oświadczeń jak daleko „od” jest dana liczba od średniej, ale możesz po prostu spojrzeć na nią w wartościach bezwzględnych. Stosując to, możesz wziąć średnią wszystkich liczb, a następnie wykluczyć każdą liczbę i wziąć średnią pozostałych. Jakakolwiek średnia najbardziej różni się od średniej globalnej, jest największą wartością odstającą. Oto kilka python:
def avg(a):
return sum(a)/len(a)
l = [100, 50, 150, 200, 35, 60 ,50, 20, 500]
m = avg(l)
for idx in range(len(l)):
print(“outlier score of {0}: {1}”.format(l[idx], abs(m – avg([elem for i, elem in enumerate(l) if i!=idx]))))
>>
outlier score of 100: 4
outlier score of 50: 10
outlier score of 150: 3
outlier score of 200: 9
outlier score of 35: 12
outlier score of 60: 9
outlier score of 50: 10
outlier score of 20: 14
outlier score of 500: 46