2012-01-20 15 views
5

Chciałbym znaleźć najlepszy sposób na wykrycie wartości odstających. tutaj jest problem i niektóre rzeczy, które prawdopodobnie nie będą działać. Powiedzmy, że chcemy wyłowić jakieś quasi-jednolite dane z brudnej kolumny varchar (50) w mysql. Zacznijmy od wykonania analizy według długości łańcucha.wykrywanie wartości odstających w rzadkiej dystrybucji?

| strlen | freq | 
|  0 | 2312 | 
|  3 |  45 | 
|  9 |  75 | 
|  10 | 15420 | 
|  11 | 395 | 
|  12 | 114 | 
|  19 |  27 | 
|  20 | 1170 | 
|  21 |  33 | 
|  35 |  9 | 

co chciałbym zrobić, to wymyślić algorytm, aby określić, które ciąg długość ma wysokie prawdopodobieństwo bycia celowo wyjątkowy zamiast być typeo lub losowe śmieci. to pole ma możliwość bycia typem "enum", więc może istnieć kilka skoków częstotliwości dla prawidłowych wartości. wyraźnie 10 i 20 są ważne, 0 to po prostu pominięte dane. 35 i 3 mogą być losowymi śmieciami, mimo że oba są bardzo różne pod względem częstotliwości. 19 i 21 może być typu-os w stosunku do formatu 20. 11 może być typu-os dla 10, ale co z 12?

Po prostu wydaje się, że częstotliwość występowania% nie wystarczy. potrzebne są hotspoty o wyższym prawdopodobieństwie "tylko błędu" wokół oczywistych wartości odstających.

również, o ustalonym progu nie powiedzie się, gdy istnieje 15 unikalnych długości, które mogą się różnić od 5-20 znaków, każdy z od 7% do 20% występowania.

odchylenie standardowe nie będzie działać, ponieważ zależy od średniej. mediana bezwzględnego odchylenia prawdopodobnie nie będzie działać, ponieważ możesz mieć odchylenie wysokiej częstotliwości, którego nie można odrzucić.

tak będą inne parametry do czyszczenia danych w kodzie, ale długość wydaje się bardzo szybko wstępnie filtrować i klasyfikować pola o dowolnej ilości struktury.

Czy są jakieś znane metody, które działałyby wydajnie? Nie jestem zaznajomiony z filtrami Bayesa ani uczeniem maszynowym, ale może oni mogą pomóc?

dziękuję! leon

+0

+1 za ciekawe pytanie +1 za interesujące pytanie – cctan

Odpowiedz

2

Wygląda na to, że wykrycie anomalii jest możliwe. Wykrywanie anomalii jest rodzajem uczenia maszynowego, które służy do znajdowania wartości odstających. Występuje w kilku odmianach, w tym nadzorowanych i nienadzorowanych. W uczeniu nadzorowanym algorytm jest szkolony przy użyciu przykładów wartości odstających. W uczeniu bez nadzoru algorytm próbuje znaleźć wartości odstające bez żadnych przykładów. Oto kilka linków, aby rozpocząć się:

http://en.wikipedia.org/wiki/Anomaly_detection

http://s3.amazonaws.com/mlclass-resources/docs/slides/Lecture15.pdf

nie znaleźliśmy żadnych linków do łatwo dostępnych bibliotek. Coś w rodzaju MATLAB lub jego darmowej kuzynki, Octave, może być dobrym sposobem, jeśli nie możesz znaleźć biblioteki detekcji anomalii w wybranym przez ciebie języku. https://goker.wordpress.com/tag/anomaly-detection/

+0

dziękuję, jest to bardzo interesujące i wydaje się być na miejscu, ale nie wydaje się łatwe do zaimplementowania, aby było opłacalne dla mojego projektu: (zamierzam dalej eksplorować prostsze ważone - skuteczna implementacja, – leeoniya

+0

to także: http://en.wikipedia.org/wiki/Local_outlier_factor – leeoniya

+0

@leeoniya - czynnik lokalny outlier wygląda na doskonały wybór, artykuł, do którego prowadzi link, zawiera wykres Dim2 kontra Dim1, w tym przypadku będzie to Częstotliwość w stosunku do długości ciągu ... Wygląda na to, że można go łatwo wdrożyć, ale w artykule nie ma wiele do zrobienia. Czy możesz wskazać nam źródła inne niż odniesienia do dokumentów na końcu? artykułu? – ahoffer

Powiązane problemy