Denoising PCA

W dniu wczorajszym część dyskusyjna strony została wyłączona w związku ze znikomym zainteresowaniem.

Jedyny wątek dyskusyjny, dotyczący odszumiania PCA, archiwizuję poniżej. Zachęcam do dalszej dyskusji już na liście mailowej lub w okienku komentarzy pod postem.

W: Witam!Pracuję na danych z obrazowania spektroskopowego FT-IR tkanek. Moje dane  to matryce rozmiarów np. 512x512x1500 (1500 zmiennych spektralnych). Chciałem zastosować PCA denoising, które jest stosowane czasem do odszumiania takich danych. Po rozmowach ze specjalistami, zasugerowali mi, że wystarczy do 10 PC’s aby odszumić dane. Niestety moje testy wykazały coś innego. Nawet stosując 30 PC’s niektóre pojedyncze widma są zniekształcane i nie można stosować takiego usuwania szumu w ciemno. Mam ok. 300 Gb danych, więc nie mam możliwości sprawdzać każdego obrazu po kolei. Wydaje się, że dane są zbyt heterogeniczne, aby mała liczba PC’s była w stanie odtworzyć dobrze dane. Z kolei używanie ok. 50 PC’s trochę mija się z celem, bo miejscami dodaje szumu. Jak sobie z tym poradzić?

ŁK: To są dane trójlinearne (tensor, kostka). Robienie na tym globalnego PCA (czyli jedno PCA na całej kostce) wymaga rozwinięcia tego do macierzy (unfoldng) wzdłuż któregoś boku. Bo robienie PCA oddzielnie na każdym “plasterku” zniszczy dane (wprowadzi artefakty). Natomiast wybór “wzdłuż którego boku rozwijać” jest tutaj krytyczny, na moje wyczucie to ja bym się wręcz bał tego rozwijać… Czy odszumianie tego jest konieczne? Czy szum jest widoczny i przeszkadza? Co ma być robione z tym dalej? Bo jeśli coś w stylu PLS to PCA nie da za wiele więcej (PLS też przecież znajduje kierunki, a potem odrzuca to co jest poza wybraną liczbą głównych kierunków). Jest cała masa innych algorytmów. Co do liczby wymaganych składowych, to ja się wcale nie dziwię. Ciężko mi uwierzyć, że takie dane się zawrą w 10 PC. Kojarzy mi się na szybko taki artykuł: http://dx.doi.org/10.1016/j.csda.2004.07.008, przy czym nie ma do tego gotowych programów, a obliczenia są raczej skomplikowane. Tyle przemyśleń na gorąco, do dalszych trzeba więcej danych…

MD: Cześć, należy pamiętać, iż PCA jest metodą kompresji danych. Budując model PCA w oparciu o kilka czynników głównych, możemy usunąć CZĘŚĆ błędu mającego losowy charakter. W sytuacji, gdy błąd jest proporcjonalny do intensywności sygnału PCA tylko trochę pomoże. PCA nie jest typową metodą odszumiania sygnałów, ale czemu nie spróbować. Warto pamiętać, iż dane należy wpierw rozwinąć do wymiaru 512*512 X 1500. Może się jednak okazać, iż będzie problem z pamięcią. Proponuję zrobić kernel 1500 X 1500 i na tym PCA. Prawdziwe metody dedykowane odszumianiu to np. falki …

W: Dziękuję bardzo za odpowiedzi i chętnie podejmę temat dalej. Ad. lukke Tal rozwinięcie takiej kostki jest niezbędne i w moim przypadku nie ma problemu z wyborem wzdłuż czego, bo dane mają dwa kierunki przestrzenne, po których sensownie jest rozwinąć. Trzeci to widma FT-IR, więc nie bardzo. Oczywiście dalej w analizie traci się tę zależność przestrzenną między obiektami, ale to osobna kwestia. Odszumianie jest przydatne, ponieważ dzięki temu mogę skrócić czas pomiarów (liczbę akumulacji) i zmierzyć więcej próbek. Jest to przydatne aby pokryć lepiej zmienność między próbkami. Dobra uwaga, że jeżeli chcę dalej robić na tym np. PLS to nie ma sensu odszumianie… Jako, że tak naprawdę szukamy wszelkich różnic w danych to zaczynam od integracji wybranych zakresów (czyli fragmentów wektorów 1500 zmiennych). Tutaj szum faktycznie jest w stanie zmienić integracje zwłaszcza przy wąskich zakresach. Za artykuł również dzięki – przyswoję w najbliższym czasie. Ad. michal Szum w naszym układzie nie powinien być proporcjonalny do sygnału albo w minimalnym stopniu. Faktycznie pojawiają się problemy z pamięcią przy dużych macierzach, ale jeszcze sobie z tym radzę. Mogę prosić o rozwinięcie kwestii z zastosowaniem kernela? Nie jest to dla mnie jeszcze proste pojęcie i trochę nie czuję całości idei. Co do falek to było mi to wielokrotnie sugerowane, ale chciałem zapytać jakie plusy vs. inne metody one posiadają. Chodzi mi o czas obliczeń, potencjał usunięcia sygnału, poziom skomplikowania (długość optymalizacji). Inną opcją jest np. fourierowskie usuwanie szumu – w czym byłyby lepsze? Pozdrawiam

ŁK: Myślę, myślę i zanim napiszę więcej potrzebuję jeszcze jednego detalu. Na ile ten szum się rozkłada wzdłuż wymiarów kostki? Tzn: bardziej są zaszumione widma, czy obrazy? Czy też jednakowo?

W: W skali absolutnej szum jest równomierny zarówno w widmach jak i obrazach, ale ponieważ niektóre fragmenty obrazu nie zawierają np. tkanki, to automatycznie widmo takie jest mocno zaszumione, bo brak jest sygnału. Dlatego normalizacja jest dość niebezpieczna, bo wtedy szum jest zwiększany. Dobrze rozumuję?

ŁK: Odszumianie należałoby wykonać przed normalizacją, wtedy nie będzie problemu ze wzrostem szumu (tzn. nadal w jakimś stopniu będzie, ale odwrotny processing nie ma zbytniego sensu). Patrząc na literaturę (dosłownie kilka pozycji z IEEE, które zalecają dziwne algorytmy) temat wydaje się być pionierski i mimo głębokich przemyśleń nie bardzo wiem od czego zacząć tak “na sucho” bez obcowania z danymi. Wracając do pierwszego postu – jeśli stosowanie 50 PCs dodaje nieco szumu, to co byłoby, gdyby tę liczbę nieco zmniejszyć? Powstaną jakieś uszkodzenia detali? Może jednak ta technika nie byłaby wcale taka zła i byłby to kompromis prostota-skuteczność…. No i jeszcze jedno pytanie – a co się stanie, jeśli nie będziemy odszumiać w ogóle?

Share on Google+Share on LinkedInTweet about this on TwitterShare on Facebook

Comments

comments

Comments are closed