Jako atrybut mam pole „godzina”, ale przyjmuje ono wartości cykliczne. Jak mogłem przekształcić tę funkcję, aby zachować informacje, takie jak „23” i „0” godzina są blisko.
Jednym ze sposobów, w jaki mogłem myśleć, jest transformacja: min(h, 23-h)
Input: [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
Output: [0 1 2 3 4 5 6 7 8 9 10 11 11 10 9 8 7 6 5 4 3 2 1]
Czy istnieje jakiś standard obsługi takich atrybutów?
Aktualizacja: Będę korzystał z nadzorowanej nauki, aby trenować losowy klasyfikator lasu!
feature-extraction
feature-scaling
featurization
Mangat Rai Modi
źródło
źródło
Odpowiedzi:
Najbardziej logicznym sposobem na przekształcenie godziny są dwie zmienne, które wychylają się do przodu i do tyłu z ujścia. Wyobraź sobie pozycję końca wskazówki godzinowej 24-godzinnego zegara. Te
x
wahania pozycji iz powrotem z umywalką zy
pozycji. Na zegarze 24-godzinnym można to osiągnąć zx=sin(2pi*hour/24)
,y=cos(2pi*hour/24)
.Potrzebujesz obu zmiennych lub utracisz właściwy ruch w czasie. Wynika to z faktu, że pochodna grzechu lub cos zmienia się w czasie, gdy
(x,y)
pozycja zmienia się płynnie, gdy przemieszcza się po okręgu jednostki.Na koniec zastanów się, czy warto dodać trzecią cechę do śledzenia czasu liniowego, którą można skonstruować w ciągu moich godzin (lub minut lub sekund) od początku pierwszego rekordu, uniksowego znacznika czasu lub czegoś podobnego. Te trzy cechy zapewniają następnie przybliżenie zarówno cyklicznego, jak i liniowego postępu czasu, np. Można wyciągnąć zjawisko cykliczne, takie jak cykle snu w ruchu ludzi, a także liniowy wzrost, jak populacja w funkcji czasu.
Mam nadzieję że to pomoże!
Dodając odpowiedni przykładowy kod wygenerowany dla innej odpowiedzi:
Przykład realizacji:
Teraz wypróbujmy to:
Ledwo widać, że niektóre są po północy dołączone do zielonego gromady przed północą. Teraz pozwala zmniejszyć liczbę klastrów i pokazać, że przed i po północy można połączyć bardziej szczegółowo w jednym klastrze:
Zobacz, jak niebieski klaster zawiera czasy sprzed i po północy, które są skupione w tym samym klastrze ...
CO BYŁO DO OKAZANIA!
źródło
Pytanie jest bardzo interesujące i nie pamiętam o ciekawych odpowiedziach. Z tego powodu odważę się podać jedno możliwe rozwiązanie, nawet jeśli wygląda na wystarczająco szalone.
Zwykle unika się posiadania tych samych informacji w wielu funkcjach, ponieważ wiele algorytmów nie może sobie z tym poradzić. Ale to nie jest przypadkowy las. Kontrastowe regresje liniowe (i wszystkie modele oparte na podobnych pomysłach), losowe lasy testują wszystkie cechy, biorąc pod uwagę każdą cechę pojedynczo. W ten sposób można kodować te same informacje na wiele sposobów bez wpływu na wydajność uczenia się, tylko przestrzeń i czas pracy.
Tak więc moją propozycją byłoby utworzenie 24 operacji, każda z form . To tak, jakbyś kodował czas w lokalnych strefach czasowych. W ten sposób dajesz rf okazję do wykrycia za pomocą tych samych jednostek interesujących aglomeracji w ciągu kilku godzin, ponieważ każda możliwa godzina ma szansę zostać poprawnie zakodowana w co najmniej 1 z 24 funkcji.(h+offset)
Marnuje trochę miejsca i czasu, ale spróbuję zobaczyć, jak to działa.
źródło
Idealnie nie potrzebujesz żadnej transformacji. Względną różnicę czasu między dwoma punktami można wykorzystać jako funkcję odległości. Gdzie klasyfikacja może być oparta na tym.
w java:
źródło